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 のインストール#

方法 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-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手動で 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-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/

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。