👨?🎓博主簡介
??🏅CSDN博客專家
??🏅云計算領域優質創作者
??🏅華為云開發者社區專家博主
??🏅阿里云開發者社區專家博主
💊交流社區:運維交流社區 歡迎大家的加入!
🐋 希望大家多多支持,我們一起進步!😄
🎉如果文章對你有幫助的話,歡迎 點贊 👍🏻 評論 💬 收藏 ?? 加關注+💗
文章目錄
- 一、什么是 podman?
- 二、部署 podman
- 三、podman 參數
- 1、podman 鏡像管理
- 2、podman容器管理
- 3、podman運行容器命令
- 四、附加:修改podman 存儲路徑
- 1、podman 中沒有數據修改存儲路徑
- 2、podman 中有數據遷移修改存儲路徑
- 五、參考文章
一、什么是 podman?
??Podman 是一個開源項目,可在大多數 Linux 平臺上使用,并位于GitHub 上。Podman 是一個無守護進程的容器引擎,用于在 Linux 系統上開發、管理和運行 Open Container Initiative (OCI) 容器和容器映像。Podman 提供了一個與 Docker 兼容的命令行前端,它可以簡單地為 Docker cli ,alias docker=podman。Podman 還提供了一個套接字激活的 REST API 服務,以允許遠程應用程序啟動按需容器。此 REST API 還支持 Docker API,允許 docker-py 和 docker-compose 的用戶與 Podman 作為服務進行交互。
??Podman 控制下的容器可以由 root 或非特權用戶運行。Podman 使用libpod庫管理整個容器生態系統,包括 pod、容器、容器映像和容器卷。Podman 專注于幫助您維護和修改 OCI 容器鏡像的所有命令和功能,例如拉取和標記。它允許您在生產環境中創建、運行和維護從這些映像創建的容器。
??Podman 服務僅在 Linux 平臺上運行,但 podman 遠程 REST API 客戶端存在于 Mac 和 Windows 平臺上,并且可以通過 ssh 與運行在 Linux 機器或 VM 上的 Podman 服務進行通信。Mac 客戶端。
二、部署 podman
正常 centos Stream 10里面是自帶的有podman服務的;目前只知道 centos Stream8-10 系統會自帶podman服務,其他系統沒安裝過,可自行查看
podman --version
。
離線安裝:podman 離線安裝包
Podman 在 CentOS 8 和 Stream 的 AppStream 存儲庫中可用,可直接進行yum安裝。
# 安裝podman
yum -y install podman# 查看podman版本號
podman --version
這樣就安裝成功了;
- 啟動服務并配置開機自啟
# 設置開機自啟
systemctl enable podman
# 啟動podman服務
systemctl start podman
# 重啟podman服務
systemctl restart podman
# 停止podman服務
systemctl stop podman
# 查看podman服務狀態()
systemctl status podman
三、podman 參數
podman常用參數和docker常用參數都是一樣的;這里舉例幾個就行,具體的可以查看docker的命令參數:linux(centos)中部署docker(步驟超全,含帶一些發展史和一些概念),查看后面的docker鏡像管理、docker容器管理、docker運行容器命令。
1、podman 鏡像管理
#列出所有的鏡像
[root@podman ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
REPOSITORY:表示鏡像的倉庫源
TAG:鏡像的標簽
IMAGE ID:鏡像ID
CREATED:鏡像創建時間
SIZE:鏡像大小
命令 | 作用 | 舉例 | 選項 |
---|---|---|---|
podman search | 搜索鏡像 | podman search busybox | -f 按條件過濾 |
podman pull | 拉取鏡像 | podman pull busybox:latest | |
podman push | 推送鏡像到倉庫 | podman push busybox:latest | |
podman tag | 為鏡像修改或制作標簽 | podman tag busybox:latest busybox:v1 | |
podman rmi | 刪除鏡像 | podman rmi busybox:v1 | |
podman save | 將鏡像保存為tar包 | podman save -o centos7.tar centos:7 | -o 指定生成tar包名稱 |
podman load | 將tar包保存的鏡像導入 | podman load -i centos.tar | -i 指定讀取的tar包名稱 |
podman import | 通過一個tar包創建鏡像 | podman import centos-7.tar.gz centos7:v1 | |
podman histroy | 查看鏡像創建的歷史 | podman history centos:7 |
podman中還提供了專門管理鏡像的子命令podman image,用法與podman命令類似。
podman image 命令 | 說明 |
---|---|
podman images | 列出所有鏡像 |
podman image ls | 列出所有鏡像 |
podman image pull | 拉取鏡像 |
podman image load | 導入鏡像 |
podman image rm | 刪除鏡像 |
podman image inspect | 查看鏡像的詳細信息 |
podman image histroy | 查看鏡像的創建記錄 |
podman image push | 拉取鏡像 |
podman image save | 導出鏡像 |
podman image tag | 設置標簽(修改版本) |
podman image prune | 刪除未使用的鏡像 |
podman image build | podmanfile構建鏡像 |
2、podman容器管理
podman container命令 | 說明 | 舉例 | 選項 |
---|---|---|---|
podman ps -a | 查看所有的容器 | ||
docekr ps | 查看所有的正在運行的容器 | ||
podman container ls | 查看運行的容器 | podman container ls | -a/-q |
podman container create | 創建容器但不運行 | podman container create nginx | |
podman container start | 啟動容器 | podman start nginx | |
podman container stop | 關閉容器 | podman stop nginx | |
podman container restart | 重啟容器 | podman restart nginx | |
podman container inspect | 查看容器的信息 | podman inspect nginx | |
podman container rm | 刪除容器 | podman rm -f nginx | -f強制刪除 |
podman container rename | 給容器重命名 | podman rename nginx nginx2 | |
podman container prune | 刪除沒有運行的容器 | ||
podman container pause | 暫停容器運行(掛起) | ||
podman container unpause | 繼續運行容器 | ||
podman container port | 列出端口映射 | podman port nginx2 | |
podman container logs | 獲取容器日志信息 | podman logs nginx2 | |
podman container kill | 殺死正在運行的容器 | podman kill nginx2 | |
podman container stats | 查看容器資源使用情況 | podman stats nginx2 | |
podman container top | 查看容器的進程 | podman top nginx2 | |
podman container diff | 對比容器文件變化 podman diff nginx nginx2 | ||
podman container cp | 容器與主機間文件復制 | podman cp a.txt nginx:/home/ | |
podman container exec | 創建容器 | podman exec -itd–name nginx nginx:v1創建容器并運行 | |
podman container export | 容器文件導出為tar | podman export nginx.tar nginx | |
podman container commit | 提交容器變化為新鏡像 | podman commit nginx | |
podman container update | 更新容器配置 | podman update --restart=always nginx | |
podman container wait | 阻塞容器 | ||
podman container run | 運行一個podman容器 | podman run -itd --name nginx nginx:v1 |
3、podman運行容器命令
podman container run命令是根據指定鏡像創建一個容器并啟動運行。如果本地沒有該鏡像,則從podman倉庫中拉去鏡像。所以
podman container run = podman image pull + podman container create + podman container start
命令格式:podman container run [選項] 鏡像名稱|鏡像ID [command]
常用選項:
參數 | 解析 |
---|---|
-d | 后臺運行容器,返回容器ID,運行守護進程式容器 |
-i | 以交互模式運行容器,通常與 -t 同時使用; |
-t | 為容器重新分配一個偽輸入終端,通常與 -i 同時使用; |
-P | 隨機映射端口,容器內部端口隨機映射為主機端口 |
-p | 指定端口映射, -p 主機端口:容器端口 |
- -expose | 指定暴露端口或端口范圍 |
- -name | 指定生成容器的名稱 |
-h | 指定容器的主機名稱 |
-v | 映射容器外與容器內的目錄 |
- -net | 指定podman網絡模式(bridge/host/none/container) |
- -restart | 指定是否開機自啟 |
- -privileged | 使用該參數,container內的root擁有真正的root權限。 |
- -dns | 指定DNS服務器地址,默認與主機一致 |
-e | 設置環境變量 |
- -env-file | 從指定文件讀取環境變量 |
1.運行交互式容器
[root@podman ~]# podman container run -it --name='centos-1' centos:7 /bin/bash
[root@3ad7e1a5e55f /]#
直接退出,運行exit,容器會結束運行
[root@podman ~]# podman container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3ad7e1a5e55f centos:7 "/bin/bash" 39 seconds ago Exited (0) 6 seconds ago centos-1
可以使用podman container start命令啟動容器
[root@podman ~]# podman container start centos-1
centos-1
[root@podman ~]# podman container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3ad7e1a5e55f centos:7 "/bin/bash" About a minute ago Up 2 seconds centos-1
運行容器,不結束容器退出
[root@podman ~]# podman container run -it --name='centos-2' centos:7 /bin/bash
[root@764b82cb892f /]#(ctrl+pq)2.啟動守護進程式容器
[root@podman ~]# podman container run -d nginx:latest
cef133be2d53c0d4921ceba34855e7dc250984191d10d3dfedf82195e9d85d3c
[root@podman ~]# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cef133be2d53 nginx:latest "/podman-entrypoint.…" 6 seconds ago Up 5 seconds 80/tcp relaxed_lichterman
764b82cb892f centos:7 "/bin/bash" 3 minutes ago Up 3 minutes centos-2
3ad7e1a5e55f centos:7 "/bin/bash" 5 minutes ago Up 4 minutes centos-1
四、附加:修改podman 存儲路徑
podman和docker一樣,默認都是存在與/var/lib/
下的,一般鏡像和容器都很大,可能會導致根磁盤空間占用過大,如果/
根目錄下空間滿了,我們就要考慮給容器和鏡像換位置;一般來說/
根目錄起初不會設置的很大,后續都會再加硬盤來擴容空間,所以這時候我們掛了一個磁盤,要把podman數據存儲到比如/data/podman
下,那么就如下操作就可以了;
1、podman 中沒有數據修改存儲路徑
- 打開 Podman 配置文件
沒有就創建一個
sudo vim /etc/containers/storage.conf
- 編輯存儲配置:
[storage]
driver = "overlay"
runroot = "/data/podman/containers/run"
graphroot = "/data/podman/containers/storage"
- 重新加載并啟動podman服務
sudo systemctl daemon-reload
sudo systemctl restart podman
- podman info 查看docker配置路徑
sudo podman info
這樣就修改成功了,如果不放心可以ls /data/podman/containers/storage/
看看;
- 查看 podman 服務運行狀態
systemctl status podman
運行狀態,那么就沒問題了,接下來可以試試拉取鏡像
或者導入鏡像
;
2、podman 中有數據遷移修改存儲路徑
注意:如果podman中已經存在了數據,那么就需要吧
/var/lib/containers
下的和podman相關的都挪到新的存儲目錄下然后在修改boltdb
數據庫里配置并重啟數據庫和podman服務方可生效;
切記:先移動或復制 --》 在修改配置文件 --》 在修改boltdb
數據庫 --》 在重啟服務。
podman在數據庫中可能會存儲有運行配置,默認是在/var/lib/containers/storage/libpod/bolt_state.db
中的,所以如果該數據庫中存儲了運行配置,則只修改了/etc/containers/storage.conf
中的配置是不起作用的,podman會優先使用數據庫中存儲的配置,這點很坑。我們在修改了/etc/containers/storage.conf
中的配置后,將在/var/lib/containers/復制到修改的路徑下,重啟之后,可以使用如下的命令來查看詳細信息:
# 創建一個storage.conf文件
sudo vim /etc/containers/storage.conf# 編輯配置文件
[storage]
driver = "overlay"
runroot = "/data/podman/containers/run"
graphroot = "/data/podman/containers/storage"# 重啟podman服務
sudo systemctl daemon-reload
sudo systemctl restart podman# 查看podman服務狀態
systemctl status podman
沒有啟動起來,報錯了;
# 查看podman報錯詳細信息
sudo podman info --log-level=debug
所以如果bolt數據庫存儲了相關配置,那么無論怎么修改/etc/containers/storage.conf
中的配置都會被重載而不起作用。
bolt_state.db
又是一種小眾的數據庫,格式為bolt,目前BoltDB不支持直接修改和查看數據庫內容,需要使用專門的bolt數據庫工具才能查看和修改。
https://github.com/etcd-io/bbolt 頁面羅列了不少bolt工具,筆者選用了boltdbweb這款Go寫的Web工具來查看和修改。
打開runtime-config
可以看到里面有graph-root
就是podman的存儲路徑;
這里可以修改graph root
、static dir
和volume path
配置,也可以直接刪除掉,讓podman直接使用/etc/containers/storage.conf
中的配置。
注意,bolt_state.db
文件非常重要,如果之前已經有很多容器,則里面存儲了很多非常重要的信息,如果丟失,則之前的容器就廢了,所以在操作前一定要備份。
修改數據庫這邊我沒有弄,參考的: 改變podman的存儲路徑 - witton,總之,如果數據多的話先備份,而且并不建議更換。
五、參考文章
文件名 | 文件連接 |
---|---|
改變podman的存儲路徑 - witton | https://blog.csdn.net/witton/article/details/128497746 |