Podman 基礎入門

第五章:資料與網路管理

為什麼需要資料持久化?

容器被刪除後,裡面的所有檔案變更都會一併消失。如果是資料庫、使用者上傳的檔案這類重要資料,就需要透過掛載(mount)的方式,把資料存放在容器外部,容器重建也不會遺失。

Bind Mount:掛載主機目錄

podman run -d \
  -v /home/user/data:/var/lib/mydata \
  --name myapp myimage

-v 主機路徑:容器內路徑,主機上對該路徑的修改會即時反映到容器內,反之亦然,適合開發環境或設定檔。

Volume:Podman 管理的資料卷

podman volume create mydata          # 建立 volume
podman volume ls                     # 列出所有 volume
podman run -d -v mydata:/var/lib/mydata --name myapp myimage
podman volume inspect mydata         # 查看 volume 實際存放位置

Volume 由 Podman 統一管理位置與權限,比起 bind mount 更適合用在正式環境的資料庫等場景。

網路:連接埠對應

podman run -d -p 8080:80 nginx

-p 主機埠:容器埠 讓外部可以透過主機的連接埠存取容器內的服務。

網路:自訂網路讓容器互相溝通

podman network create mynet
podman run -d --network mynet --name db postgres
podman run -d --network mynet --name app myapp

在同一個自訂網路中的容器,可以直接用容器名稱當作主機名稱互相連線(例如 app 容器可以連到 db:5432),不需要知道對方的 IP。

SELinux 與 Volume

在啟用 SELinux 的系統上,掛載目錄時常會看到 :Z:z 後綴:

podman run -v /home/user/data:/data:Z myimage

這會自動調整目錄的 SELinux context,讓容器能正常存取,否則可能會遇到「權限明明對了卻讀不到檔案」的情況。