如何在 Debian 11 上安裝 Podman

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 版本

要收集有關 podman 容器引擎的更多詳細信息,請運行以下命令:

$ sudo podman info

您應該會看到一連串的輸出顯示複雜的細節,例如我們下面的內容。

查看 podman 信息查看 podman 信息

配置 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

搜索 Nginx 容器鏡像搜索 Nginx 容器鏡像

輸出為您提供了豐富的信息,包括註冊表名稱、映像名稱和簡要說明。

登錄註冊表

在開始拉取或推送映像之前,您需要登錄到註冊表。 在裡面 example 在下面,我正在登錄我的 Redhat 帳戶,這實際上使我可以訪問註冊表。

$ sudo podman login registry.access.redhat.com

Podman 登錄到註冊表Podman 登錄到註冊表

要註銷註冊表,請運行以下命令:

$ sudo podman logout registry.access.redhat.com

拉取鏡像

要拉取圖像,請使用以下語法:

$ sudo podman pull image_name

為了 example, 要拉取 Nginx 的官方構建鏡像,請運行以下命令:

$ sudo podman pull docker.io/library/nginx

使用 podman 拉取 Nginx 鏡像使用 podman 拉取 Nginx 鏡像

讓我們嘗試拉另一個圖像。 我們將按如下方式拉取官方 MongoDB 鏡像。

$ sudo podman pull docker.io/library/mongo

使用 podman 拉取 Mongo 鏡像使用 podman 拉取 Mongo 鏡像

列出圖像

要列出所有圖像,請發出命令。

$ sudo podman images

使用 podman 列出容器鏡像使用 podman 列出容器鏡像

從圖像創建容器

現在我們的鏡像駐留在 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 停止圖像Podman 停止圖像

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

$ sudo podman ps -a

Podman 檢查所有容器,包括停止的容器Podman 檢查所有容器,包括停止的容器

啟動容器

要啟動容器,請使用以下語法:

$ sudo podman start CONTAINER_ID

或者

$ sudo podman start container_name

為了 example, 要啟動 webserv1,請運行:

$ sudo podman start webserv1

啟動容器 podman啟動容器 podman

訪問容器的外殼

訪問容器的外殼最好用操作系統的容器來演示。

在這裡,我們將下載或拉取一個 Ubuntu 鏡像:

$ sudo podman pull docker.io/library/ubuntu

從鏡像中,我們將創建或啟動一個容器並使用 -it 選項。

$ sudo podman run --name ubuntu -it docker.io/library/ubuntu /bin/bash

podman 獲得容器的交互外殼podman 獲得容器的交互外殼
  • -i, –interactive 保持 STDIN 打開,即使沒有連接
  • -t, –tty 分配一個偽 TTY。 默認為假

查看容器的日誌

要檢查容器的日誌,請使用以下語法:

$ sudo podman logs container_name

為了 example:

$ sudo podman logs webserv2

使用 podman 檢查容器日誌使用 podman 檢查容器日誌

顯示容器統計信息

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

$ sudo podman stats

查看容器鏡像的統計信息查看容器鏡像的統計信息

檢查容器

要打印出有關容器的複雜詳細信息,請使用檢查選項:

$ sudo podman inspect webserv2

這會以 JSON 格式打印出一個長輸出。

使用 podman 檢查圖像使用 podman 檢查圖像

使用 –format 選項過濾輸出。 為了 example 打印出 webserv2 容器運行的 IP 地址

$ sudo podman inspect webserv2 --format '{{.NetworkSettings.IPAddress}}'

然後,您可以執行 IP 的附加信息,例如 example 使用 curl 檢索 HTTP 標頭。

$ curl -I ip-address

podman inspect 命令的過濾輸出podman inspect 命令的過濾輸出

刪除容器

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

$ sudo podman stop webserv1

然後移除停止的容器。

$ sudo podman rm webserv1

使用 podman 刪除容器使用 podman 刪除容器

刪除圖像

要刪除映像,首先,請確保您已停止並刪除從該映像啟動的所有容器。 接下來,使用 rmi 選項如圖所示。

$ sudo podman rmi image_name

為了 example, 要刪除 ubuntu 映像,請運行以下命令:

$ sudo podman rmi docker.io/library/ubuntu

使用 podman 刪除圖像使用 podman 刪除圖像

安裝最新的 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。