Podman 由 RedHat 開發,是一種免費的開源無守護進程容器引擎,旨在替代流行的 Docker 運行時引擎。 就像 Docker 一樣,它可以使用容器鏡像和 OCI 容器(開放容器計劃)輕鬆構建、運行、部署和共享應用程序。 Podman 使用用戶和網絡命名空間,與 Docker 相比,Podman 被認為更加隔離和安全。 Docker 中的大多數命令都可以在 Podman 中使用。 因此,如果您熟悉運行 Docker 命令,那麼使用 podman 將變得輕而易舉。
在本指南中,我們將學習如何安裝 播客 在 Debian 11 靶心。
在 Debian 11 上安裝 Podman
podman 軟件包、庫和依賴項已經託管在官方 Debian 存儲庫中。 因此,您可以使用 APT 包管理器輕鬆安裝 podman。
首先,更新包列表:
$ sudo apt update
接下來,安裝podman容器引擎如下:
$ sudo apt install podman
當提示繼續時,鍵入“Y”並按 ENTER。
要驗證安裝的 Podman 版本,請運行:
$ podman --version
要收集有關 podman 容器引擎的更多詳細信息,請運行以下命令:
$ sudo podman info
您應該會看到一連串的輸出顯示複雜的細節,例如我們下面的內容。

配置 Podman 註冊表
註冊表文件 registry.conf
是一個配置文件,用於指定每當您想要推送或拉取映像時要使用的容器註冊表。 文件的完整路徑是 /etc/containers/registries.conf
. 有各種容器註冊表,包括 Docker hub、Quay.io、RedHat 等等。
您可以使用文本編輯器查看文件,如圖所示
# sudo /etc/containers/registries.conf
在 Docker 中,唯一的容器註冊表是 Docker Hub。 Podman 為用戶提供了從任何註冊表中搜索和提取圖像的更多自由。 您可以通過添加以下行來定義容器註冊表列表。
不合格的搜索註冊 = [ ‘registry.access.redhat.com’, ‘registry.redhat.io’, ‘docker.io’]
運行時 podman search
或者 podman pull
命令,podman 將聯繫這些註冊表,從該順序中的第一個開始。 Save 更改並退出文件。
搜索圖像
在拉取容器鏡像之前,謹慎的做法是在不同的註冊表中搜索它們的可用性。
為了 example
$ sudo podman search nginx

輸出為您提供了豐富的信息,包括註冊表名稱、映像名稱和簡要說明。
登錄註冊表
在開始拉取或推送映像之前,您需要登錄到註冊表。 在裡面 example 在下面,我正在登錄我的 Redhat 帳戶,這實際上使我可以訪問註冊表。
$ sudo podman login registry.access.redhat.com

要註銷註冊表,請運行以下命令:
$ sudo podman logout registry.access.redhat.com
拉取鏡像
要拉取圖像,請使用以下語法:
$ sudo podman pull image_name
為了 example, 要拉取 Nginx 的官方構建鏡像,請運行以下命令:
$ sudo podman pull docker.io/library/nginx

讓我們嘗試拉另一個圖像。 我們將按如下方式拉取官方 MongoDB 鏡像。
$ sudo podman pull docker.io/library/mongo

列出圖像
要列出所有圖像,請發出命令。
$ sudo podman images

從圖像創建容器
現在我們的鏡像駐留在 Debian 系統上,我們可以使用顯示的語法啟動一個容器。 -d 選項在後台運行容器, --name
選項指定容器的自定義名稱
$ sudo podman run -d --name container_name image
為了 example, 要在後台從 Nginx 映像啟動一個名為 webserv1 的容器,請運行以下命令:
$ sudo podman run -d --name webserv1 docker.io/library/nginx
您可以從同一個鏡像啟動多個容器。 讓我們從同一個 Nginx 鏡像啟動另一個名為 webserv2 的容器。
$ sudo podman run -d --name webserv2 docker.io/library/nginx

列出容器
在本節中,我們將了解可用於容器的各種命令。
要檢查當前正在運行的容器,請發出以下命令:
$ sudo podman ps
輸出顯示在提供諸如容器 ID、圖像名稱、運行容器的命令、創建日期和狀態等信息的列中。

要列出所有容器,包括已退出運行的容器:
$ sudo podman ps -a
停止容器
要停止容器,請使用語法
$ sudo podman stop CONTAINER_ID
或者
$ sudo podman stop container_name
在裡面 example,下面,我已停止使用其容器 ID 列出的第一個容器
$ sudo podman stop 9daeaabdfdfc
您可以使用以下命令驗證容器是否已停止 podman ps
命令。 我們可以清楚地看到,停止圖像後,我們只有 1 個圖像正在運行。

這 podman ps -a
命令將列出構成剛剛停止的容器的兩個容器。
$ sudo podman ps -a

