一个有用的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 容器更加可靠和易于管理。

目录
相关文章
|
Docker 容器
利用脚本快速执行Dockerfile以及docker镜像的启停与删除
利用脚本快速执行Dockerfile以及docker镜像的启停与删除
150 0
|
存储 分布式计算 Hadoop
基于docker的Hadoop环境搭建与应用实践(脚本部署)
本文介绍了Hadoop环境的搭建与应用实践。对Hadoop的概念和原理进行了简要说明,包括HDFS分布式文件系统和MapReduce计算模型等,主要通过脚本的方式进行快捷部署,在部署完成后对HDFS和mapreduce进行了测试,确保其功能正常。
|
6月前
|
JSON Shell 数据格式
在Docker中,docker run cmd entrypoint 有什么区别?
在Docker中,docker run cmd entrypoint 有什么区别?
|
6月前
|
监控 Ubuntu Docker
如何在Docker容器启动时自动运行脚本
【8月更文挑战第13天】在Docker容器启动时自动运行脚本可通过以下方式实现:1) 使用`ENTRYPOINT`或`CMD`指令在Dockerfile中直接指定启动脚本,如`ENTRYPOINT ["/startup.sh"]`;2) 启动容器时通过`--entrypoint`参数指定脚本路径;3) 利用supervisor等进程管理工具自动启动与监控脚本,确保其稳定运行。确保脚本具有执行权限并正确设置依赖资源路径。
1806 1
|
9月前
|
Linux Docker 容器
蓝易云 - 【Linux】如何在linux系统重启或启动时执行命令或脚本(也支持docker容器内部)
以上就是在Linux系统和Docker容器中设置启动时运行命令或脚本的方法。希望对你有所帮助。
148 0
|
9月前
|
关系型数据库 MySQL Linux
服务器脚本推荐,yum更新阿里镜像源、安装Docker、使用Docker安装MySQL服务
服务器脚本推荐,yum更新阿里镜像源、安装Docker、使用Docker安装MySQL服务
956 1
|
9月前
|
JavaScript Shell Docker
|
9月前
|
Docker 容器
【docker专题_05】docker批量启动脚本
【docker专题_05】docker批量启动脚本
120 1
|
9月前
|
文件存储 Docker Python
记录一次 nas docker 运行出错 使用Python脚本检查错误并重启对应容器 npc 运行出错 导致无法连接
记录一次 nas docker 运行出错 使用Python脚本检查错误并重启对应容器 npc 运行出错 导致无法连接
92 1
|
9月前
|
监控 Java 数据库
Zabbix【部署 05】 Docker部署Zabbix Server Agent Agent2 Web interface及 Java-Gate-Way(详细启动脚本及踩坑记录)不定时更新
Zabbix【部署 05】 Docker部署Zabbix Server Agent Agent2 Web interface及 Java-Gate-Way(详细启动脚本及踩坑记录)不定时更新
683 0