将docker映像configuration为可执行文件

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

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

 docker run myimage run_script_b.sh 

即使CMD定义了run_script_a.sh也会运行run_script_a.sh
(假设ENTRYPOINT[ "/bin/sh", "-c" ] 。)


话虽如此,你可以尝试从同一个Dockerfile构build2个不同的图像,用--build-arg设置构build时间variables:

 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映像时不必传递任何东西:它们将启动它们各自的脚本。

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

 docker run -e "script=a" myimage 

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