将 docker 个图像配置为可执行文件

Configure docker images as executable

我有一张 docker 图片 myapp:1.0
在我的 docker 文件中,我有一个 CMD 行来指定图像的主要功能(这是 运行 django 应用程序)。
我想知道的是,是否有一种方法可以在 docker run 调用期间传递参数并根据参数执行图像,以执行不同的命令。
例如:
CMD[ { "run1": "run_script_a.sh" }, { "run2": "run_script_b.sh" } ]
所以我可以 运行 我的 docker 像这样:
docker run myapp:1.0 run1 #将执行 run_script_a.sh
docker run myapp:1.0 run2 #将执行 run_script_b.sh

不要忘记添加到 docker 运行 的任何参数会自动覆盖图像中定义的 CMD

docker run myimage run_script_b.sh

这将 运行 run_script_b.sh 即使 CMD 定义 run_script_a.sh.
(前提是 ENTRYPOINT[ "/bin/sh", "-c" ]。)


也就是说,您可以尝试从同一个 Dockerfile 构建 2 个不同的图像,使用 --build-arg:

设置构建时变量
docker build --build-arg RUN=run_script_a.sh ... --name run1 .
docker build --build-arg RUN=run_script_b.sh ... --name run2 .

使用 Dockerfile 包括:

CMD[ $RUN ]

如果 CMD 在 Dockerfile 的末尾,那么这 2 个图像(而不是一个图像)的磁盘开销 space 将是最小的。

唯一的优点是当 运行ning 运行1 或 运行2 图像时,您无需传递任何内容:它们将启动各自的脚本。

您可以将环境变量添加到 docker 运行。然后,您可以使用通用 run_script.sh,它会根据该变量启动特殊脚本,例如:

docker run -e "script=a" myimage

https://docs.docker.com/engine/reference/run/#env-environment-variables