将 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
我有一张 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