我必须对两张docker
图像执行相同的脚本。
我的Dockerfile
是:
FROM centos:6
...
和
FROM centos:7
...
是否可以使用单个文件并传递参数,例如:
FROM centos:MYPARAMS
并且在构建期间会有这样的事情:
docker build --no-cache MYPARAMS=6 .
谢谢
答案 0 :(得分:14)
为了把它放在正确的背景下,现在(自2017年5月起)可以用17.05(https://github.com/moby/moby/pull/31352)
之后的纯泊坞机实现这一目标Dockerfile看起来应该是(是的,按此顺序命令):
[B]
然后使用
调用buildARG 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
}