Linux中國

如何構建 Fedora 容器鏡像

隨著容器容器技術的興起,現在所有主流的 Linux 發行版都提供了容器基礎鏡像。本文介紹了 Fedora 項目如何構建其基本鏡像,同時還展示了如何使用它來創建分層圖像。

基礎和分層鏡像

在看如何構建 Fedora 容器 基礎鏡像 base image 之前,讓我們定義基礎鏡像和 分層鏡像 layered image 。定義基礎鏡像的簡單方法是沒有父鏡像層的鏡像。但這具體意味著什麼呢?這意味著基礎鏡像通常只包含操作系統的根文件系統基礎鏡像(rootfs)。基礎鏡像通常提供安裝軟體以創建分層鏡像所需的工具。

分層鏡像在基礎鏡像上添加了一組層,以便安裝、配置和運行應用。分層鏡像在 Dockerfile 中使用 FROM 指令引用基礎鏡像:

FROM fedora:latest

如何構建基礎鏡像

Fedora 有一整套用於構建容器鏡像的工具。其中包括 podman,它不需要以 root 身份運行。

構建 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 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

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

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國