一个有用的docker entrypoint脚本的范例

简介: 通过这个 Entrypoint 脚本,您可以确保在 Docker 容器启动时执行必要的初始化步骤,并且容器可以根据不同的运行时环境进行相应的配置和操作。这个范例展示了如何编写一个灵活且功能强大的 Entrypoint 脚本,使您的 Docker 容器更加可靠和易于管理。

有用的 Docker Entrypoint 脚本范例

Docker 容器的 ENTRYPOINT 指令允许我们配置一个可执行的命令,容器启动时首先运行这个命令。通过编写一个合理的 Entrypoint 脚本,可以确保容器启动时执行必要的初始化操作,并使容器更具弹性和灵活性。下面是一个专业的 Docker Entrypoint 脚本范例,涵盖常见的初始化步骤。

示例:用于 Node.js 应用的 Entrypoint 脚本

假设我们有一个基于 Node.js 的应用,我们希望在容器启动时执行以下步骤:

  1. 安装依赖项。
  2. 运行数据库迁移。
  3. 启动应用。

Dockerfile

首先,我们定义一个 Dockerfile:

# 使用官方的 Node.js 镜像作为基础镜像
FROM node:14

# 创建工作目录
WORKDIR /usr/src/app

# 复制 package.json 和 package-lock.json
COPY package*.json ./

# 安装应用依赖
RUN npm install

# 复制应用源代码
COPY . .

# 拷贝 Entrypoint 脚本
COPY entrypoint.sh /usr/src/app/

# 确保脚本有执行权限
RUN chmod +x /usr/src/app/entrypoint.sh

# 设置 Entrypoint
ENTRYPOINT ["/usr/src/app/entrypoint.sh"]

# 暴露应用端口
EXPOSE 3000

# 指定默认启动命令
CMD ["npm", "start"]
​

Entrypoint 脚本

下面是 entrypoint.sh 脚本的内容:

#!/bin/bash
set -e

# 检查是否存在 NODE_ENV 环境变量,否则设置为默认值
if [ -z "$NODE_ENV" ]; then
  export NODE_ENV=production
fi

echo "NODE_ENV is set to $NODE_ENV"

# 安装依赖
echo "Installing dependencies..."
npm install

# 运行数据库迁移
if [ "$NODE_ENV" = "production" ]; then
  echo "Running database migrations..."
  npm run migrate
fi

# 检查是否传递了参数,如果是,则执行参数命令
if [ "${1:0:1}" = '-' ]; then
  set -- npm start "$@"
fi

# 执行 CMD 命令
exec "$@"
​

解释

  • 环境变量检查和设置:脚本首先检查是否存在 NODE_ENV 环境变量,如果不存在,则设置为 production
  • 安装依赖:每次容器启动时,脚本都会执行 npm install 以确保依赖项是最新的。
  • 数据库迁移:如果环境是 production,脚本会运行数据库迁移命令。
  • 命令执行:脚本检查是否传递了任何参数,如果有,则执行传递的参数作为命令;否则,执行默认的 npm start 命令启动应用。

运行和测试

构建 Docker 镜像:

docker build -t my-node-app .
​

运行容器:

docker run -d -p 3000:3000 my-node-app
​

您可以通过传递不同的参数来覆盖默认行为,例如运行数据库迁移:

docker run -d -p 3000:3000 my-node-app npm run migrate
​

总结

通过这个 Entrypoint 脚本,您可以确保在 Docker 容器启动时执行必要的初始化步骤,并且容器可以根据不同的运行时环境进行相应的配置和操作。这个范例展示了如何编写一个灵活且功能强大的 Entrypoint 脚本,使您的 Docker 容器更加可靠和易于管理。

目录
相关文章
|
7月前
|
Ubuntu Docker 容器
深入理解Dockerfile:构建镜像的详细解释与常用命令(下)
Docker 是一种流行的容器化平台,可将应用程序和其依赖项打包到一个独立的、可移植的容器中。Dockerfile 是构建 Docker 镜像的文本文件,它包含了一系列的指令和配置,用于定义镜像的构建过程。本文将深入解释 Dockerfile 的工作原理,并介绍常用的 Dockerfile 指令和构建命令,以帮助读者更好地理解和使用 Docker。
177 0
|
7月前
|
JavaScript Docker 容器
Docker中文件拷贝命令的详细解释与真实案例
Docker中文件拷贝命令的详细解释与真实案例
350 0
|
2月前
|
Shell 应用服务中间件 nginx
docker学习--最详细的docker run 各子命令解释与应用
`docker run` 是 Docker 中用于启动容器的基本命令。常用子命令包括 `-i`(交互模式)、`-t`(分配终端)、`-d`(后台运行)、`-p`(端口映射)、`--name`(指定容器名)。例如,`docker run -it nginx:1.20 /bin/bash` 可以创建并进入交互式容器。使用 `-d` 可在后台运行容器,`-p` 可将容器端口映射到主机端口,`--name` 则用于自定义容器名称以便管理。
206 0
|
7月前
|
应用服务中间件 nginx Docker
深入理解Dockerfile:构建镜像的详细解释与常用命令(上)
Docker 是一种流行的容器化平台,可将应用程序和其依赖项打包到一个独立的、可移植的容器中。Dockerfile 是构建 Docker 镜像的文本文件,它包含了一系列的指令和配置,用于定义镜像的构建过程。本文将深入解释 Dockerfile 的工作原理,并介绍常用的 Dockerfile 指令和构建命令,以帮助读者更好地理解和使用 Docker。
1819 0
|
7月前
|
应用服务中间件 nginx Docker
docker系列:dockerfile及其用法解析
docker系列:dockerfile及其用法解析
243 0
|
Ubuntu Shell Linux
常用的Docker命令和使用方法
当我们在Docker中部署一个应用程序时,需要使用一个称为"镜像"的模板来创建容器。镜像包含了运行应用程序所需的所有文件系统、代码和依赖项。在Docker中,镜像系统指的是操作系统镜像(redhat,ubuntu); 你可以通过docker pull命令来下载Docker镜像。例如,如果你想拉取Ubuntu的官方镜像,可以运行以下命令:
122 0
|
Java Docker 容器
Docker在执行ENTRYPOINT命令时,会创建一个新的临时工作目录
Docker在执行ENTRYPOINT命令时,会创建一个新的临时工作目录
57 2
|
7月前
|
Linux Docker 容器
Docker Dockerfile 语法与指令
Docker Dockerfile 语法与指令
67 0
|
7月前
|
Docker 容器
Docker 常用命令与指令参数
Docker 常用命令与指令参数
86 0
|
网络协议 关系型数据库 MySQL
【Docker 系列】docker 学习十,Compose 编写规则及wp 实战
【Docker 系列】docker 学习十,Compose 编写规则及wp 实战