如何构建 Fedora 容器镜像
随着容器和容器技术的兴起,现在所有主流的 Linux 发行版都提供了容器基础镜像。本文介绍了 Fedora 项目如何构建其基本镜像,同时还展示了如何使用它来创建分层图像。
基础和分层镜像
在看如何构建 Fedora 容器 基础镜像 之前,让我们定义基础镜像和 分层镜像 。定义基础镜像的简单方法是没有父镜像层的镜像。但这具体意味着什么呢?这意味着基础镜像通常只包含操作系统的根文件系统基础镜像(rootfs)。基础镜像通常提供安装软件以创建分层镜像所需的工具。
分层镜像在基础镜像上添加了一组层,以便安装、配置和运行应用。分层镜像在 Dockerfile 中使用 FROM
指令引用基础镜像:
1 |
|
如何构建基础镜像
Fedora 有一整套用于构建容器镜像的工具。其中包括 podman,它不需要以 root 身份运行。
构建 rootfs
基础镜像主要由一个 tarball 构成。这个 tarball 包含一个 rootfs。有不同的方法来构建此 rootfs。Fedora 项目使用 kickstart 安装方式以及 imagefactory 来创建这些 tarball。
在创建 Fedora 基础镜像期间使用的 kickstart 文件可以在 Fedora 的构建系统 Koji 中找到。Fedora-Container-Base 包重新组合了所有基础镜像的构建版本。如果选择了一个构建版本,那么可以访问所有相关文件,包括 kickstart 文件。查看 示例,文件末尾的 %packages
部分定义了要安装的所有软件包。这就是让软件放在基础镜像中的方法。
使用 rootfs 构建基础镜像
rootfs 完成后,构建基础镜像就很容易了。它只需要一个包含以下指令的 Dockerfile:
1 |
|
这里的重要部分是 FROM scratch
指令,它会创建一个空镜像。然后,接下来的指令将 rootfs 添加到镜像,并设置在运行镜像时要执行的默认命令。
让我们使用 Koji 内置的 Fedora rootfs 构建一个基础镜像:
1 |
|
需要从下载的存档中提取包含 rootfs 的 layer.tar
文件。这在 Fedora 生成的镜像已经可以被容器运行时使用才需要。
因此,使用 Fedora 生成的镜像,获得基础镜像会更容易。让我们看看它是如何工作的:
1 |
|
构建分层镜像
要构建使用 Fedora 基础镜像的分层镜像,只需在 FROM
行指令中指定 fedora
:
1 |
|
latest
标记引用了最新的 Fedora 版本(编写本文时是 Fedora 30)。但是可以使用镜像的标签来使用其他版本。例如,FROM fedora:31
将使用 Fedora 31 基础镜像。
Fedora 支持将软件作为容器来构建并发布。这意味着你可以维护 Dockerfile 来使其他人可以使用你的软件。关于在 Fedora 中成为容器镜像维护者的更多信息,请查看 Fedora 容器指南。
via: https://fedoramagazine.org/how-to-build-fedora-container-images/
作者:Clément Verna 选题:lujun9972 译者:geekpi 校对:wxy