首页 > 解决方案 > 使用常见的中间/最终步骤维护多个 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 中?这将是一个令人头疼的维护问题,因为每次我更改一个步骤时,我都必须确保对所有文件都这样做。

标签: dockerdockerfile

解决方案


是的

您可以创建一个共享的 Dockerfile 并将源图像作为构建参数

ARG BASE_IMAGE
FROM ${BASE_IMAGE}
# common steps

然后你可以为你的每个构建调用它

docker build ... --build-args BASE_IMAGE=<img_name>

编辑:

这意味着您为每个图像调用 docker build 两次

使用不同的 dockerfile foo、bar、baz 一次,您应该将其标记为foo_intermediateetc

然后使用常见的 dockerfile 是基本图像foo_intermediate并按照您需要的方式标记它,例如foo


推荐阅读