Docker条件构建映像

Mid*_*dle 7 docker dockerfile

我必须对两个docker图像执行相同的脚本.

Dockerfile是:

FROM centos:6
...
Run Code Online (Sandbox Code Playgroud)

FROM centos:7
...
Run Code Online (Sandbox Code Playgroud)

是否可以使用单个文件并传递参数,例如:

FROM centos:MYPARAMS
Run Code Online (Sandbox Code Playgroud)

并在构建期间这样的事情:

docker build --no-cache MYPARAMS=6  .
Run Code Online (Sandbox Code Playgroud)

谢谢

小智 18

只是为了把它放在正确的背景下,现在(自2017年5月起)可以用自17.05以来的纯码头实现这一目标(https://github.com/moby/moby/pull/31352)

Dockerfile应该是这样的(是的,按此顺序的命令):

ARG APP_VERSION
ARG GIT_VERSION
FROM app:$APP_VERSION-$GIT_VERSION
Run Code Online (Sandbox Code Playgroud)

然后调用build

docker build --build-arg APP_VERSION=1 --build-arg GIT_VERSION=c351dae2 .
Run Code Online (Sandbox Code Playgroud)

Docker将尝试将构建基于图像 app:1-c351dae2

帮助我极大地减少了构建图像的逻辑.

  • 只需在文档(https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact)中描述警告:如果您需要在之后使用您的参数FROM,你需要在FROM之后重新声明它 (3认同)

Max*_*ime 4

据我所知,Docker 不可能做到这一点。

另一种解决方案是使用Dockerfile“模板”,然后使用您选择的模板库对其进行解析。(或者甚至使用sed命令)