為什麼需要多容器管理?
實際的應用程式通常不會只有一個容器,例如一個網站可能需要:「前端網頁」+「後端 API」+「資料庫」三個容器一起運作。一個一個用 podman run 啟動既麻煩又容易出錯,這時候就需要工具幫我們統一管理。
Pod:把多個容器打包在一起
Podman 有一個 Docker 沒有的概念叫做 Pod(這個概念來自 Kubernetes):同一個 Pod 內的容器會共用網路命名空間,彼此之間可以用 localhost 互相溝通。
podman pod create --name mypod -p 8080:80
podman run -d --pod mypod --name web nginx
podman run -d --pod mypod --name app myapi
podman pod ps # 查看 pod 列表
podman pod stop mypod # 一次停止整個 pod 內的容器
Podman Compose
如果熟悉 Docker 的 docker-compose.yml,Podman 也能透過 podman-compose 或內建的 podman compose 使用相同格式的檔案:
version: "3"
services:
web:
image: nginx
ports:
- "8080:80"
app:
build: ./app
environment:
- DB_HOST=db
db:
image: postgres
volumes:
- dbdata:/var/lib/postgresql/data
volumes:
dbdata:
podman compose up -d # 依照設定檔啟動所有服務
podman compose down # 停止並移除所有服務
podman compose logs -f # 查看所有服務的輸出
產生 Kubernetes YAML
Podman 的另一個特色是可以把現有容器設定直接轉成 Kubernetes 的 YAML 格式:
podman generate kube mypod > mypod.yaml
podman play kube mypod.yaml # 用該 YAML 重新建立 pod
這讓你可以在本機用 Podman 開發測試,未來要搬到 Kubernetes 叢集時也有現成的設定檔可以參考。