提到容器技術大家一般都會想到Docker,Docker確實是一種非常流行的容器技術。最近升級了CentOS 8
,發現它內建了另一種容器技術Podman,為什麼官方會加持Podman?其實Podman也是RedHat開發的,自家的作業系統自然要支援自家的容器技術了。今天我們來體驗一把Podman,看看它有何神奇之處!
SpringBoot實戰電商專案mall(50k+star)地址:https://github.com/macrozheng/mall
Podman簡介
Podman是一個開源專案,在Github上已有12k+Star
,可在大多數Linux平臺上使用。Podman是一個無守護程式的容器引擎,用於在Linux系統上開發、管理和執行OCI(Open Container Initiative)容器和容器映象。Podman提供了一個與Docker相容的命令列工具,可以簡單地為docker
命令取別名為podman
即可使用,所以說如果你會Docker的話可以輕鬆上手Podman。
安裝啟動
CentOS 8
已經內建Podman,CentOS 7
下需要自行安裝。
CentOS 7
可以使用yum命令安裝Podman;
yum -y install podman
- 安裝成功後使用如下命令啟動podman服務。
systemctl start podman
使用
接下來我們將在Podman中執行Nginx、MySQL和SpringBoot應用,大家可以體會下它和Docker的不同之處。
- 使用如下命令下載Nginx映象:
podman pull nginx:1.10
- 使用Podman下載映象時,我們可以選擇不同的映象源,選擇從
docker.io
下載就是從DockerHub中下載了;
- 由於Podman容器預設情況下沒有許可權訪問宿主機的檔案系統,當要進行目錄掛載時,需要使用
--privileged
開啟許可權,可使用如下命令執行nginx容器,基本和docker一致;
podman run -p 80:80 --name nginx \
--privileged \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-d nginx:1.10
- 執行成功後,把我們的
mall學習教程
前端專案放入/mydata/nginx/html
即可正常訪問了;
- 執行MySQL容器也基本和使用Docker一樣,使用如下命令即可執行;
podman run -p 3306:3306 --name mysql \
--privileged \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
- 通過如下命令可以進入到mysql容器,並檢視資料庫資訊;
# 進入mysql容器
podman exec -it mysql /bin/bash
# 登入mysql
mysql -proot -uroot
# 檢視所有資料庫
show databases;
- 感覺Podman使用起來基本和Docker沒啥兩樣,就像是換了皮的Docker;
- 下面我們在Podman中執行一個SpringBoot應用試試,先下載Docker映象,該映象已經上傳到DockerHub中:
docker pull macrodocker/mall-tiny-boot:latest
- 執行SpringBoot應用,如果你想使用
--link
選項來連線mysql容器的話,很遺憾Podman並不支援,那就只能使用IP來訪問mysql服務了;
podman run -p 8088:8088 --name mall-tiny-boot \
--privileged \
-e spring.datasource.url='jdbc:mysql://192.168.3.106:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai' \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/mall-tiny/logs:/var/logs \
-d macrodocker/mall-tiny-boot:latest
- 執行成功後可訪問SpringBoot應用的Swagger頁面,訪問地址:http://192.168.3.106:8088/swa...
- 使用
podman ps
命令可以檢視所有執行中的容器;
- 使用
podman images
命令可以檢視所有下載的映象;
- 如果你沒有安裝Docker而輸入docker命令的話,會提示你安裝
podman-docker
外掛,該外掛會直接把docker命令轉成podman,這是想徹底取代docker?
視覺化管理
CentOS 8
內建的視覺化管理工具Cockpit已經內建了Podman支援,直接使用它即可,具體可以參考Cockpit使用教程。
- 開啟
podman容器
管理,即可檢視所有執行中的容器和已經下載的映象;
- 還可以實時檢視容器日誌,重啟、停止或刪除容器;
- 還可以直接進入容器執行命令,比如檢視mysql容器中的資料庫;
- 也可以直接進行映象下載;
- 還可以通過映象來執行容器,用起來還是挺方便的。
Podman VS Docker
Podman和Docker的各方面對比可以參考下表。
Podman | Docker | |
---|---|---|
架構 | 無守護程式,可以在啟動容器的使用者下執行容器 | 使用守護程式來建立映象和執行容器 |
安全 | 允許容器使用Rootless特權 | 守護程式擁有Root許可權 |
執行容器 | 需要另一個工具來管理服務並支援後臺容器的執行 | 使用守護程式管理和執行容器 |
構建映象 | 需要容器映象生成器Buildah的輔助 | 可以自己構建容器映象 |
理念 | 採用模組化的方法,依靠專門的工具來完成特定的任務 | 一個獨立的、強大的工具 |
使用 | 相容大部分Docker命令,有專門的docker相容外掛 | 使用自己的命令 |
總結
今天體驗了一把Podman,確實使用起來和Docker非常相似。感覺Podman和Docker主要區別在於是否使用守護程式來管理容器以及它們的理念。Docker強調all in one
,致力於成為一款功能強大的工具,而Podman則更強調模組化
,通過其他工具的輔助來完成特定任務。Docker和Podman都是非常優秀的容器引擎,如果你的專案中已經使用了Docker,沒必要換成Podman,如果你專案才起步,技術選型的時候可以考慮下Podman。
專案地址
https://github.com/containers...
本文 GitHub https://github.com/macrozheng/mall-learning 已經收錄,歡迎大家Star!