隨著 Docker 的普及,基本上 90% 的專案都會提供 Docker 來部署應用並且隔離。部署之前有一些基礎經驗還好,還能預先設定之後怎麼進行更新、資料怎麼進行保存。但是有一些對 Docker 幾乎不了解的使用者來說,可能只能跟著使用者文件複製貼上運行,後續更新相當茫然,只能重新部署一次。
偶然在 Github 發現了 WatchTower 這個專案,我想這可能就是容器更新的最佳解決方案了。
簡單介紹#
Watchtower 是一個容器管理工具,推薦的安裝方式也是使用 Docker。它能夠監視 Docker 中的容器,並在其所依賴的映像更新之後自動更新容器並恢復資料。
一些優點#
- 自動更新,不需要人工進行干預,更新時會保存所有的資料信息。
- 簡單易用,預設運行方式也是直接 Docker 運行,不需要其他多餘配置。
- 自定義程度高,支援配置時間點、更新映像策略、更新容器策略等。
- 輕量級且和現有的服務無縫集成,不需要其他多餘的配置
簡單上手#
WatchTower 預設只需要執行以下 Docker 命令就可以運行起來。預設為五分鐘去檢查一次,啟動之後日誌裡面也會包含每次運行的時間、預計下次運行時間。
docker run -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
這裡我們啟動時還可以加上一些其他的設定。
- 設定下預設時區,這裡我只直接設定為東八區。
- 後台運行。
- 設定重啟策略,即使 docker 重啟了也還會繼續運行。
# -d 後台運行
# -e TZ="Asia/Shanghai" 設定時區為東八區。
# -v /var/run/docker.sock:/var/run/docker.sock 讓 WatchTower 可以查詢到容器資訊。
docker run -d \
--name watchtower \
-e TZ="Asia/Shanghai" \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower
擴展設定#
除了基礎的應用,列出了一些比較常用的擴展配置:
--run-once
只執行一次。--cleanup
執行完成之後清理未使用的映像。--include-stopped
停止的容器也去檢查下。--schedule
使用 cron 定時策略執行。--interval
使用間隔時間去執行,和 --schedule 這個配置選擇一個。
結合以上,可以整理出來一些常用的方式
- 手動執行一次對容器映像的更新,更新的時候包含已停止的容器,並且更新完之後執行一次清理。
docker run --rm \
--name watchtower \
-e TZ="Asia/Shanghai" \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--run-once \
--cleanup \
--include-stopped
- 後台運行,每天早上五點執行一次檢查(需要注意這裡使用的 cron 是六位的,和 linux 系統預設支援的有所不同)。
docker run -d \
--name watchtower \
-e TZ="Asia/Shanghai" \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup \
--include-stopped \
--schedule "0 0 5 * * *"
- 後台運行,每小時執行一次檢查(這裡的單位是 s,所以一小時設定為 3600)。
docker run -d \
--name watchtower \
-e TZ="Asia/Shanghai" \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup \
--include-stopped \
--interval 3600