【问题标题】:Docker - Extending a container with another image?Docker - 用另一个图像扩展容器?
【发布时间】:2021-11-14 11:00:54
【问题描述】:

在我的公司,我们有安全团队创建的加固容器,我想用另一个 docker 镜像扩展加固的容器。例如,如果我们有一个加固的 Debian 容器,我想添加 Apache,我该怎么做?

我知道我可以使用FROM 来使用基础,但我所看到的示例中,不会向现有基础添加另一个级别的已发布图像,而是特定命令。我是否只是转到官方 Dockerhub Apache (HTTP) 映像,然后从 github 存储库复制并粘贴命令?我假设有一种更清洁的方法(但不确定是否有)。

例如,我是否

FROM mycompanyprivaterepo/Debian:latest
//some command?
FROM httpd
docker build -t mynewimagewithapache

更新: 在每个 cmets 尝试通过 apt-get apache2 后,它一直挂在交互式问题上,在 cmets 的帮助下使用: 我的 Dockerfile:

FROM myprivaterepo/hardened-ubuntu
RUN apt-get update && \
    DEBIAN_FRONTEND=noninteractive apt-get -qq install apache2

并通过以下方式构建:

$ docker build -t hardened-ubuntu-apache

【问题讨论】:

  • 一般来说,你会在你的dockerfile中使用RUN,然后运行apt-get包管理器来安装apache。你试过吗?
  • @NickODell。我没有,我认为这种类型的活动有一个特定的 docker 命令。我假设一些简单的事情: RUN apt-get -y install httpd?后面有什么吗?还是直接移到构建之后?
  • I assumed there was a specific docker command for this type of activity. 我不这么认为。组合多个图像的唯一方法是使用多阶段构建。但是如果你有一些更简单的选择,比如使用包管理器,使用多阶段构建通常是一个坏主意。你试过this example之类的吗?
  • @NickODell 我试过了,但安装挂起一个交互式问题(“选择地理区域”),我以为 -y 会处理它,但显然不是。
  • 那是 debconf。将 debconf 设置为非交互式或设置您的时区。 askubuntu.com/questions/909277/…

标签: docker containers extending


【解决方案1】:

嗯,据我了解,你不能使用multi-stage builds,而只是

COPY --from=base-image /path/to/file/you-are-interested-in /path/inside/new-stage-image

为了将所需的数据复制到您的首选图像。如果是这种情况,那么您必须创建您自己的 Dockerfile,并将基础映像作为您的公司 mycompanyprivaterepo/Debian:latest,然后在其上创建一些层为了安装所需的软件,请使用 RUN。

【讨论】:

  • COPYing 单个文件实际上不适用于大多数软件包。如果/usr/bin 中有二进制文件,/usr/libexec 中有支持代码,/usr/share 中有通用模块,/etc 中有配置,则需要手动复制很多部分。
  • 我不是说自己复制软件包,当然不行。我的意思是一些配置 yaml 或 toml 文件和 e.t.c
猜你喜欢
  • 1970-01-01
  • 2014-05-07
  • 1970-01-01
  • 2020-07-02
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多