Podman 有內建自動更新 container image 的功能,這個功能是利用 podman auto-update
指令達成的,執行這個指令會更新有標註要自動更新的 container 的 image。
要如何標註這個 container 要自動更新呢?
可以為 container 加上 io.containers.autoupdate
label。如果 container 是用 Quadlet 設置的,可以在 [Container]
section 加上 AutoUpdate
這個 field。
它的值有兩種選擇:registry
或 local
。我覺得 registry
比較常用,它代表從 registry
(如 Docker Hub 或 Quay.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
:
這樣這個 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 這個功能是內建的,不需要額外安裝其他程式,不過要記得:
- 為 container 設定要自動更新
- 啟用
podman-auto-update.timer
這樣自動更新功能才會正常運作。