podman 替代 docker ? centos Stream 10 已經棄用docker,開始用podman了!

👨?🎓博主簡介

??🏅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

image-20240708155326314

這樣就安裝成功了;

  • 啟動服務并配置開機自啟
# 設置開機自啟
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 buildpodmanfile構建鏡像

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容器文件導出為tarpodman 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 rootstatic dirvolume path配置,也可以直接刪除掉,讓podman直接使用/etc/containers/storage.conf中的配置。

注意,bolt_state.db文件非常重要,如果之前已經有很多容器,則里面存儲了很多非常重要的信息,如果丟失,則之前的容器就廢了,所以在操作前一定要備份。


修改數據庫這邊我沒有弄,參考的: 改變podman的存儲路徑 - witton,總之,如果數據多的話先備份,而且并不建議更換。


五、參考文章

文件名文件連接
改變podman的存儲路徑 - wittonhttps://blog.csdn.net/witton/article/details/128497746

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/43564.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/43564.shtml
英文地址,請注明出處:http://en.pswp.cn/web/43564.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

淺談React

forwardRef和useImperativeHandle的聯動使用 import React, { useImperativeHandle, useRef } from "react" import { forwardRef } from "react"const CustomInput forwardRef((props, ref) > {const inputRef useRef<HTMLInputElement>(null…

Java中鎖的分類、原理、使用場景、注意事項、優缺點等詳解

Java開發中&#xff0c;鎖是保證多線程安全的重要手段。Java提供了多種類型的鎖來滿足不同的同步需求。在這篇文章中&#xff0c;我將為您介紹以下幾種常見的鎖類型&#xff1a; 偏向鎖/輕量級鎖/重量級鎖 偏向鎖&#xff1a;當一個線程獲取一個對象的鎖時&#xff0c;如果發現…

解決MCM功率電源模塊EMC的關鍵

對MCM功率電源而言&#xff0c;由于其工作在幾百kHz的高頻開關狀態&#xff0c;故易成為干擾源。電磁兼容性EMC&#xff08;Electro Magnetic Compatibility&#xff09;&#xff0c;是指設備或系統在其電磁環境中符合要求運行并不對其環境中的任何設備產生無法忍受的電磁干擾的…

react父調用子的方法,子調用父的方法

父調用子的方法 // 子組件 import React, { useRef, useEffect } from react;const ChildComponent ({ childMethodRef }) > {const childMethod useRef(null);useEffect(() > {childMethodRef.current childMethod;}, []);const someMethod () > {console.log(子…

量化交易的實戰操作與心得

量化交易&#xff0c;作為一種基于數學模型和算法執行交易的方法&#xff0c;已經在全球金融市場中取得了廣泛的應用。對于從事量化交易的投資者而言&#xff0c;了解實戰操作的具體細節及相關心得是至關重要的&#xff0c;它可以幫助投資者優化策略&#xff0c;提高交易效率&a…

浪潮天啟防火墻TQ2000遠程配置方法SSL-xxx、L2xx 配置方法

前言 本次設置只針對配置VXX&#xff0c;其他防火墻配置不涉及。建議把防火墻內外網都調通后再進行Vxx配置。 其他配置可參考&#xff1a;浪潮天啟防火墻配置手冊 配置SSLVxx 在外網端口開啟SSLVxx信息 開啟SSLVxx功能 1、勾選 “啟用SSL-Vxx” 2、設置登錄端口號&#xff0…

springboot零食盒子-計算機畢業設計源碼50658

目 錄 1 緒論 1.1 研究背景 1.2研究意義 1.3論文結構與章節安排 2 微信小程序的零食盒子系統分析 2.1 可行性分析 2.2 系統流程分析 2.2.1 數據流程 3.3.2 業務流程 2.3 系統功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系統用例分析 2.5本章小結 3 微信…

力扣-排序算法

排序算法&#xff0c;一般都可以使用std&#xff1a;&#xff1a;sort&#xff08;&#xff09;來快速排序。 這里介紹一些相關的算法&#xff0c;鞏固記憶。 快速排序 跟二分查找有一丟丟像。 首先選擇一個基準元素&#xff0c;一般就直接選擇第一個。然后兩個指針&#xff0c…

編程玩具應用前景怎么樣:深入剖析四大方面、五大趨勢、六大挑戰與七大機遇

編程玩具應用前景怎么樣&#xff1a;深入剖析四大方面、五大趨勢、六大挑戰與七大機遇 在科技飛速發展的今天&#xff0c;編程玩具作為一種新興的教育工具&#xff0c;正逐漸走進人們的視野。那么&#xff0c;編程玩具的應用前景究竟如何呢&#xff1f;本文將從四個方面、五個…

測試類型介紹-安全性測試實戰技巧

安全性測試實戰技巧 在當今數字化時代&#xff0c;軟件安全不再是可選項&#xff0c;而是每一款產品的必備特性。隨著網絡攻擊的復雜性和頻率不斷上升&#xff0c;安全性測試成為了確保應用程序健壯性和用戶數據保護的關鍵環節。 1. 安全性測試的重要性? 安全性測試旨在識別…

Java如何使用 HttpClientUtils 發起 HTTP 請求

Java如何使用 HttpClientUtils 發起 HTTP 請求 一、前言1.HttpClientUtils 類概覽2.解析 HttpClientUtils 類3.使用 HttpClientUtils 類 一、前言 在現代的軟件開發中&#xff0c;經常需要與遠程服務器進行通信&#xff0c;例如獲取數據或發送數據。Apache HttpClient 是一個流…

安卓逆向經典案例——XX優品(uniapp)

uni-app逆向 uniapp的目錄結構 有一個io文件夾&#xff0c;下面有dcloud uniapp UniApp 可以用于開發 H5 應用&#xff0c;但它不僅僅局限于 H5 應用。UniApp 的特點包括&#xff1a; 1. 跨平臺&#xff1a;可以一套代碼同時生成適用于多個平臺&#xff08;如 iOS、Android、…

windows node降級到指定版本

要在Windows上將Node.js降級到指定版本&#xff0c;你可以使用nvm&#xff08;Node Version Manager&#xff09;來管理和切換不同的Node.js版本。以下是使用nvm降級Node.js的步驟&#xff1a; 如果尚未安裝nvm&#xff0c;請訪問https://github.com/coreybutler/nvm-windows …

Python學習筆記(二):函數

python英文官方文檔:https://docs.python.org/3.8/tutorial/index.html 比較不錯的python中文文檔:https://www.runoob.com/python3/python3-tutorial.html 1. 寫在前面 這幾周從實踐角度又學習了一遍python,溫故而知新,還是有蠻多心得的, 周末再看之前記的python筆記,…

Python技巧:使用enumerate函數增強你的for循環

在Python編程中&#xff0c;我們經常需要遍歷列表、元組或其他可迭代對象。然而&#xff0c;在某些情況下&#xff0c;我們可能還需要知道當前元素的索引。這時&#xff0c;enumerate函數就派上了用場。以下我們將深入探討enumerate函數的使用方法&#xff0c;并通過幾個示例來…

Java---數組

樂觀學習&#xff0c;樂觀生活&#xff0c;才能不斷前進啊&#xff01;&#xff01;&#xff01; 我的主頁&#xff1a;optimistic_chen 我的專欄&#xff1a;c語言 歡迎大家訪問~ 創作不易&#xff0c;大佬們點贊鼓勵下吧~ 前言 無論c語言還是java數組都是重中之重&#xff0…

LangChain 入門案例教程

LangChain 是一個基于 transformer 模型的語言鏈模型&#xff0c;它可以根據輸入文本生成相應的回答。下面是一個簡單的入門案例教程&#xff0c;旨在幫助您快速上手 LangChain。 1. 安裝 LangChain 首先&#xff0c;您需要安裝 LangChain。可以使用 pip 安裝&#xff1a; p…

【簡歷】湖南某一本大學:JAVA實習簡歷指導,面試通過率比較低

注&#xff1a;為保證用戶信息安全&#xff0c;姓名和學校等信息已經進行同層次變更&#xff0c;內容部分細節也進行了部分隱藏 簡歷說明 這個同學的學校是重點一本院校&#xff0c;這種學校背景我們建議大家嘗試投一下大廠&#xff0c;然后投遞主體在中廠。但是因為項目經歷…

曠野之間12 - 內容創作用的最佳大模型評測

?????? 我正在做一個項目,需要我找出最適合內容創作的 LLM。我查看了 lmsys 排行榜上的頂級模型,閱讀了其他人對這些模型的評價,查看了頂級 LLM 的模型卡,在沒有明確答案后,我決定對所有這些 LLM 進行測試,以完成不同的內容創作任務。 評估模型 我想要評估的模型…

在iPhone / iPad上輕松模擬GPS位置 AnyGo for Mac

在iPhone / iPad上輕松模擬GPS位置 AnyGo for Mac AnyGo for Mac是一款專為Mac電腦用戶設計的虛擬定位工具。它可以模擬你的GPS位置&#xff0c;讓你的設備顯示你在任何世界上的任何地方。無論你是想在游戲中虛擬移動&#xff0c;還是在社交媒體上分享虛擬的旅行照片&#xff0…