我的情况是,我有一堆来自不同来源的图像,但我需要对它们应用相同的步骤。基本上它看起来是这样的:
# 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中?这将是一个令人头疼的维护问题,因为每次我更改一个步骤时,我都必须确保对所有文件都这样做。
发布于 2021-09-23 08:04:54
是
您可以创建一个共享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等
然后使用通用的dockerfile文件,基本镜像是foo_intermediate,并按照您需要的方式进行标记,例如foo
https://stackoverflow.com/questions/69295613
复制相似问题