DUICUO

Watchtower を使用して実行中の Docker コンテナを自動的に更新する方法

Watchtower を使用して Docker コンテナのベースイメージを自動的に更新する

DevOps担当者にとって、Dockerコンテナを最新の状態に保つことは極めて重要なタスクです。Dockerコンテナを手動で更新するのは時間のかかる作業です。この記事では、 Watchtowerとは何か、インストール方法、そしてWatchtowerを使ってLinuxで実行中のDockerコンテナを自動更新する方法について説明します。

ものみの塔とは何ですか?

Watchtower は、実行中の Docker コンテナを監視し、ベースイメージの変更を検出するとコンテナを自動的に更新するために使用される無料のオープンソース アプリケーションです。

Watchtower は、実行中のコンテナを更新する必要があることを検出すると、SIGTERM シグナルを送信して実行中のコンテナを正常に終了します。

新しいイメージをダウンロードし、コンテナを最初にデプロイした時と同じように再起動します。すべてのファイルはバックグラウンドで自動的にダウンロードされるため、ユーザーの介入は必要ありません。

このガイドでは、Watchtower を使用して Unix 系システムで実行中の Docker コンテナを自動的に更新する方法について説明します。

このガイドを CentOS と Ubuntu でテストしましたが、プロセスはすべての Linux ディストリビューションで同じです。

LinuxにWatchtowerをインストールする

WatchtowerはDockerイメージとしてダウンロードできます。そのため、導入は簡単です。LinuxシステムにDockerイメージをインストールし、Watchtowerを実行するだけで、すぐにDockerコンテナの監視を開始できます。

PRM および DEB パッケージ管理システムに Docker をインストールするには、以下の手順を参照してください。

  • CentOSにDockerをインストールする方法
  • UbuntuにDockerをインストールする方法
  • Linux 向け Docker Desktop 初心者ガイド

Docker をインストールした後、次のコマンドを使用して、Watchtower コンテナを​root​ユーザーとしてデプロイできます。

 # docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower

Docker Desktop がすでにインストールされている場合は、Watchtower コンテナを通常のユーザーとして実行します。

 $ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower

このコマンドは、 ​watchtower​イメージの最新バージョンをプルし、 ​watchtower​コンテナを実行します。

出力例:

ローカルで画像「containrrr/watchtower:latest」見つかりません
最新: containerrrr/watchtower からプル
1045b2f97fda: プル完了
35a104a262d3: プル完了
1a0671483169: プル完了
ダイジェスト: sha256:bbf9794a691b59ed2ed3089fec53844f14ada249ee5e372ff0e595b73f4e9ab3
ステータス: containerrrr/watchtower:latest 新しいイメージをダウンロードしました
91c104ef0e9896e8cd5ff30d9f13e728dbfad66443830ec2ac85dde6d7d37564

Watchtower Dockerコンテナを実行する

Watchtowerを使用してDockerコンテナを自動的に更新する

システム上では、Watchtower が他のコンテナと並行して実行されています。実行中の Docker コンテナのリストは、以下のコマンドで確認できます。

 $ docker ps

出力例:

コンテナID イメージ コマンド 作成ステータス ポート名
91c104ef0e98 containrrr/watchtower "/watchtower" 14分前14分前8080 /tcp watchtower
f90b462b0712 bitnami/wordpress-nginx:6 "/opt/bitnami/script…" 19分前19分前0 .0.0.0:80->8080/tcp, 0 .0.0.0:443->8443/tcp ostechnix-wordpress-1

上記の出力に示されているように、 ​watchtower​コンテナは​ostechnix-wordpress-1​というコンテナと並行して実行されています。今後、 ​watchtower​このコンテナを数分ごとにチェックします。

Watchtower はコンテナのベースイメージへの変更を検出すると、 ​ostechnix-wordpress-1​コンテナを正常にシャットダウンし、最初に起動したときと同じ方法で新しいイメージを起動します。

同様に、実行中のすべてのコンテナを数分ごとに自動的にチェックし、自動的に更新します。

Watchtower は複数接続されたコンテナをどのように更新しますか?

Watchtower は、複数接続されたコンテナを監視する際に非常にインテリジェントです。

現在 2 つのコンテナを実行しているとします。

 $ docker ps

出力例:

コンテナID イメージ コマンド 作成ステータス ポート名
91c104ef0e98 containrrr/watchtower "/watchtower" 14分前14分前8080 /tcp watchtower
f90b462b0712 bitnami/wordpress-nginx:6 "/opt/bitnami/script…" 19分前19分前0 .0.0.0:80->8080/tcp, 0 .0.0.0:443->8443/tcp ostechnix-wordpress-1
a895f082438a bitnami/mariadb:10.6 "/opt/bitnami/script…" 20分前19分前3306 /tcp ostechnix-mariadb-1

実行中の Docker コンテナを表示する

ご覧のとおり、 ​ostechnix-wordpress-1​​ostechnix-mariadb-1​という2つのコンテナを実行しています。 ​ostechnix-mariadb-1​コンテナは​ostechnix-wordpress-1​コンテナにリンクされています。

Watchtower が​ostechnix-wordpress-1​コンテナの新しいバージョンを検出すると、まずそれに接続されている​ostechnix-mariadb-1​コンテナをシャットダウンし、次に​ostechnix-wordpress-1​コンテナ自体をシャットダウンします。

​ostechnix-wordpress-1​コンテナを更新した後、Watchtower は両方のコンテナを正しい順序で、最初の起動時と同じ方法で再起動し、アプリケーションを正しく復元します。この例では、接続が継続して機能するように、最初に​ostechnix-mariadb-1​コンテナを起動し、次に​ostechnix-wordpress-1​コンテナを起動します。

特定のコンテナを監視する

デフォルトでは、Watchtower はそれが指す Docker デーモンで実行されているすべての Docker コンテナを監視します。

ただし、次に示すように、コンテナ名を指定することにより、Watchtower による監視を特定の Docker コンテナに制限することができます。

 $ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower ostechnix-wordpress-1

上記の例では、 ​watchtower​他のコンテナを無視し、 ​ostechnix-wordpress-1​という名前のコンテナの更新のみを監視します。

パラメータを指定しない場合、Watchtower は通常どおり実行中のすべての Docker コンテナを監視します。

通知を送信

コンテナの更新に関する通知を受け取りたい場合、メール、Slack、MSTeams、Gotify で通知を送信できます。

以下の例は、電子メールで通知を送信する方法を示しています。SMTPサーバーが既に設定されていることを前提としています。

 docker run -d \
--name監視塔 \
-v /var/run/docker.sock:/var/run/docker.sock \
-e WATCHTOWER_NOTIFICATIONS =電子メール \
-e WATCHTOWER_NOTIFICATION_EMAIL_FROM = [email protected] \
-e WATCHTOWER_NOTIFICATION_EMAIL_TO = [email protected] \
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER = smtp.gmail.com\
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT = 587 \
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER = [email protected] \
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD =アプリパスワード \
-e WATCHTOWER_NOTIFICATION_EMAIL_DELAY = 2 \
コンテナ/監視塔

詳細については、以下の Watchtower Github リポジトリと Watchtower 公式ホームページを参照してください。

材料

  • ウォッチタワー GitHub
  • ものみの塔ホームページ