将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