将docker镜像配置为可执行文件

时间:2015-12-09 14:24:26

标签: docker dockerfile

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

2 个答案:

答案 0 :(得分:3)

不要忘记添加到docker run的任何参数都会自动覆盖图像中定义的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的末尾,则对于这两个图像(而不是一个图像),磁盘空间的开销将是最小的。

唯一的好处是你在运行run1或run2映像时不必传递任何东西:它们将启动它们各自的脚本。

答案 1 :(得分:1)

您可以将环境变量添加到docker run。您可以使用通用的run_script.sh,它将基于该变量启动特殊脚本,例如:

docker run -e "script=a" myimage

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