Podman的概述与运用
目錄
1.Podman的簡(jiǎn)介
2.安裝前準(zhǔn)備
3.安裝podman
4.鏡像的概述與命令管理
5.容器的管理命令
6.對(duì)外發(fā)布容器示例
7. 容器共享卷
8.管理系統(tǒng)服務(wù)
1.Podman的簡(jiǎn)介
linux中的容器是裝應(yīng)用的
容器就是將軟件打包成標(biāo)準(zhǔn)化單元,用于開發(fā)、交付和部署
容器技術(shù)已經(jīng)成為應(yīng)用程序封裝和交付的核心技術(shù)
優(yōu)點(diǎn)
– 相比于傳統(tǒng)的虛擬化技術(shù),容器更加簡(jiǎn)潔高效
– 傳統(tǒng)虛擬機(jī)需要給每個(gè)VM安裝操作系統(tǒng)
容器使用的共享公共庫(kù)和程序
Podman 是一個(gè)開源的容器運(yùn)行時(shí)項(xiàng)目,可在大多數(shù) Linux 平臺(tái)上使用。Podman 提供與 Docker 非常相似的功能。正如前面提到的那樣,它不需要在你的系統(tǒng)上運(yùn)行任何守護(hù)進(jìn)程,并且它也可以在沒有 root 權(quán)限的情況下運(yùn)行。
Podman 可以管理和運(yùn)行任何符合 OCI(Open Container Initiative)規(guī)范的容器和容器鏡像。Podman 提供了一個(gè)與 Docker 兼容的命令行前端來(lái)管理 Docker 鏡像
Podman有何特點(diǎn):
-
1.沒有 Daemon (守護(hù)進(jìn)程) 直接通過(guò) OCI runtime(默認(rèn)也是runc)來(lái)啟動(dòng)容器,所以容器的進(jìn)程是 podman 的子進(jìn)程;
-
2.采用類似于Linux中"fork/exec模型"相比較于”C/S模型”有一定的優(yōu)勢(shì)。
-
3.能夠以非 root 用戶的身份去運(yùn)行容器
-
4.引入注冊(cè)表的概念其內(nèi)部包括docker.io在內(nèi)的多個(gè)容器鏡像源,默認(rèn)的有
Podman VS Docker
-
(1) 模型對(duì)比
-
Podman: fork/exec 模型
-
Docker: C/S 模型
-
-
(2) 啟動(dòng)模式:
-
前者直接OCI containner runtime(runc)進(jìn)行交互來(lái)創(chuàng)建container的
-
后者通過(guò)API跟 Docker Engine(引擎)請(qǐng)求才會(huì)調(diào)用OCI container runtime(runc)來(lái)啟動(dòng)一個(gè)container
-
-
(3) 守護(hù)進(jìn)程
-
前者容器不支持–restart策略但是可以通過(guò)編寫systemd服務(wù)來(lái)完成自啟動(dòng)
-
后者因有docker daemon,所以docker啟動(dòng)的容器支持–restart策略
-
-
(4) 權(quán)限對(duì)比
-
前者可以非root用戶創(chuàng)建容器
-
后者必須使用root用戶來(lái)創(chuàng)建容器
-
注:Podman 在 CentOS 7 的默認(rèn) Extras 存儲(chǔ)庫(kù)中可用,在 CentOS 8 和 Stream 的 AppStream 存儲(chǔ)庫(kù)中可用。
虛擬化與容器的區(qū)別
? 鏡像是啟動(dòng)容器的核心,鏡像由鏡像倉(cāng)庫(kù)提供
? 在podman中容器是基于鏡像啟動(dòng)的
? podman和容器的關(guān)系
– podman是完整的一套容器管理系統(tǒng)
– podman提供了一組命令,讓用戶更加方便直接地
使用容器技術(shù),而不需要過(guò)多關(guān)心底層內(nèi)核技術(shù)
podman所需軟件
– 系統(tǒng)軟件,位于 rhel-8.2-x86_64-dvd 源中
– 利用系統(tǒng)光盤,構(gòu)建Yum倉(cāng)庫(kù)
2.安裝前準(zhǔn)備
# 禁用selinux ~]# vim /etc/selinux/config .... SELINUX=disabled ..... # 關(guān)閉翻火墻 ~]# systemctl stop firewalld && systemctl disable firewalld ? ## 搭建yum # 網(wǎng)絡(luò)tencent,yum ~]# /etc/yum.repos.d [AppStream] name=centos8 baseurl=https://mirrors.cloud.tencent.com/centos/8/AppStream/x86_64/os/ enabled=1 gpgcheck=0 [BaseoS] name=centos8 baseurl=https://mirrors.cloud.tencent.com/centos/8/BaseOS/x86_64/os/ enabled=1 gpgcheck=0 ? # 搭建本地yum # 掛載光盤并創(chuàng)建掛載點(diǎn),掛載 ~]# mkdir /dvd && mount /dev/cdrom /dvd # 搭建本地yum ~]# vim /etc/yum.repos.d/dvd.repo [AppStream] name=AppStream baseurl=file:///dvd/AppStream enabled=1 gpgcheck=0 [BaseOS] name=BaseOS baseurl=file:///dvd/BaseOS enabled=1 gpgcheck=0 ? # 檢查 ~]# yum repolist -v .... Loading mirror speeds from cached hostfile Setting up Package Sacks pkgsack time: 0.010 Repo-id ? ? : AppStream Repo-name ? : AppStream Repo-revision: 8.5.2111 Repo-distro-tags: [cpe:/o:centos:centos:8]: CentOS 8 Repo-updated : Fri Dec 31 14:06:52 2021 Repo-pkgs ? : 6,533 Repo-size ? : 11 G Repo-baseurl : https://mirrors.cloud.tencent.com/centos/8/AppStream/x86_64/os/ Repo-expire : 21,600 second(s) (last: Sun Jan ?9 13:17:57 2022)Filter ? ? : read-only:present Repo-filename: /etc/yum.repos.d/dvd.repo ? Repo-id ? ? : BaseoS Repo-name ? : BaseoS Repo-revision: 8.5.2111 Repo-distro-tags: [cpe:/o:centos:centos:8]: CentOS 8 Repo-updated : Fri Dec 31 14:06:31 2021 Repo-pkgs ? : 1,898 Repo-size ? : 2.0 G Repo-baseurl : https://mirrors.cloud.tencent.com/centos/8/BaseOS/x86_64/os/ Repo-expire : 21,600 second(s) (last: Sun Jan ?9 13:17:57 2022)Filter ? ? : read-only:present Repo-filename: /etc/yum.repos.d/dvd.repo ......3.安裝podman
注:centos7安裝之前要安裝docker,而8系列則可以直接按裝# 8系列有專門的模塊 # 查看module并安裝 ~]# yum module list ~]# yum -y module install container-tools4.鏡像的概述與命令管理
1)鏡像的名稱標(biāo)識(shí)
– 每一個(gè)鏡像都對(duì)應(yīng)唯一的鏡像 id
– 鏡像名稱(文件名稱) + 標(biāo)簽(路徑) = 唯一
– 每一個(gè)鏡像都有標(biāo)簽,如果沒寫就是默認(rèn)標(biāo)簽 latest
– 我們?cè)谡{(diào)用鏡像的時(shí)候,如果沒有指定標(biāo)簽也是 latest
| podman search 關(guān)鍵字 | 查找鏡像(需要能訪問(wèn)互聯(lián)網(wǎng)) | podman search httpd |
| podman pull 鏡像名稱:標(biāo)簽 | 下載鏡像(需要能訪問(wèn)互聯(lián)網(wǎng)) | podman pull localhost/myos:latest |
| podman load -i 備份文件.tar.gz | 導(dǎo)入鏡像 | podman load -i /root/httpd.tar.gz |
| podman images | 查看鏡像 | 查看出鏡像id |
| podman rmi 鏡像名稱:鏡像標(biāo)簽 | 刪除鏡像 | podman rmi 2f5 #按照鏡像的ID值,刪除鏡像 podman rmi localhost/myos:nginx #刪除鏡像 |
示例
# 鏡像管理 ~]# podman load ? -i ? /root/httpd.tar.gz ? ? ? #導(dǎo)入鏡像 ~]# podman images ? ? #查看當(dāng)前有哪些鏡像 ? # 鏡像刪除(鏡像id可以簡(jiǎn)寫但要唯一性)) ~]# podman images ? ? ? ? ? #查看當(dāng)前有哪些鏡像 ~]# podman ? rmi ? 2f5 ? ? ? #按照鏡像的ID值,刪除鏡像5.容器的管理命令
| podman run -選項(xiàng) 鏡像名稱:鏡像標(biāo)簽 啟動(dòng)命令 | 創(chuàng)建容器 | |
| podman ps [ -a 所有容器id ] [ -q 只顯示容器 id ] | 查看容器 | |
| podman rm 容器id | 刪除容器 | podman rm -f nsdweb #強(qiáng)制刪除容器,或者先停止容器在刪除 |
| podman start/stop/restart 容器id | 容器管理命令啟動(dòng)、停止、重啟 | |
| podman exec -it 容器id 啟動(dòng)命令 | 進(jìn)入容器 |
run 的選項(xiàng)
– podman help run
– man podman-run
? run = 創(chuàng)建 + 啟動(dòng) + 進(jìn)入
podman run 命令的選項(xiàng)
– 選項(xiàng) -i,交互式
– 選項(xiàng) -t,終端
– 選項(xiàng) -d,后臺(tái)運(yùn)行
– 選項(xiàng) -p,端口(本地端口:容器端口)
– 選項(xiàng) -v,映射文件(本地:/容器文件位置)
– 選項(xiàng) --name 容器名字
? 啟動(dòng)容器,并進(jìn)入容器
podman run -it myos:latest /bin/bash
? 可以通過(guò)命令行提示符,判定自己是否進(jìn)入容器了
容器管理命令示例(字段意思我所寫的docker容器有寫)
# 創(chuàng)建容器 ~]# podman run -it localhost/myos:httpd /bin/bash # 如果創(chuàng)建不了容器則需要?jiǎng)?chuàng)建/etc/resolv.conf文件 ~]# touch /etc/resolv.conf ? # 查看當(dāng)前系統(tǒng)容器 ~]# podman ps -a ? # 利用容器id開啟容器(容器id可以簡(jiǎn)寫但要唯一性) ~]# podman start 2b ? #進(jìn)入容器 ~]# podman exec -it 2b /bin/bash ? # 利用容器id停止容器(容器id可以簡(jiǎn)寫但要唯一性) ~]# podman stop 2b ? # 利用容器id刪除容器(容器id可以簡(jiǎn)寫但要唯一性)~]# podman rm 2b ? # 創(chuàng)建放入后臺(tái) ~]# podman run --name abc01 -itd localhost/myos:httpd /bin/bash6.對(duì)外發(fā)布容器示例
? 容器可以與宿主機(jī)的端口進(jìn)行綁定
? 從而把宿主機(jī)變成對(duì)應(yīng)的服務(wù),不用關(guān)心容器的IP地址
? 我們使用 -p 參數(shù)把容器端口和宿主機(jī)端口綁定
? 同一宿主機(jī)端口只能綁定一個(gè)容器服務(wù)
? -p [可選IP]:宿主機(jī)端口:容器端口
# 把宿主機(jī)變成 apache并放入后臺(tái) ~]# podman run -itd -p 80:80 myos:httpd # 把宿主機(jī)變成 nginx并放入后臺(tái) ~]# podman run -itd -p 80:80 myos:nginx ? # 容器放入后臺(tái),綁定端口并設(shè)置名字 ~]# podman run --name nsdweb -p 80:80 ? ? -itd localhost/myos:httpd ? /bin/bash7. 容器共享卷
? podman容器不適合保存任何數(shù)據(jù)
? podman可以映射宿主機(jī)文件或目錄到容器中
– 目標(biāo)對(duì)象不存在就自動(dòng)創(chuàng)建
– 目標(biāo)對(duì)象存在就直接覆蓋掉
– 多個(gè)容器可以映射同一個(gè)目標(biāo)對(duì)象來(lái)達(dá)到數(shù)據(jù)共享的目的
? 啟動(dòng)容器時(shí),使用 -v 映射參數(shù)
# 格式 ~]# podman run -itd -v 宿主機(jī)對(duì)象:容器內(nèi)對(duì)象 ? 鏡像名稱:標(biāo)簽 # 示例 # 創(chuàng)建一個(gè)容器放入后臺(tái),并映射端口與映射文件 ~]# podman run --name rqweb -p 80:80 -v /opt:/var/www/html -itd localhost/myos:httpd /bin/bash8.管理系統(tǒng)服務(wù)
systemd一個(gè)更高效的系統(tǒng)&服務(wù)管理器
– 開機(jī)服務(wù)并行啟動(dòng),各系統(tǒng)服務(wù)間的精確依賴
– 服務(wù)目錄:/usr/lib/systemd/system/
– 主要管理工具:systemctl
? 管理員服務(wù)文件默認(rèn)路徑
– /usr/lib/systemd/system/
? 生成服務(wù)啟動(dòng)配置文件
--files:生成文件類型
podman generate systemd --name 容器名 --files
? 重新加載服務(wù)啟動(dòng)配置文件
systemctl daemon-reload
示例:
必須是相對(duì)路徑,當(dāng)前路徑必須是/usr/lib/systemd/system
~]# cd /usr/lib/systemd/system ~]# podman ps -a # 注:容器必須是啟動(dòng)狀態(tài),且有名字(-name) ? # 自動(dòng)生成container-rqweb.service ~]# podman generate systemd --name rqweb --files ~]# ls container-rqweb.service(其他名字就是 container-(名字).service) container-rqweb.service ? # 重新加載服務(wù)配置文件 ~]# systemctl daemon-reload ? # 測(cè)試 ~]# systemctl stop container-rqweb ~]# systemctl start container-rqweb #設(shè)置開機(jī)自啟 ~]# systemctl enable container-rqweb ?注:當(dāng)前是centos8.2版本系統(tǒng)不完善有可能不成功
總結(jié)
以上是生活随笔為你收集整理的Podman的概述与运用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 容器技术概述
- 下一篇: 制作空镜像与一个run的共享文件错误解决