skip to content
鰭狀漏斗

Podman 自動更新 Container Image

/ 閱讀時間 3 分鐘

Podman 有內建自動更新 container image 的功能,這個功能是利用 podman auto-update 指令達成的,執行這個指令會更新有標註要自動更新的 container 的 image。

要如何標註這個 container 要自動更新呢?

可以為 container 加上 io.containers.autoupdate label。如果 container 是用 Quadlet 設置的,可以在 [Container] section 加上 AutoUpdate 這個 field。

sleep.container
[Container]
Image=registry.fedoraproject.org/fedora:latest
Exec=sleep infinity
AutoUpdate=registry

它的值有兩種選擇:registrylocal。我覺得 registry 比較常用,它代表從 registry(如 Docker HubQuay.io)取得最新的 image。local 則是從本地的 container storage 找 image,如果與正在跑的 container 不同就換成那個 image。

雖然在設定完成之後只要執行 podman auto-update 就可以更新 container image,不過這樣做就不是自動更新了。要能夠自動更新,必須仰賴 systemd service podman-auto-update.service 與 timer podman-auto-update.timer

所以我們需要啟用 podman-auto-update.timer

Terminal window
systemctl enable --now podman-auto-update.timer

這樣這個 timer 就會定期執行 podman-auto-update.service,這個 service 會執行 podman auto-update 指令,達成 container image 的自動更新。這個 timer 執行的時間預設是每天午夜零點開始的十五分鐘內隨機選一個時間執行,修改這個 timer 可以變更定期執行的週期與時間。

如果自己用 crontab 設定每天定期執行 podman auto-update 指令也是可以達到一樣的效果,只是 Podman 好像比較喜歡用同是 RedHat 推的 systemd 的樣子。

在 Docker 如果我們要自動更新 container image,我們需要執行 Watchtower container 才能達成。在 Podman 這個功能是內建的,不需要額外安裝其他程式,不過要記得:

  1. 為 container 設定要自動更新
  2. 啟用 podman-auto-update.timer

這樣自動更新功能才會正常運作。

參考資料