基礎環境#
システム: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 のインストール#
方法 1: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
更新後に古いイメージを削除
方法 2: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 * * *" | 毎日 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 | 手動で 1 回更新し、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/