Watchtower - 自動更新 Docker 鏡像與容器

本文參考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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容