Podman 作為新一代容器引擎,以其無守護行程的架構和更高的安全性而備受關注。不同於 Docker 仰賴 daemon 的模式,Podman 直接與底層容器執行階段互動,簡化了容器管理流程,也提升了系統效能。這使得 Podman 尤其適用於需要輕量級且安全容器化解決方案的場景。理解 Podman 的架構和安裝流程對於有效運用容器技術至關重要,本文將逐步引導讀者完成 Podman 的安裝和基本設定。
執行容器
在 Docker 環境中執行容器,需要使用 Docker 命令列客戶端與 Docker daemon 通訊,由 daemon 執行所需的操作以啟動和執行容器。下圖是 Docker 簡化的架構圖:
此圖示
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam rectangleBackgroundColor #F5F5F5
skinparam rectangleBorderColor #333333
skinparam arrowColor #333333
title 此圖示
rectangle "CLI Commands" as node1
rectangle "Pulls Image" as node2
rectangle "Stores Image" as node3
rectangle "Creates Container" as node4
node1 --> node2
node2 --> node3
node3 --> node4
@enduml與此不同,Podman 直接與映像檔登入檔、儲存以及 Linux 核心互動,透過容器執行階段處理程式(而非 daemon),並使用 Conmon 作為在 Podman 和 OCI 執行階段之間的監控程式。下圖是 Podman 簡化的架構圖:
此圖示
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam rectangleBackgroundColor #F5F5F5
skinparam rectangleBorderColor #333333
skinparam arrowColor #333333
title 此圖示
rectangle "Pulls Image" as node1
rectangle "Stores Image" as node2
rectangle "Creates Container" as node3
rectangle "Manages Container" as node4
rectangle "Interacts with" as node5
node1 --> node2
node2 --> node3
node3 --> node4
node4 --> node5
@enduml內容解密:
- 圖中展示了 Docker 和 Podman 在架構上的主要區別。
- Docker 需要透過 daemon 來管理容器,而 Podman 直接與 Linux 核心互動,無需 daemon。
- Podman 使用 Conmon 監控容器執行狀態,提高了容器的執行效率和穩定性。
這兩種架構的核心差異在於 Docker 以 daemon 為中心的設計與 Podman 的 fork/exec 方法。
在接下來的章節中,我們將詳細探討這個優秀容器引擎的功能和行為。瞭解引擎內部的工作原理對於故障排除、效能調優,甚至只是出於好奇,都是非常重要的。投入時間去理解每個元件之間的關係、閱讀程式碼以及測試建置,都將是一項明智的選擇,並將在未來帶來回報。
執行第一個容器
技術需求
具備良好的Linux作業系統管理經驗對於理解本章節的核心概念十分有益。本章節將介紹在不同Linux發行版上安裝新軟體的主要步驟,因此具備Linux系統管理員經驗有助於解決安裝過程中可能出現的問題。此外,前幾章節介紹的一些理論概念也有助於理解本章節中描述的程式。
選擇作業系統和安裝方法
Podman支援不同的發行版和作業系統。安裝過程非常簡單,各發行版現在都提供自己的維護套件,可以使用特定的套件管理器進行安裝。本文將介紹在最常見的GNU/Linux發行版以及macOS和Windows上的不同安裝步驟。儘管本文的重點是根據Linux的環境,但也會學習如何直接從原始碼構建Podman。
在Linux發行版和其他作業系統之間進行選擇
GNU/Linux作業系統的不同發行版之間的選擇取決於使用者的偏好和需求,這些偏好和需求通常受到本文範圍以外多種因素的影響。許多進階使用者今天選擇Linux發行版作為他們的主要作業系統。然而,仍有很大一部分人,尤其是開發人員,堅持使用macOS作為他們的標準作業系統。Microsoft Windows仍然在桌面工作站和筆記型電腦上保持最大的市占率。
如今,我們擁有龐大的Linux發行版生態系統,它們從一小部分核心、歷史悠久的發行版(如Debian、Fedora、Red Hat Enterprise Linux、Gentoo、Arch和openSUSE)演變而來。像DistroWatch(https://distrowatch.com)這樣的專業網站跟蹤了Linux和BSD-based發行版的許多版本。
安裝Podman
在Fedora上安裝Podman
Fedora套件由其廣泛的社群維護,並使用DNF套件管理器進行管理。要安裝Podman,請從終端機執行以下命令:
# dnf install -y podman
此命令安裝Podman並使用組態檔案組態環境(在下一節中介紹)。它還安裝了systemd單元,以提供額外的功能,如REST API服務或容器自動更新。
在CentOS上安裝Podman
Podman可以安裝在CentOS 7、CentOS 8和CentOS Stream(https://www.centos.org/)上。在CentOS 7上安裝的使用者必須啟用Extras儲存函式庫,而在CentOS 8和Stream上安裝的使用者必須從已啟用的AppStream儲存函式庫中獲得Podman套件。要安裝Podman,請從終端機執行以下命令:
# yum install -y podman
內容解密:
- 命令解析:
dnf install -y podman命令用於在Fedora系統上安裝Podman。-y引數表示自動確認安裝,無需手動干預。 - 環境組態:安裝過程中,Podman的環境組態檔案被設定,這些檔案對於後續使用Podman至關重要。
- Systemd單元安裝:安裝過程中還會安裝systemd單元,這些單元提供了諸如REST API服務或容器自動更新等額外功能。
# yum install -y podman
內容解密:
- 命令解析:
yum install -y podman命令用於在CentOS系統上安裝Podman。同樣,-y引數表示自動確認安裝。 - 儲存函式庫需求:在CentOS 7上,需要啟用Extras儲存函式庫;而在CentOS 8和Stream上,Podman套件可從已啟用的AppStream儲存函式庫中獲得。
- 跨版本相容性:Podman支援多個CentOS版本,展現了其良好的相容性和靈活性。
在不同作業系統上安裝 Podman
Podman 是一款強大的容器管理工具,支援多種 Linux 發行版以及 macOS 和 Windows。本章將介紹如何在不同的作業系統上安裝 Podman。
在 Fedora 上安裝 Podman
在 Fedora 系統上安裝 Podman 非常簡單,只需執行以下指令:
# dnf -y install podman
該指令將安裝 Podman 及其依賴套件,包括設定檔和 systemd 單元檔案。
在 RHEL 上安裝 Podman
在 Red Hat Enterprise Linux (RHEL) 上安裝 Podman 的步驟取決於 RHEL 的版本。
在 RHEL 7 上安裝 Podman
- 啟用額外通道:
# subscription-manager repos --enable=rhel-7-server-extras-rpms - 安裝 Podman 套件:
# yum -y install podman
在 RHEL 8 上安裝 Podman
- 啟用 container-tools 模組:
# yum module enable -y container-tools:rhel8 - 安裝 container-tools 模組:
# yum module install -y container-tools:rhel8
該模組除了安裝 Podman 外,還會安裝 Skopeo 和 Buildah 這兩個實用的工具。
在 Fedora CoreOS 和 Fedora Silverblue 上使用 Podman
Fedora CoreOS 和 Fedora Silverblue 已經預先安裝了 Podman,因此無需額外安裝。這些發行版設計用於執行容器化工作負載。
在 Debian 上安裝 Podman
Debian 11(代號 Bullseye)及以後版本支援 Podman。執行以下指令進行安裝:
# apt-get -y install podman
該指令將安裝 Podman 二進位檔案、設定檔、systemd 單元和手冊頁面。
在 Ubuntu 上安裝 Podman
Ubuntu 20.10 及以後版本可以使用以下指令安裝 Podman:
# apt-get -y update
# apt-get -y install podman
首先更新系統套件,然後安裝 Podman。
在 openSUSE 上安裝 Podman
openSUSE 使用 Zypper 套件管理器,可以使用以下指令安裝 Podman:
# zypper install podman
Zypper 將下載並安裝所有必要的套件和依賴項。
在 Gentoo 上安裝 Podman
Gentoo 使用 Portage 套件管理器,可以透過以下指令安裝 Podman:
# emerge app-emulation/podman
emerge 工具將下載並在系統上構建 Podman 原始碼。
在 Arch Linux 上安裝 Podman
Arch Linux 使用 pacman 套件管理器,執行以下指令即可安裝 Podman:
# pacman -S podman
預設情況下,Arch Linux 上的 Podman 不允許無根容器。需按照官方 Arch wiki 的指示啟用無根 Podman。
在 Raspberry Pi OS 上安裝 Podman
Raspberry Pi OS 根據 Debian,因此可以使用與 Debian 相同的步驟安裝 Podman。
在 macOS 上安裝 Podman
macOS 使用者可以使用 Homebrew 套件管理器安裝 Podman:
$ brew install podman
然後初始化並啟動虛擬機器:
$ podman machine init
$ podman machine start
或者,使用 Vagrant 建立輕量級虛擬機器並手動或自動組態 Podman。
在 Windows 上安裝 Podman
Windows 使用者可以下載並安裝 GitHub releases 頁面上的最新版本。然後,組態 containers.conf 檔案以指定遠端 Linux 主機的 URI。
或者,使用者可以在 WSL 2.0 上安裝 Linux 發行版,並在其中使用 Podman。
設定遠端存取的範例:
[engine]
remote_uri = "ssh://root@10.10.1.9:22/run/podman/podman.sock"
詳細步驟解說:
- 選擇合適的作業系統:根據您的需求和硬體平台選擇適當的作業系統。
- 依照安裝 Podman:根據所選的作業系統,按照上述進行 Podman 的安裝和組態。
- 驗證安裝:完成安裝後,透過執行
podman --version或其他相關命令驗證 Podman 是否正確安裝和運作。
安裝完成後的下一步:
- 探索 Podman 的基本用法和命令。
- 設定和管理容器。
- 利用 Skopeo 和 Buildah 等工具進一步最佳化您的容器工作流程。
在不同作業系統上安裝 Podman
本文將介紹如何在不同的作業系統上安裝 Podman,包括使用套件管理器安裝和從原始碼編譯安裝。
使用套件管理器安裝 Podman
不同的 Linux 發行版有不同的套件管理器,例如 Ubuntu 的 apt-get 和 Fedora 的 dnf。以下是在 Ubuntu 20.10 上安裝 Podman 的範例:
# apt-get –y install podman
# mkdir -p /etc/containers
# echo -e "[registries.search]\nregistries = ['docker.io', 'quay.io']" | tee /etc/containers/registries.conf
內容解密:
apt-get –y install podman:使用apt-get套件管理器安裝 Podman。mkdir -p /etc/containers:建立/etc/containers目錄,用於存放 Podman 的設定檔。echo -e "[registries.search]\nregistries = ['docker.io', 'quay.io']" | tee /etc/containers/registries.conf:設定/etc/containers/registries.conf檔案,定義了 Podman 搜尋映像的 registries。
在 WSL 2.0 環境中,需要進行一些額外的設定:
# cp /usr/share/containers/libpod.conf /etc/containers
# sed –i 's/cgroup_manager = "systemd"/cgroup_manager = "cgroupfs"/g' /etc/containers/libpod.conf
# sed –i 's/events_logger = "journald"/events_logger = "file"/g' /etc/containers/libpod.conf
內容解密:
cp /usr/share/containers/libpod.conf /etc/containers:複製libpod.conf設定檔到/etc/containers目錄。sed –i 's/cgroup_manager = "systemd"/cgroup_manager = "cgroupfs"/g' /etc/containers/libpod.conf:修改libpod.conf檔案,將cgroup_manager設定為cgroupfs,以適應 WSL 2.0 環境。sed –i 's/events_logger = "journald"/events_logger = "file"/g' /etc/containers/libpod.conf:修改libpod.conf檔案,將events_logger設定為file,以適應 WSL 2.0 環境。
從原始碼編譯安裝 Podman
從原始碼編譯安裝 Podman 可以讓使用者自定義程式碼、交叉編譯不同架構的二進位檔案,或只編譯部分二進位檔案。以下是在 Fedora 發行版上從原始碼編譯安裝 Podman 的步驟:
# dnf install -y btrfs-progs-devel conmon containernetworking-plugins containers-common crun device-mapper-devel git glib2-devel glibc-devel glibc-static go golang-github-cpuguy83-md2man gpgme-devel iptables libassuan-devel libgpg-error-devel libseccomp-devel libselinux-devel make pkgconfig
內容解密:
dnf install -y ...:使用dnf套件管理器安裝編譯 Podman 所需的依賴套件。
接下來,複製 Podman 的 GitHub 儲存函式庫並進入專案目錄:
$ git clone https://github.com/containers/podman.git
$ cd podman
內容解密:
git clone https://github.com/containers/podman.git:複製 Podman 的 GitHub 儲存函式庫到本地。$ cd podman:進入 Podman 專案目錄。
然後,使用 make 命令編譯和安裝 Podman:
$ make package-install
內容解密:
make package-install:編譯 Podman 的原始碼,建立 RPM 檔案,並在本機安裝這些套件。
設定 Podman 的執行環境
Podman 安裝完成後,可以根據需要進行一些自定義設定,以提高與外部 registries 的互操作性或自定義執行行為。
自定義容器 registries 搜尋列表
Podman 從受信任的容器 registries 搜尋和下載映像。/etc/containers/registries.conf 檔案是一個 TOML 設定檔,用於自定義受信任的 registries。
unqualified-search-registries = ["registry.fedoraproject.org", "registry.access.redhat.com", "docker.io", "quay.io"]
內容解密:
unqualified-search-registries:定義了 Podman 搜尋映像的 registries 列表。
使用者可以根據需要新增或刪除 registries。如果使用者有自己的私有 registries,可以將其新增到 unqualified-search-registries 列表中。
可選:啟用根據 socket 的服務
這是一個可選步驟,如果沒有特定的需求,可以安全地跳過本文的內容。
本文介紹瞭如何在不同的作業系統上安裝 Podman,包括使用套件管理器安裝和從原始碼編譯安裝,並對相關的程式碼進行了解說。同時,也介紹瞭如何設定 Podman 的執行環境,包括自定義容器 registries 搜尋列表和可選的根據 socket 的服務。透過這些設定,可以提高 Podman 的可用性和安全性。