随着容器和容器技术的兴起,现在所有主要的 Linux 发行版都提供了容器基础镜像。 本文介绍了如何 Fedora 项目构建它的基础镜像。 它还向您展示了如何使用它来创建分层图像。
基础和分层图像
在我们看如何 Fedora 容器基础镜像搭建好了,我们来定义一个基础镜像和一个分层镜像。 定义基本图像的一种简单方法是使用没有父图层的图像。 但这具体意味着什么? 这意味着基本映像通常仅包含操作系统的根文件系统 (rootfs)。 基础镜像通常提供安装软件以创建分层镜像所需的工具。
分层映像在基础映像之上添加一组层,以便安装、配置和运行应用程序。 分层镜像使用 FROM 指令引用 Dockerfile 中的基础镜像:
FROM fedora:latest
如何构建基础镜像
Fedora 有一整套可用于构建容器镜像的工具。 这包括不需要以 root 用户身份运行的 podman。
构建一个rootfs
基本图像主要包括 压缩包. 这个 tarball 包含一个 rootfs。 有不同的方法来构建这个 rootfs。 这 Fedora 项目使用 启动 安装方法加上 形象工厂 软件来创建这些压缩包。
在创建过程中使用的 kickstart 文件 Fedora 基本图像可在 Fedora的构建系统 小二. 这 Fedora-容器基础 package 重新组合所有基础镜像构建。 如果您选择一个构建,它可以让您访问所有相关的工件,包括 kickstart 文件。 看着一个 example,文件末尾的 %packages 部分定义了所有要安装的包。 这就是使软件在基础映像中可用的方式。
使用 rootfs 构建基础镜像
一旦 rootfs 可用,构建基础镜像就很容易了。 它只需要一个带有以下说明的 Dockerfile:
FROM scratch ADD layer.tar / CMD ["/bin/bash"]
这里重要的部分是 FROM scratch 指令,它创建一个空图像。 下面的说明然后将rootfs添加到镜像中,并设置镜像运行时执行的默认命令。
让我们使用 Fedora Koji 内置的 rootfs:
$ curl -o fedora-rootfs.tar.xz https://kojipkgs.fedoraproject.org/packages/Fedora-Container-Base/Rawhide/20190902.n.0/images/Fedora-Container-Base-Rawhide-20190902.n.0.x86_64.tar.xz $ tar -xJvf fedora-rootfs.tar.xz 51c14619f9dfd8bf109ab021b3113ac598aec88870219ff457ba07bc29f5e6a2/layer.tar $ mv 51c14619f9dfd8bf109ab021b3113ac598aec88870219ff457ba07bc29f5e6a2/layer.tar layer.tar $ printf "FROM scratchnADD layer.tar /nCMD ["/bin/bash"]" > Dockerfile $ podman build -t my-fedora . $ podman run -it --rm my-fedora cat /etc/os-release
需要从下载的存档中提取包含 rootfs 的 layer.tar 文件。 这只需要,因为 Fedora 生成可供容器运行时使用的图像。
所以使用 Fedora的生成图像,更容易获得基础图像。 让我们看看它是如何工作的:
$ curl -O https://kojipkgs.fedoraproject.org/packages/Fedora-Container-Base/Rawhide/20190902.n.0/images/Fedora-Container-Base-Rawhide-20190902.n.0.x86_64.tar.xz $ podman load --input Fedora-Container-Base-Rawhide-20190902.n.0.x86_64.tar.xz $ podman run -it --rm localhost/fedora-container-base-rawhide-20190902.n.0.x86_64:latest cat /etc/os-release
构建分层图像
构建分层图像,使用 Fedora 基础镜像,只需要在 FROM 行指令中指定 fedora:
FROM fedora:latest
最新标签引用最新活动 Fedora 释放 (Fedora 30 在撰写本文时)。 但是可以使用图像标签获取其他版本。 为了 exampleFROM fedora:31 将使用 Fedora 31个基本图像。
Fedora 支持将软件构建和发布为容器。 这意味着您可以维护一个 Dockerfile 以使您的软件可供其他人使用。 有关成为容器镜像维护者的更多信息 Fedora,查看 Fedora 容器指南.