Docker有条件的构build图像

我必须执行相同的脚本到两个docker图像。

我的Dockerfile是:

 FROM centos:6 ... 

 FROM centos:7 ... 

有可能有一个单一的文件,并传递一个参数,如下所示:

 FROM centos:MYPARAMS 

并在build立这样的事情:

 docker build --no-cache MYPARAMS=6 . 

谢谢

据我所知,Docker是不可能的。

替代解决scheme是使用Dockerfile“模板” ,然后使用您select的模板库对其进行parsing。 (甚至使用sed命令)

https://github.com/BITPlan/docker-stackoverflowanswers/tree/master/33351864你会发现一个bash脚本“构build”,以你想要的方式工作。

 wf@mars:~/source/docker/docker-stackoverflowanswers/33351864>./build -v 6 Sending build context to Docker daemon 3.584 kB Step 0 : FROM centos:6 6: Pulling from library/centos fa5be2806d4c: Pull complete ebdbe10e9b33: Downloading 4.854 MB/66.39 MB ... wf@mars:~/source/docker/docker-stackoverflowanswers/33351864>./build -v 7 Sending build context to Docker daemon 3.584 kB Step 0 : FROM centos:7 

关键部分是使用的“这里”文件:

 # # parameterized dockerfile # dockerfile() { local l_version="$1" cat << EOF > Dockerfile FROM centos:$l_version EOF } 

只要把它放在正确的背景下,现在(自2017年5月以来)可以从17.05( https://github.com/moby/moby/pull/31352

Dockerfile应该看起来像(是的,命令按照这个顺序):

 ARG APP_VERSION ARG GIT_VERSION FROM app:$APP_VERSION-$GIT_VERSION 

然后构build与调用

 docker build --build-arg APP_VERSION=1 --build-arg GIT_VERSION=c351dae2 . 

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

帮助我大大减less了构build图像的逻辑。