BeTrfo

BeTrfo

love

使用 WatchTower 使容器自動化更新(簡單用法)

隨著 Docker 的普及,基本上 90% 的專案都會提供 Docker 來部署應用並且隔離。部署之前有一些基礎經驗還好,還能預先設定之後怎麼進行更新、資料怎麼進行保存。但是有一些對 Docker 幾乎不了解的使用者來說,可能只能跟著使用者文件複製貼上運行,後續更新相當茫然,只能重新部署一次。
偶然在 Github 發現了 WatchTower 這個專案,我想這可能就是容器更新的最佳解決方案了。

簡單介紹#

Watchtower 是一個容器管理工具,推薦的安裝方式也是使用 Docker。它能夠監視 Docker 中的容器,並在其所依賴的映像更新之後自動更新容器並恢復資料。

一些優點#

  1. 自動更新,不需要人工進行干預,更新時會保存所有的資料信息。
  2. 簡單易用,預設運行方式也是直接 Docker 運行,不需要其他多餘配置。
  3. 自定義程度高,支援配置時間點、更新映像策略、更新容器策略等。
  4. 輕量級且和現有的服務無縫集成,不需要其他多餘的配置

簡單上手#

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 這個配置選擇一個。

結合以上,可以整理出來一些常用的方式

  1. 手動執行一次對容器映像的更新,更新的時候包含已停止的容器,並且更新完之後執行一次清理。
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

image

  1. 後台運行,每天早上五點執行一次檢查(需要注意這裡使用的 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 * * *"

image

  1. 後台運行,每小時執行一次檢查(這裡的單位是 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

image

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。