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中國

    Linux中國

    關於Linux防火牆iptables的面試問答

    Nishita Agarwal是Tecmint的用戶,她將分享關於她剛剛經歷的一家公司(印度的一家私人公司Pune)的面試經驗。在面試中她被問及許多不同的問題,但她是iptables方面的專家,因此她想分享這些關於iptables的問題和相應的答案給那些以後可能會進行相關面試的人。 所有的問題和相應的答案都基於Nishita Agarwal的記憶並經過了重寫。 嗨,朋友!我叫Nishita Agarwal。我已經取得了理學學士學位,我的專業集中在UNIX和它的變種(BSD,Linux)。它們一直深深的吸引著我。我在存儲方面有1年多的經驗。我正在尋求職業上的變化,並將供職於印度的P
    Linux中國

    Lets Encrypt 已被所有主流瀏覽器所信任

    旨在讓每個網站都能使用 HTTPS 加密的非贏利組織 Lets Encrypt 已經得了 IdenTrust的交叉簽名,這意味著其證書現在已經可以被所有主流的瀏覽器所信任。從這個裡程碑事件開始,訪問者訪問使用了Lets Encrypt 證書的網站不再需要特別配置就可以得到 HTTPS 安全保護了。 Lets Encrypt 的兩個中級證書 ...
    Linux中國

    SSL/TLS 加密新紀元 – Lets Encrypt

    根據 Let's Encrypt 官方博客消息,Let's Encrypt 服務將在下周(11 月 16 日)正式對外開放。 Let's Encrypt 項目是由互聯網安全研究小組(ISRG,Internet Security Research Group)主導並開發的一個新型數字證書認證機構(CA,Certificate ...