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
命令)
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图像的逻辑。