開源容器 Podman 常用命令總結!

danny_2018發表於2022-04-24

Podman簡介

什麼是Podman?

Podman 是一個開源的容器執行時專案,可在大多數 Linux 平臺上使用。

Podman 提供與 Docker 非常相似的功能。正如前面提到的那樣,它不需要在你的系統上執行任何守護程式,並且它也可以在沒有 root 許可權的情況下執行。

Podman 可以管理和執行任何符合 OCI(Open Container Initiative)規範的容器和容器映象。Podman 提供了一個與 Docker 相容的命令列前端來管理 Docker 映象。

Podman 官網地址:

Podman和Docker的主要區別是什麼?

dockers在實現CRI的時候,它需要一個守護程式,其次需要以root執行,因此這也帶來了安全隱患。

podman不需要守護程式,也不需要root使用者執行,從邏輯架構上,比docker更加合理。

在docker的執行體系中,需要多個daemon才能呼叫到OCI的實現RunC。

在容器管理的鏈路中,Docker Engine的實現就是dockerd

daemon,它在linux中需要以root執行,dockerd呼叫containerd,containerd呼叫containerd-shim,然後才能呼叫runC。顧名思義shim起的作用也就是“墊片”,避免父程式退出影響容器的運訓

podman直接呼叫OCI,runtime(runC),透過common作為容器程式的管理工具,但不需要dockerd這種以root身份執行的守護程式。

在podman體系中,有個稱之為common的守護程式,其執行路徑通常是/usr/libexec/podman/conmon,它是各個容器程式的父程式,每個容器各有一個,common的父則通常是1號程式。podman中的common其實相當於docker體系中的containerd-shim。

圖中所體現的事情是,podman不需要守護程式,而dorker需要守護程式。在這個圖的示意中,dorcker的containerd-shim與podman的common被歸在Container一層。

Podman的使用與docker有什麼區別?

podman的定位也是與docker相容,因此在使用上面儘量靠近docker。在使用方面,可以分成兩個方面來說,一是系統構建者的角度,二是使用者的角度。

在系統構建者方面,用podman的預設軟體,與docker的區別不大,只是在程式模型、程式關係方面有所區別。如果習慣了docker幾個關聯程式的除錯方法,在podman中則需要適應。可以透過pstree命令檢視程式的樹狀結構。總體來看,podman比docker要簡單。由於podman比docker少了一層daemon,因此重啟的機制也就不同了。

在使用者方面,podman與docker的命令基本相容,都包括容器執行時(run/start/kill/ps/inspect),本地映象(images/rmi/build)、映象倉庫(login/pull/push)等幾個方面。因此podman的命令列工具與docker類似,比如構建映象、啟停容器等。甚至可以透過alias docker=podman可以進行替換。因此,即便使用了podman,仍然可以使用docker.io作為映象倉庫,這也是相容性最關鍵的部分。

Podman常用命令

容器

映象

部署Podman

使用Podman

使用 Podman 非常的簡單,Podman 的指令跟 Docker 大多數都是相同的。下面我們來看幾個常用的例子:

執行一個容器

列出執行的容器

注意:如果在ps命令中新增-a,Podman 將顯示所有容器。

檢查正在執行的容器

您可以“檢查”正在執行的容器的後設資料和有關其自身的詳細資訊。我們甚至可以使用 inspect 子命令檢視分配給容器的 IP 地址。由於容器以無根模式執行,因此未分配 IP 地址,並且該值將在檢查的輸出中列為“無”。

注意:-l 是最新容器的便利引數。您還可以使用容器的 ID 代替 -l。

檢視一個執行中容器的日誌

檢視一個執行容器中的程式資源使用情況

可以使用top觀察容器中的 nginx pid

語法:

停止一個執行中的容器

刪除一個容器

以上這些特性基本上都和 Docker 一樣,Podman 除了相容這些特性外,還支援了一些新的特性。

上傳映象

例如,如果我們想在 docker.io 上分享我們新建的 Nginx 容器映象,這很容易。首先登入碼頭:

總而言之,Podman 使查詢、執行、構建和共享容器變得容易。

配置別名

如果習慣了使用 Docker 命令,可以直接給 Podman 配置一個別名來實現無縫轉移。你只需要在 .bashrc 下加入以下行內容即可:

使用者操作

在允許沒有root特權的使用者執行Podman之前,管理員必須安裝或構建Podman並完成以下配置。

cgroup V2Linux核心功能允許使用者限制普通使用者容器可以使用的資源,如果使用cgroupV2啟用了執行Podman的Linux發行版,則可能需要更改預設的OCI執行時。某些較舊的版本runc不適用於cgroupV2,必須切換到備用OCI執行時crun。

安裝slirp4netns和fuse-overlayfs

在普通使用者環境中使用Podman時,建議使用fuse-overlayfs而不是VFS檔案系統,至少需要版本0.7.6。現在新版本預設就是了。

/etc/subuid和/etc/subgid配置

Podman要求執行它的使用者在/etc/subuid和/etc/subgid檔案中列出一系列UID,shadow-utils或newuid包提供這些檔案

可以在/etc/subuid和/etc/subgid檢視,每個使用者的值必須唯一且沒有任何重疊。

這個檔案的格式是 USERNAME:UID:RANGE

中/etc/passwd或輸出中列出的使用者名稱getpwent。

為使用者分配的初始 UID。

為使用者分配的 UID 範圍的大小。

該usermod程式可用於為使用者分配 UID 和 GID,而不是直接更新檔案。

使用者配置檔案

三個主要的配置檔案是container.conf、storage.conf和registries.conf。使用者可以根據需要修改這些檔案。

container.conf

如果它們以該順序存在。每個檔案都可以覆蓋特定欄位的前一個檔案。

配置storage.conf檔案

在普通使用者中/etc/containers/storage.conf的一些欄位將被忽略

在普通使用者中這些欄位預設

registries.conf

配置按此順序讀入,這些檔案不是預設建立的,可以從/usr/share/containers或複製檔案/etc/containers並進行修改。

授權檔案

此檔案裡面寫了docker賬號的密碼,以加密方式顯示

普通使用者是無法看見root使用者的映象的

容器與root使用者一起執行,則root容器中的使用者實際上就是主機上的使用者。

UID GID是在/etc/subuid和/etc/subgid等中使用者對映中指定的第一個UID GID。

如果普通使用者的身份從主機目錄掛載到容器中,並在該目錄中以根使用者身份建立檔案,則會看到它實際上是你的使用者在主機上擁有的。

使用卷

在主機上檢視

容器裡檢視

使用普通使用者對映容器埠時會報“ permission denied”的錯誤

普通使用者可以對映>= 1024的埠

配置echo ‘net.ipv4.ip_unprivileged_port_start=80’ >> /etc/sysctl.conf

後可以對映大於等於80的埠

來自 “ 碼農實戰 ”, 原文作者:碼農實戰;原文連結:https://view.inews.qq.com/a/20220424A02MUM00,如有侵權,請聯絡管理員刪除。

相關文章