與 systemd 整合:Quadlet
Podman 容器預設是「前景程序」,主機重開機後容器不會自動回來。Quadlet 是 Podman 提供的功能,能把容器設定寫成 systemd 服務單元,享有開機自動啟動、當機自動重啟等好處。
在 ~/.config/containers/systemd/ 建立一個 .container 檔案,例如 myapp.container:
[Unit]
Description=My App
[Container]
Image=localhost/myapp:latest
PublishPort=8080:80
Volume=myapp-data:/data
[Service]
Restart=always
[Install]
WantedBy=default.target
接著重新載入並啟動:
systemctl --user daemon-reload
systemctl --user start myapp
systemctl --user enable myapp
journalctl --user -u myapp -f # 查看服務日誌
資源限制
避免單一容器吃光主機資源:
podman run -d \
--memory=512m \
--cpus=1.0 \
--name myapp myimage
Healthcheck:自動健康檢查
podman run -d \
--health-cmd="curl -f http://localhost/ || exit 1" \
--health-interval=30s \
--name myapp myimage
podman ps # STATUS 欄位會顯示 healthy / unhealthy
最佳實務小整理
- 盡量使用 rootless 模式執行容器,降低主機被攻擊時的風險
- 映像檔標籤(tag)盡量寫明確版本號,避免
latest在不同時間拉到不同版本 - 把設定與機密資料(密碼、API key)放在環境變數或 secret,不要寫死在 Containerfile 裡
- 善用
.containerignore(類似.gitignore),避免把不必要的檔案複製進映像檔,讓建置更快、映像檔更小
這些技巧能讓你的容器服務在正式環境中跑得更穩定、更安全。