随着容器和容器技术的兴起,现在所有主要的Linux发行版都提供了容器基础映像,本文介绍Fedora项目如何构建其基本映像,它还向你展示了如何使用它来创建分层图像。
基础和分层图像 在我们看看如何构建Fedora容器基础映像之前,让我们定义一个基本映像和一个分层映像,定义基本图像的简单方法是没有父图层的图像,但这具体意味着什么呢?这意味着基本映像通常只包含操作系统的根文件系统(rootfs),基本映像通常提供安装软件以创建分层映像所需的工具。 分层图像在基础映像的顶部添加了一组图层,以便安装、配置和运行应用程序,分层图像使用FROM指令在Dockerfile中引用基本图像: FROM fedora:latest
如何构建基本映像 Fedora有一整套可用于构建容器映像的工具,这包括podman,它不需要以root用户身份运行,参考使用Podman运行Docker容器的方法。
构建rootfs 基本图像主要包括tarball,这个tarball包含一个rootfs,有不同的方法来构建此rootfs, Fedora项目使用kickstart安装方法和imagefactory软件来创建这些tarball。 在创建Fedora基本映像期间使用的kickstart文件可以在Fedora的构建系统Koji中找到,Fedora-Container-Base软件包重新组合了所有基本映像构建,如果选择构建,则可以访问所有相关工件,包括kickstart文件,以下示例,文件末尾的%packages部分定义了要安装的所有软件包,这就是你在基本映像中使用软件的方法。
使用rootfs构建基本映像 一旦rootfs可用,构建基本映像很容易,它只需要一个具有以下指令的Dockerfile: FROM scratch ADD layer.tar / CMD ["/bin/bash"] 这里的重要部分是FROM scratch指令,它创建一个空图像,然后,以下说明将rootfs添加到映像,并设置在运行映像时要执行的默认命令。 让我们使用Koji内置的Fedora 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 scratch\nADD 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),但是可以使用image标签获得其他版本,例如FROM fedora:31将使用Fedora 31基本映像。 注:Fedora支持构建和发布软件作为容器,这意味着你可以维护Dockerfile以使其他人可以使用你的软件。
相关主题 |