背景:
有个A代码库,根据不同分支代码结合CI/CD制作了dev/test/pre/prod环境的基础镜像,B代码库依赖A制作的镜像来制作自己的dev/test/pre/prod各分支镜像。如果不用变量就需要4个Dockerfile,能完成需求但不够优雅,所以需要B在build镜像时自动获取当前代码的分支,然后把变量传入Dockerfile,这样只需要一个Dockerfile就可以通过变量控制引用哪个A基础镜像。
# B Dockerfile例子
ARG BRANCH=master
FROM xxx.xxx.com/xxxxx/a_demo:${BRANCH}_latest
MAINTAINER xiagao <xiagao@gmail.com>
ADD nginx.conf /etc/nginx/conf.d/default.conf
ADD build /apps/main_module/apps/demo/
# 构建镜像命令
docker build --build-arg BRANCH=${branch_name} -t xxx.xxx.com/xxxx/b_demo:${branch_name}_latest .