Podman 基礎入門

第六章:Podman Compose 與多容器管理

為什麼需要多容器管理?

實際的應用程式通常不會只有一個容器,例如一個網站可能需要:「前端網頁」+「後端 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 叢集時也有現成的設定檔可以參考。