基礎環境#
系統: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-once | docker 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-only | docker 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/