本文參考https://www.ioiox.com/archives/84.html
Watchtower 是一款實現(xiàn)自動化更新 Docker 鏡像與容器的實用工具.它監(jiān)控著所有正在運行的容器以及相關(guān)鏡像,當(dāng)檢測本地鏡像與鏡像倉庫中的鏡像有差異時,會自動拉取最新鏡像并使用最初部署時的參數(shù)重新啟動相應(yīng)的容器.
快速啟動
執(zhí)行以下標(biāo)準(zhǔn)命令啟動 Watch-tower 容器,并每 5 分鐘一次檢查所有容器的鏡像是否為最新版,如發(fā)現(xiàn)鏡像更新將會自動停止容器,刪除容器,拉取最新鏡像,在以之前啟動容器的命令啟動容器.
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower
清理舊鏡像
鏡像在更新后舊鏡像標(biāo)簽會變?yōu)閚one,長期自動更新會導(dǎo)致過多的none鏡像占用空間,加入--cleanup參數(shù)可以在每次更新后自動刪除none鏡像.
docker run -d \
--name watchtower \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup
指定容器更新
如無需自動更新所有穩(wěn)定運行的容器,可以配置僅更新指定容器,只需要在命令后加上容器名.例如只更新nginx和redis.
docker run -d \
--name watchtower \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup \
nginx redis
注意指定容器需填寫 容器名 ,并非鏡像名.由于部分容器啟動時可能沒有定義 --name 參數(shù),請執(zhí)行 docker ps 查詢核對容器名.
配置自動更新頻率
Watch-tower 默認(rèn)每 5 分鐘輪詢一次,可以使用以下參數(shù)配置更新的頻率.
- --interval,-i 配置更新周期,默認(rèn)300秒.
- --schedule,-s 配置定時更新,使用Cron表達(dá)式,例如"0 0 1 * * *".即每天凌晨1點更新.
注意:當(dāng)使用 -s 參數(shù)來配置定時更新時,由于容器內(nèi)默認(rèn)為 UTC 時間,上述設(shè)置的 凌晨1點 實際上是北京時間 早上9點 .可以通過加上 -e TZ=Asia/Shanghai 環(huán)境變量來定義時區(qū),此時配置的時間則為北京時間.
每小時更新一次
docker run -d \
--name watchtower \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup \
-i 3600
每天凌晨1點更新(北京時間)
docker run -d \
--name watchtower \
--restart always \
-e TZ=Asia/Shanghai \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup \
-s "0 0 1 * * *"
手動更新
使用手動更新的方式,運行一次Watch-tower容器來更新所需的容器,更新后會自動刪除本次運行的Watch-tower容器.只需要加上--rm和--run-once參數(shù)即可.同時也可以配合以上指定容器或指定排除容器的參數(shù)來使用.
手動更新所有容器
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup \
--run-once
手動更新指定容器
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup \
--run-once \
nginx redis