群暉之所以備受歡迎,是因為它完善的系統(tǒng),以及使用Docker可擴展豐富的可玩性。而Docker中的映像不是一成不變的,它是在不斷更新,開發(fā)新的功能或者修復(fù)Bug的。但是我們配置好的容器是不會自動更新的,如果刪除容器,重新下載新的映像并重新安裝,那么原來的配置都會沒了,需要重新配置。
我是一個很聽勸的人,剛剛研究了怎么手動無損升級Docker容器,就有朋友推薦可以使用watchtower實現(xiàn)映像的自動無損升級。這可比我的手動無損升級更好用呀,趕緊來學(xué)習(xí)折騰一下。
先來說一下watchtower,它可以監(jiān)視 Docker Hub 或私有倉庫中的映像,并在發(fā)現(xiàn)新的映像版本時自動更新容器,我們可以通過定時任務(wù)來執(zhí)行watchtower,可以在后臺自定義的時間自動更新有新版的Docker。
我的群暉DSM是7.2版本的,它的Docker是使用Container Manager進行管理,首先在Container Manager的注冊表菜單中搜索“watchtower”,我選擇的是下載量最多的“containrrr/watchtower”,下拉最新版的映像。
下載完成以后無需運行映像,到“控制面板”中找到任務(wù)計劃。
在任務(wù)計劃中,逐層選擇新增-計劃的任務(wù)-用戶定義的腳本
在常規(guī)設(shè)置中,任務(wù)名稱可以自己隨便起,不過必須是英文和數(shù)字,用戶選擇root
在計劃設(shè)置中,設(shè)置任務(wù)運行的周期以及時間,想每天更新的可以選擇每天重復(fù),我覺得沒有必要每天都去更新,就選擇了每周一的5:00進行更新,因為這個時間我不會使用Docker,避免更新而造成的使用的中斷
在任務(wù)設(shè)置中,輸入我們的命令,其中“l(fā)inuxserver-radarr-1”是指定要更新的容器的名稱,如果為空的話是全部更新,我只是指定了我需要更新的容器,避免一些重要的Docker因更新造成運行不穩(wěn)定。如果多個容器需要更新,可填寫多個名稱,中間用空格隔開。
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --run-once linuxserver-radarr-1
我手動執(zhí)行了一次命令,經(jīng)過短暫的運行可以看到,我的radarr從4.6.4.7568更新到了5.3.6.8612,成功進行了更新,并且全部的設(shè)置都沒有變化,無需重新配置,即時可用。
如果映像有更新的話,它會停止容器才進行更新,所以我們的郵箱會收到容器異常停止的郵件
當(dāng)然我設(shè)置的執(zhí)行任務(wù)計劃,也是會有郵件反饋的,在郵件中,也可以看到發(fā)現(xiàn)了linuxserver-radarr-1,并進行了更新
如果沒有發(fā)現(xiàn)新版本的映像,郵件中顯示順利執(zhí)行一次任務(wù)
通過watchtower,可以實現(xiàn)Docker容器的自動定時無損更新,如果我們使用了大量的Docker,這個更方便的管理方法。