一、概念
1、定義與定位
Podman(Pod Manager)是符合OCI標準的容器引擎,用于管理容器、鏡像及Pod(多容器組)。它無需守護進程(Daemonless),直接通過Linux內核功能(如命名空間、cgroups)運行容器,是更輕量安全的Docker替代方案。
鏡像:Image,是容器的“模板”,本質上是只讀的靜態文件包(包含運行應用所需的所有依賴,如代碼、環境、庫、配置等)和分層存儲結構(由多個只讀層疊加而成,每一層代表一次修改)。
容器:Container,本質是鏡像的動態表現形式(即基于鏡像創建的可讀寫進程環境)。
鏡像相當于“安裝程序”,容器是“安裝后運行的程序”。
類比:
鏡像?= 虛擬機
.iso
文件容器?= 從該ISO啟動的虛擬機實例
核心區別總結
維度 | 鏡像(Image) | 容器(Container) |
---|---|---|
狀態 | 靜態(只讀) | 動態(可讀寫) |
存儲 | 分層文件(存儲在/var/lib/containers ) | 運行時產生的可寫層 |
生命周期 | 長期存在,可版本管理 | 臨時運行,停止后可銷毀 |
創建方式 | podman build ?構建 | podman run ?從鏡像啟動 |
數量關系 | 1個鏡像 → 可啟動N個容器 | 1個容器 → 基于1個鏡像 |
解釋:
OCI標準:OCI是由Linux基金會主導的開放容器計劃,旨在制定容器鏡像與運行時的統一標準
無需守護進程:
Docker的守護進程(dockerd)問題:
以
root
權限運行,一旦被入侵則整個主機面臨風險。單點故障:守護進程崩潰會導致所有容器不可用。
- Podman的無守護進程架構:
直接通過
fork/exec
模式調用OCI運行時(如runc
),容器進程成為Podman的直接子進程。權限隔離:容器以當前用戶權限運行(非Root模式),通過Linux用戶命名空間映射容器內root為宿主普通用戶。
優勢:安全性提升、資源消耗更低、更符合Unix單一職責原則
2、關鍵特性
無守護進程設計:
????????直接調用runc管理容器,避免單點故障和權限濫用風險。
Podman | 直接通過?fork/exec ?調用 runc |
Docker | 通過 containerd 間接調用 runc |
啥是runc?
runc
?是容器技術的核心引擎,是真正在操作系統層面創建和運行容器的底層工具。
無根模式(Rootless):
? ? ? ? podman可以讓普通用戶直接運行容器,利用用戶命名空間隔離權限。即使容器內進程以root運行,在宿主機仍映射為普通用戶。
兼容Docker生態:
????????支持Docker鏡像(如docker.io/library/nginx)及相同CLI命令(run、build等)。
二、命令
1、安裝podman
dnf install podman -y
2、鏡像管理
(1)搜索鏡像
搜索nginx的鏡像
podman search nginx # 搜索公共倉庫中的鏡像
(2)查看正在運行的鏡像
podman ps
(3)查看本地鏡像
podman images
(4)刪除鏡像?
podman rmi nginx:alpine # 刪除指定鏡像
(5)登錄倉庫
podman login utility.lab.example.com(你要登錄的倉庫)
(6)運行鏡像
podman run -dit --name web -p 8080:80 nginx:alpine
命令分解:
podman run
創建并啟動新容器
-d
守護進程模式(detached mode):容器在后臺運行
--name web
為容器指定名稱?
web
(便于后續管理)
-it
:交互式終端(常與?/bin/bash
?聯用)
-p 8080:80
:宿主機端口綁定容器端口nginx:alpine:指定的倉庫和標簽
(7)有容器時的操作
1)容器狀態操作
podman start web # 啟動已停止的容器
podman stop web # 停止運行中的容器
podman restart web # 重啟容器
podman kill web # 強制終止容器
?2)查看容器信息
podman ps # 查看運行中的容器
podman ps -a # 查看所有容器(含停止狀態)
podman inspect web # 查看容器詳細配置(IP、掛載點等)
3)刪除容器
podman rm web # 刪除停止的容器
podman rm -f web # 強制刪除運行中的容器