docker - 使用常见的中间/最终步骤维护多个 docker 映像
问题描述
我的情况是我有一堆来自不同来源的图像,但我需要对它们应用相同的步骤。基本上它看起来像这样:
# dockerfile 1
FROM source1
RUN foo
# dockerfile 2
FROM source2
RUN bar
# dockerfile 3
FROM source3
RUN baz
鉴于这些图像,我需要应用一些常见的步骤,例如复制证书、安装常用包、设置环境变量等。
ENV http_proxy http://proxy-server-address
ENV https_proxy http://proxy-server-address
ADD certs/* /usr/local/share/ca-certificates/
RUN apt install something -y
RUN pip install something-else
# etc
有没有一种好方法可以对所有图像执行此操作,而无需将所有步骤复制到每个 dockerfile 中?这将是一个令人头疼的维护问题,因为每次我更改一个步骤时,我都必须确保对所有文件都这样做。
解决方案
是的
您可以创建一个共享的 Dockerfile 并将源图像作为构建参数
ARG BASE_IMAGE
FROM ${BASE_IMAGE}
# common steps
然后你可以为你的每个构建调用它
docker build ... --build-args BASE_IMAGE=<img_name>
编辑:
这意味着您为每个图像调用 docker build 两次
使用不同的 dockerfile foo、bar、baz 一次,您应该将其标记为foo_intermediate
etc
然后使用常见的 dockerfile 是基本图像foo_intermediate
并按照您需要的方式标记它,例如foo
推荐阅读
- azure - 在 Azure Monitor 工作簿中针对资源管理器创建查询时出现错误消息
- javascript - 更改 onChangeText 后无法在输入字段中输入
- powershell - 运行 Azure Functions 应用时出现间歇性错误消息
- node.js - OrderBy 和 StartAt 具有两个不同的字段 firestore
- javascript - 条纹社会安全号码nodejs
- javascript - 如何定位文件 discord.js v12?
- c# - 如何在 C# 的 Xpath 中使用转义字符,使用其中包含单引号和双引号的文本来查找元素?
- javascript - 即使请求成功,为什么我的 no-cors fetch() 也不行?
- c++ - 创建日历,输出格式问题
- azerothcore - 如何使 fork master 分支与 azerothcore master 分支保持同步