Podman 已成 Linux 官方標配!Docker 沒戲了?

macrozheng發表於2022-03-01
提到容器技術大家一般都會想到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

  • 使用podman ps命令可以檢視所有執行中的容器;

  • 使用podman images命令可以檢視所有下載的映象;

  • 如果你沒有安裝Docker而輸入docker命令的話,會提示你安裝podman-docker外掛,該外掛會直接把docker命令轉成podman,這是想徹底取代docker?

視覺化管理

CentOS 8內建的視覺化管理工具Cockpit已經內建了Podman支援,直接使用它即可,具體可以參考Cockpit使用教程
  • 開啟podman容器管理,即可檢視所有執行中的容器和已經下載的映象;

  • 還可以實時檢視容器日誌,重啟、停止或刪除容器;

  • 還可以直接進入容器執行命令,比如檢視mysql容器中的資料庫;

  • 也可以直接進行映象下載;

  • 還可以通過映象來執行容器,用起來還是挺方便的。

Podman VS Docker

Podman和Docker的各方面對比可以參考下表。
PodmanDocker
架構無守護程式,可以在啟動容器的使用者下執行容器使用守護程式來建立映象和執行容器
安全允許容器使用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!

相關文章