Docker条件构建映像

时间:2015-10-26 17:25:18

标签: docker dockerfile

我必须对两张docker图像执行相同的脚本。

我的Dockerfile是:

FROM centos:6
...

FROM centos:7
...

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

FROM centos:MYPARAMS

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

docker build --no-cache MYPARAMS=6  .

谢谢

3 个答案:

答案 0 :(得分:14)

为了把它放在正确的背景下,现在(自2017年5月起)可以用17.05(https://github.com/moby/moby/pull/31352

之后的纯泊坞机实现这一目标

Dockerfile看起来应该是(是的,按此顺序命令):

[B]

然后使用

调用build
ARG APP_VERSION
ARG GIT_VERSION
FROM app:$APP_VERSION-$GIT_VERSION

Docker将尝试将构建基于图像docker build --build-arg APP_VERSION=1 --build-arg GIT_VERSION=c351dae2 .

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

答案 1 :(得分:4)

据我所知,Docker无法做到这一点。

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

答案 2 :(得分:2)

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

关键部分是" here"使用的文件:

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