大家好呀,近期微信公眾號改版,為了防止錯過訊息,希望大家可以動動小手將此公眾號新增到“星標 ”,非常感謝~
Podman簡介
什麼是Podman?
Podman 是一個開源的容器執行時專案,可在大多數 Linux 平臺上使用。
Podman 提供與 Docker 非常相似的功能。正如前面提到的那樣,它不需要在你的系統上執行任何守護程序,並且它也可以在沒有 root 許可權的情況下執行。
Podman 可以管理和執行任何符合 OCI(Open Container Initiative)規範的容器和容器映象。Podman 提供了一個與 Docker 相容的命令列前端來管理 Docker 映象。
Podman 官網地址:https://podman.io/
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的埠
(版權歸原作者所有,侵刪)
- END -