首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用公共中间/最终步骤维护多个docker映像

使用公共中间/最终步骤维护多个docker映像
EN

Stack Overflow用户
提问于 2021-09-23 07:24:29
回答 2查看 64关注 0票数 2

我的情况是,我有一堆来自不同来源的图像,但我需要对它们应用相同的步骤。基本上它看起来是这样的:

代码语言:javascript
复制
# dockerfile 1
FROM source1
RUN foo
代码语言:javascript
复制
# dockerfile 2
FROM source2
RUN bar
代码语言:javascript
复制
# dockerfile 3
FROM source3
RUN baz

给定这些镜像,我需要应用一些常见的步骤,例如复制证书、安装常用软件包、设置环境变量等。

代码语言:javascript
复制
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中?这将是一个令人头疼的维护问题,因为每次我更改一个步骤时,我都必须确保对所有文件都这样做。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-23 08:04:54

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

代码语言:javascript
复制
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

票数 3
EN

Stack Overflow用户

发布于 2021-09-23 08:13:12

在这种情况下,最佳实践是为基础镜像创建Dockerfile,您可以在其中放置所有常见步骤。

在特定的Dockerfiles文件中,您可以使用FROM base和put镜像特定指令来扩展基本镜像。

查看示例基础镜像Dockerfile here和扩展它的特定镜像Dockerfile here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69295613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档