banner
云野阁

云野阁

闲云野鹤,八方逍遥

Watchtower自動更新docker容器

基礎環境#

系統:openEuler 22.03 (LTS-SP4) X86

軟體:docker-26.1.3、 docker compose-2.27.0

關於 Watchtower#

Watchtower 是一個應用程式,監控正在運行的 Docker 容器,並監視這些容器的鏡像版本的變化。如果 Watchtower 檢測到容器的鏡像已更改,它將自動拉取新鏡像,關閉現有容器,使用最初部署時的相同選項重新啟動它,實現容器的優雅升級。

安裝 docker#

(1) 配置 yum 源下載 docker。

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/\$releasever/7/g' /etc/yum.repos.d/docker-ce.repo

(2)安裝最新版 docker 和 docker compose。

# 下載依賴及docker、docker compose
yum install -y container-selinux
yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin 

(3)修改 Docker 的數據目錄為 “/data/dockerData”,並配置 docker 鏡像源。

echo '{
  "data-root": "/data/dockerData",
 "registry-mirrors": ["https://dhub.kubesre.xyzcu"]
}' > /etc/docker/daemon.json

(4)啟動 Docker 服務,並設置為開機自啟。

systemctl start docker
systemctl enable docker

安裝 Watchtower#

方式一:通過 docker 命令安裝#

docker run -itd --name watchtower \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-e TZ=Asia/Shanghai \
containrrr/watchtower \
--interval 60 \
--cleanup

--restart=always 設置容器開機自啟

-v /var/run/docker.sock:/var/run/docker.sock 讀取 docker 守護進程的 API

-e TZ=Asia/Shanghai 使用本地時區

--interval 60 設置輪詢間隔為 60 秒

--cleanup 更新後刪除舊鏡像

方式二:使用 compose 文件安裝#

services:
 watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    restart: always
    environment:
       - TZ=Asia/Shanghai
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: --interval 60 --cleanup
    user: "0"
    networks:
      watchtower-net:
        ipv4_address: 172.20.17.11

networks:
 watchtower-net:
  driver: bridge
  ipam:
   config:
    - subnet: 172.20.17.0/24

Watchtower 更多應用#

1.watchtower 監控更新遠程 Docker 主機#

(1)在遠程主機上啟用遠程 API 訪問。

 #修改docker服務文件
 vi /usr/lib/systemd/system/docker.service
 #在該行後加入 -H tcp://0.0.0.0:2375
 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
 #重啟服務和docker
 systemctl daemon-reload
 systemctl restart docker
 
 #添加防火牆策略
sudo firewall-cmd --add-port=2375/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

(2)在本機創建 watchtower,監控遠程主機的 docker 容器

docker run -d --name watchtower-1 \
-e TZ=Asia/Shanghai \
containrrr/watchtower \
--interval 60 \
--cleanup \
--host "tcp://10.0.1.2:2375"

2. 按標籤篩選#

按標籤篩選進行容器的更新,需要在創建容器時,給容器打上包含com.centurylinklabs.watchtower.enable的標籤,com.centurylinklabs.watchtower.enable=false表示禁用對容器的監控和更新,com.centurylinklabs.watchtower.enable=true表示啟用對容器的監控和更新,此類情況只適用於創建新容器時。

#禁用對容器的監控和更新
docker run -itd \
--label=com.centurylinklabs.watchtower.enable=false --name test-httpd httpd
#啟用對容器的監控和更新
docker run -d --label=com.centurylinklabs.watchtower.enable=true --name test-httpd httpd

3. 禁用容器名稱篩選#

要禁用特定容器,需要在 watchtower 創建時加入--disable-containers參數,並在該參數後加上容器名稱,如httpd,運行時就會不監控名稱中含有 httpd 的容器。

docker run -d \
--name watchtower \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-e TZ=Asia/Shanghai \
containrrr/watchtower \
--interval 60 \
--cleanup \
--disable-containers httpd

4. 常用命令參數#

部分常用參數設置如下表所示。

參數示例說明
--schedule "0 9 * * *"docker run -itd --name watchtower --restart always -v /var/run/docker.sock:/var/run/docker.sock -e TZ=Asia/Shanghai containrrr/watchtower --cleanup --schedule "0 9 * * *"每天九點執行更新調度
--run-oncedocker run -rm --name watchtower --restart always -v /var/run/docker.sock:/var/run/docker.sock -e TZ=Asia/Shanghai containrrr/watchtower --cleanup --run-once手動更新一次,並將 watchtower 刪除
容器名docker run -itd --name watchtower --restart always -v /var/run/docker.sock:/var/run/docker.sock -e TZ=Asia/Shanghai containrrr/watchtower --cleanup nginx httpd指定更新容器 nginx、httpd
--monitor-onlydocker run -itd --name watchtower --restart always -v /var/run/docker.sock:/var/run/docker.sock -e TZ=Asia/Shanghai containrrr/watchtower --cleanup --monitor-only只檢查容器是否需要更新,不應用更新

更多參數設置,可查看 watchtower 官方文檔。
https://containrrr.dev/watchtower/arguments/

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