啟動容器
要啟動容器,請使用以下語法:
$ sudo podman start CONTAINER_ID
或者
$ sudo podman start container_name
為了 example, 要啟動 webserv1,請運行:
$ sudo podman start webserv1

訪問容器的外殼
訪問容器的外殼最好用操作系統的容器來演示。
在這裡,我們將下載或拉取一個 Ubuntu 鏡像:
$ sudo podman pull docker.io/library/ubuntu
從鏡像中,我們將創建或啟動一個容器並使用 -it
選項。
$ sudo podman run --name ubuntu -it docker.io/library/ubuntu /bin/bash

- -i, –interactive 保持 STDIN 打開,即使沒有連接
- -t, –tty 分配一個偽 TTY。 默認為假
查看容器的日誌
要檢查容器的日誌,請使用以下語法:
$ sudo podman logs container_name
為了 example:
$ sudo podman logs webserv2

顯示容器統計信息
要顯示所有正在運行的容器的統計信息,請運行:
$ sudo podman stats

檢查容器
要打印出有關容器的複雜詳細信息,請使用檢查選項:
$ sudo podman inspect webserv2
這會以 JSON 格式打印出一個長輸出。

使用 –format 選項過濾輸出。 為了 example 打印出 webserv2 容器運行的 IP 地址
$ sudo podman inspect webserv2 --format '{{.NetworkSettings.IPAddress}}'
然後,您可以執行 IP 的附加信息,例如 example 使用 curl 檢索 HTTP 標頭。
$ curl -I ip-address

刪除容器
要完全移除或刪除容器,首先停止容器,以防它正在運行,最後將其移除。 在這 example,我們已經停止並移除了 websev1 容器。
$ sudo podman stop webserv1
然後移除停止的容器。
$ sudo podman rm webserv1

刪除圖像
要刪除映像,首先,請確保您已停止並刪除從該映像啟動的所有容器。 接下來,使用 rmi
選項如圖所示。
$ sudo podman rmi image_name
為了 example, 要刪除 ubuntu 映像,請運行以下命令:
$ sudo podman rmi docker.io/library/ubuntu

安裝最新的 Podman – 從源代碼編譯
您可以通過從源代碼安裝開發版本來測試最新版本的 Podman。
01. 構建和運行依賴
sudo apt-get install
btrfs-progs
git
golang-go
go-md2man
iptables
libassuan-dev
libbtrfs-dev
libc6-dev
libdevmapper-dev
libglib2.0-dev
libgpgme-dev
libgpg-error-dev
libprotobuf-dev
libprotobuf-c-dev
libseccomp-dev
libselinux1-dev
libsystemd-dev
pkg-config
runc
make
libapparmor-dev
gcc
cmake
uidmap
libostree-dev
02.安裝Conmon
conmon 是容器監視器,它是一個小型 C 程序,其工作是監視容器的主要進程。
git clone https://github.com/containers/conmon
cd conmon
make
sudo make podman
sudo cp /usr/local/libexec/podman/conmon /usr/local/bin/
03.安裝runc
安裝最新版本的 runc
git clone https://github.com/opencontainers/runc.git $GOPATH/src/github.com/opencontainers/runc
cd $GOPATH/src/github.com/opencontainers/runc
make BUILDTAGS="selinux seccomp"
sudo cp runc /usr/bin/runc
03. 安裝容器網絡接口(CNI)
CNI 插件用於將網絡接口插入容器網絡命名空間。
git clone https://github.com/containernetworking/plugins.git $GOPATH/src/github.com/containernetworking/plugins
cd $GOPATH/src/github.com/containernetworking/plugins
./build_linux.sh
sudo mkdir -p /usr/libexec/cni
sudo cp bin/* /usr/libexec/cni
設置網絡
sudo mkdir -p /etc/cni/net.d
curl -qsSL https://raw.githubusercontent.com/containers/libpod/master/cni/87-podman-bridge.conflist | sudo tee /etc/cni/net.d/99-loopback.conf
添加配置
sudo mkdir -p /etc/containers
sudo curl -L -o /etc/containers/registries.conf https://src.fedoraproject.org/rpms/containers-common/raw/main/f/registries.conf
sudo curl -L -o /etc/containers/policy.json https://src.fedoraproject.org/rpms/containers-common/raw/main/f/default-policy.json
04. 從源碼安裝 Podman
git clone https://github.com/containers/podman/ $GOPATH/src/github.com/containers/podman
cd $GOPATH/src/github.com/containers/podman
make
sudo make install
$ podman --version
podman version 4.0.0-dev
結論
我們希望我們為您成為使用 podman 創建和管理容器的專業人士的旅程奠定了堅實的基礎。 本指南將引導您在 Debian 11 Buster 上安裝 podman。