目錄
- podman安裝
- podman制作本地鏡像
- podman(docker)命令回顧
- podman快速入門
一入編程深似海,從此節(jié)操是路人。
最近使用podman,就想著寫一篇總結(jié)性的筆記,以備后續(xù)參考。就如同寫代碼,不寫注釋,過了一段時間可能會想這是我寫的嗎?不會吧,還要理一下邏輯才能讀懂,不利于后期維護(hù)。
感覺整體體驗(yàn)下來,鏡像獲取、容器創(chuàng)建、容器監(jiān)控、容器移除,和docker差不多,感覺可以作為替代品。
什么是podman?
Podman is a utility provided as part of the libpod library. It can be used to create and maintain containers. The following tutorial will teach you how to set up Podman and perform some basic commands.
大意是 podman 使用libpod庫提供的一部分,打造應(yīng)用程序。你可以使用podman創(chuàng)建容器、維護(hù)容器。
每個人使用環(huán)境可能不一樣,在介紹podman安裝與使用時,我想先介紹自己的環(huán)境。
個人使用環(huán)境
操作系統(tǒng):Linux發(fā)行版Centos9-stream。
容器環(huán)境:podman 4.2.0。
測試運(yùn)行服務(wù):Maven 構(gòu)建 Java web 應(yīng)用程序打包成 jar。
Linux-Centos9-stream使用podman(docker)制作本地鏡像,Maven構(gòu)建 jar 運(yùn)行并測試。
- 項(xiàng)目構(gòu)建(spring官網(wǎng) & 阿里云 腳手架構(gòu)架,IDE開發(fā)工具構(gòu)建)。
- 項(xiàng)目打包(maven 打包,mvn install)。
- 項(xiàng)目發(fā)布(上傳至服務(wù)器Linux 發(fā)行版Centos9-stream)。
- 制作本地鏡像(podman(docker) 容器制作鏡像)。
本文核心:主要介紹podman(docker)打包本地 jar 文件,制作鏡像運(yùn)行測試。
準(zhǔn)備
- 本地環(huán)境:MySQL、JDK、Maven、jar包文件,用于測試。
- 服務(wù)器環(huán)境:podman(docker)環(huán)境,openJDK。
如果沒有jar包環(huán)境,可以去spring官網(wǎng)和阿里云springboot腳手架官網(wǎng)在線構(gòu)建demo。
spring initializr:https://start.spring.io/
阿里云云原生應(yīng)用腳手架:https://start.aliyun.com/
cd demo
mvn install
scp -r target\demo-1.0.jar root@192.168.245.132:/opt/dkr/
podman安裝
關(guān)于podman,支持Windows、MacOS與Linux發(fā)行版,可以前往github獲取更多版本安裝包(exe、zip、pkg、tar.gz、source),便于在網(wǎng)絡(luò)隔離情況下部署。如果網(wǎng)絡(luò)環(huán)境允許,可以使用操作系統(tǒng)支持的安裝工具進(jìn)行安裝,比如RHEL系列使用yum或者dnf管理工具,Debian與Ubuntu使用apt工具。
podman開源倉庫:GitHub - containers/podman: Podman: A tool for managing OCI containers and pods.
如果獲取資源緩慢,這是正?,F(xiàn)象,你可能需要加速一下,或者使用BT工具。
如果使用Linux發(fā)行版在線安裝,可以更換國內(nèi)鏡像源,比如阿里云、騰訊云、華為云。
1、安裝podman(docker)
yum install -y podman
在RHEL9中可以使用yum或者dnf命令安裝服務(wù)。
查看podman版本:podman -v
[root@Centos9-Stream demo]# podman -v
podman version 4.2.0
2、啟動podman
systemctl start podman
RHEL7以及以上推薦使用systemctl命令去管理服務(wù),使用service命令也是兼容的,用法有些區(qū)別。
設(shè)置開機(jī)自啟:systemctl enable podman
[root@Centos9-Stream ~]# systemctl enable podman
Created symlink /etc/systemd/system/default.target.wants/podman.service → /usr/lib/systemd/system/podman.service.
[root@Centos9-Stream ~]# systemctl status podman
○ podman.service - Podman API Service
Loaded: loaded (/usr/lib/systemd/system/podman.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Sun 2023-02-26 16:56:43 CST; 2min 33s ago
...
2月 26 16:56:38 Centos9-Stream podman[3173]: time="2023-02-26T16:56:38+08:00" level=info msg="/usr/bin/podman filtering at log level info"
...
2月 26 16:56:43 Centos9-Stream systemd[1]: podman.service: Deactivated successfully.
使用命令 systemctl enable podman 設(shè)置podman服務(wù)開機(jī)自啟,查看pdoman狀態(tài):systemctl status podman,發(fā)現(xiàn)由 disabled 轉(zhuǎn)變成了enabled。如果不想開機(jī)自啟,可以使用禁用命令:systemctl disable podman。
podman制作本地鏡像
Dockerfile文件作用:個人理解,相當(dāng)于路標(biāo),通過相關(guān)命令去指引我們?nèi)绾吻斑M(jìn),構(gòu)建鏡像。
1、打包本地jar:新建Dockerfile文件
將上傳的 jar 文件復(fù)制到與Dockerfile同一目錄,比如我演示目錄在 /opt/dkr:
cp springboot-crud-0.0.1-SNAPSHOT.jar /opt/dkr/
創(chuàng)建Dockerfile文件:
touch Dockerfile
編輯Dockerfile文件:
vim Dockerfile
填充如下內(nèi)容:
FROM openjdk:17
MAINTAINER Fisher "dywangk@gmail.com"
ADD springboot-crud-0.0.1-SNAPSHOT.jar crud-app.jar
FROM:從哪里獲取到 JDK 作為運(yùn)行 jar 包支撐環(huán)境,此處我獲取的是 openjdk17 與 springboot 指定 jdk 版本對應(yīng)上。
MAINTAINER:指定維護(hù)人??蛇x項(xiàng),可加可不加。
ADD:添加 jar 文件??梢允褂肅OPY替代。
RUN:顧名思義,運(yùn)行。運(yùn)行命令以及服務(wù),本次測試沒加上,在 podman build 時運(yùn)行。
2、打包本地jar作為鏡像
通過 podman build 命令構(gòu)建本地鏡像服務(wù)。
podman build -f Dockerfile -t springboot:crud-app.jar
查看images,注意對應(yīng)上IMAGE ID
[root@Centos9-Stream ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
none none 4f7431dafa0a 2 hours ago 519 MB
docker.io/library/openjdk 17 5e28ba2b4cdb 9 months ago 475 MB
通過podman images命令查看images發(fā)現(xiàn)REPOSITORY和TAG是none,接下來會繼續(xù)介紹指定TAG。
注意:podman images 是列出本地存儲鏡像列表,相當(dāng)于 podman image list;podman image 是用于管理鏡像。
例如刪除鏡像:
podman image rm 4f7431dafa0a
podman image rm -f 4f7431dafa0a
3、指定tag
使用 podman tag 命令去添加標(biāo)簽名,tag 后面追加 IMAGE ID 以及本地打包好的鏡像。
podman tag 4f7431dafa0a srpingboot:crud-app.jar
再次查看images,發(fā)現(xiàn)REPOSITORY和TAG有內(nèi)容了。
[root@Centos9-Stream ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/srpingboot crud-app.jar 4f7431dafa0a 2 hours ago 519 MB
docker.io/library/openjdk 17 5e28ba2b4cdb 9 months ago 475 MB
4、運(yùn)行jar服務(wù)
使用 podman run 命令啟動容器中的本地鏡像服務(wù)。-p 參數(shù),指定端口8082和傳輸協(xié)議TCP;--name 參數(shù),用于指定容器名稱;-it -d 參數(shù),用于將服務(wù)置于后臺;java -jar 參數(shù), 與平時本地環(huán)境直接啟動 java -jar服務(wù)是同樣地命令。
podman run -p 8082:8081/tcp --name crud -it -d localhost/srpingboot:crud-app java -jar crud-app.jar
你可以再啟動一個服務(wù),端口映射到8088,注意,--name 取名不能重復(fù),示例如下:
podman run -p 8088:8081/tcp --name crud7 -it -d localhost/srpingboot:crud-app java -jar crud-app.jar
查看運(yùn)行中的服務(wù),使用命令:podman ps
[root@Centos9-Stream dkr]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
920899cf9aad localhost/srpingboot:crud-app.jar java -jar crud-ap... 2 hours ago Up 2 hours ago 0.0.0.0:8082->8081/tcp crud
將8081端口映射到8082上,訪問時使用端口是8082。
列出容器端口映射:podman port crud
[root@Centos9-Stream dkr]# podman port crud
8081/tcp -> 0.0.0.0:8082
例如:訪問接口,如果你沒有在controller層編寫任何代碼,訪問顯示的是404。當(dāng)然這些并不重要,只需要印證podman(docker)打包本地jar包正常運(yùn)行就足夠了。
http://192.168.245.132:8082/thymeleaf/findCity
5、查看日志
查看日志命令 podman logs,后面追加IMAGE ID:920899cf9aad,IMAGE ID理解為唯一值便于檢索。
podman logs 920899cf9aad
反饋結(jié)果
2023-02-13T12:56:21.113Z INFO 1 --- [ main] com.example.Application : Started Application in 7.021 seconds (process running for 8.49)
...
2023-02-13T12:56:59.312Z INFO 1 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 3 ms
Hibernate: select c.Name, c.CountryCode from world.city c;
可以看到使用 JPA show-sql 打印出了自己指定的SQL語句:
select c.Name, c.CountryCode from world.city c;
6、停止容器
采用 podman stop 命令手動停止一個或多個容器:
podman stop crud
7、啟動容器
當(dāng)容器意外宕掉或者手動停止了,此時可以使用 podman start 啟動一個或多個容器:
podman start crud
8、監(jiān)控容器
查看(監(jiān)控)容器健康狀態(tài),主要分析CPU、內(nèi)存負(fù)載:podman stats,使用ctrl + c 退出。如下圖所示:
podman stats
當(dāng)然,可以配合重定向輸出到日志文件:podman stats > podman-stats.log,初次已覆蓋形式;再次使用重定向輸出命令:podman stats >> podman-stats.log,采用追加形式。查看日志文件內(nèi)容,可以使用tail、cat、vim命令。
當(dāng)然,你還可以使用 podman top 查看容器負(fù)載,示例查看最新容器狀態(tài):
podman top -l
善用podman自帶幫助文檔,有一定基礎(chǔ)后這是最有效的方式,需要有一定閱讀英文文檔積累。
列出podman全部文檔提示,示例:
podman help
man podman
只查看 podman ps 幫助文檔,示例:
podman help ps
podman ps --help
podman(docker)命令回顧
閑扯
開始使用,感覺命令太多,哎呀記不住,怎么辦?沒有捷徑可走,多敲幾遍,自然而然記住了。主要做札記,使用筆記本記錄,記錄過程也是思考的過程。分類整理,容器管理,容器內(nèi)鏡像管理。其次靠工作經(jīng)驗(yàn)以及平時積累總結(jié)出常用以及實(shí)用命令,熟悉后,使用podman自帶的幫助文檔提高工作效率。
只停留在看和札記上,顯得很抽象,需要配合搭建環(huán)境去感受。運(yùn)用越多,實(shí)際工作中越有底氣。
回顧一下,制作本地鏡像使用到了哪些命令。你會發(fā)現(xiàn),自己實(shí)踐一遍,需要掌握哪些命令,用到的還不少。僅僅通過構(gòu)建本地鏡像到運(yùn)行,涉及到知識面有限,我并沒有介紹到容器初始化(init)、連接(attach)、內(nèi)容自動更新(auto-update)、提交(commit)、比對(diff)等等命令。
回顧命令
查看容器列表,正在運(yùn)行中的容器:podman ps
podman ps
啟動一個或者更多容器:podman start,示例啟動crud7
podman start crud7
停止一個或者更多容器:podman stop,示例停止crud7
podman stop crud7
查看(監(jiān)控)容器健康狀態(tài),示例:
podman stats
從遠(yuǎn)程地址拉取鏡像:podman pull
查看 podman 版本命令:podman -v
從容器定義配置文件Dockerfile, 構(gòu)建自定義鏡像命令:podman build
給鏡像加上tag(標(biāo)簽名):podman tag
新的容器中運(yùn)行一條命令,比如我在文中運(yùn)行到 jar 服務(wù):podman run
管理鏡像:podman image
查看本地(已拉?。╃R像列表:podman images
移除一個或多個容器:podman rm ,根據(jù)容器ID移除。例如:
podman rm 03dd5a923f51
從本地存儲移除一個或多個鏡像:podman rmi
查看容器中運(yùn)行服務(wù)后的日志:podman logs
配合Linux中g(shù)rep、tail命令進(jìn)行檢索:
podman logs cd57c4af7fb8 | grep 8081
podman logs cd57c4af7fb8 | tail -f
此處,我已知使用到了端口8081,直接匹配比較精確,也可以模糊一點(diǎn),只輸入80。使用 tail -f 命令,查看最近的10條信息。
列出容器端口映射:podman port ,示例,查找名稱為crud的容器:
podman port crud
搜索遠(yuǎn)程地址鏡像:podman search ,例如搜索 openjdk17:
podman search openjdk17
使用 podman 幫助文檔:podman help
使用幫助命令時候,同樣可以配合 grep 命令匹配已知的命令:
podman help | grep images
podman help images
podman快速入門
podman提供了快速啟動,以 httpd 服務(wù)為示例:鏡像獲取、容器創(chuàng)建、容器監(jiān)控、容器移除。
快速入門,參考podman文檔:
Getting Started with Podman
此處演示使用 podman 獲取 httpd(web中間件Apache服務(wù))。
搜索命令:podman search ,示例如下:
[root@Centos9-Stream kart]# podman search httpd --filter=is-official
NAME DESCRIPTION
docker.io/library/httpd The Apache HTTP Server Project
獲取 httpd 服務(wù):
podman pull docker.io/library/httpd
列出所有鏡像列表:
podman images
運(yùn)行容器:
podman run -dt -p 8080:80/tcp docker.io/library/httpd
獲取的是最新版,此處,你可能需要修改才能運(yùn)行:
podman run -dt -p 8080:80/tcp docker.io/library/httpd:latest
查詢正在運(yùn)行的容器:
podman ps
測試容器,訪問 httpd?:
http://localhost:8080/
或者使用 curl命令:
curl http://localhost:8080
<html><body><h1>It works!</h1></body></html>
看到頁面顯示:It works!?,代表測試運(yùn)行httpd服務(wù)成功。
監(jiān)控容器,示例:
podman top amazing_matsumoto
查看日志,指定容器NAME,示例:
podman logs amazing_matsumoto
停止容器,根據(jù)容器(CONTAINER)ID或者NAME都行。注意,如果沒有指定NAME,會生成隨機(jī)字符串。
示例根據(jù)NAME停止容器:
podman stop amazing_matsumoto
查出所有容器(包含退出的、創(chuàng)建的),示例:
podman ps -a
移除容器,示例:
podman rm amazing_matsumoto
通過管道符配合 grep 命令搜索,發(fā)現(xiàn)確實(shí)移除掉了,示例:
podman ps -a | grep amazing_matsumoto
基本命令文檔:可以下載文檔,包含:PDF、HTML、Epub三種格式。
Commands — Podman documentation
- latest:最新版
- stable:穩(wěn)定版
- v4.3:歷史版本podman4.3
podman開源倉庫:GitHub - containers/podman: Podman: A tool for managing OCI containers and pods.
最后,希望對你的工作有所幫助,以上總結(jié)僅供參考!
靜下心來,才發(fā)現(xiàn)原來不會的還有很多。
一分耕耘,一分收獲。
多總結(jié),你會發(fā)現(xiàn),自己的知識寶庫越來越豐富。
——END——文章來源:http://www.zghlxwxcb.cn/news/detail-423280.html
養(yǎng)得胸中一種恬靜文章來源地址http://www.zghlxwxcb.cn/news/detail-423280.html
到了這里,關(guān)于Ceph入門到精通-podman 入門實(shí)戰(zhàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!