自宅サーバでDockerを使って複数のコンテナアプリケーションを動かしています。アプリケーションの更新時に毎回手動でバージョンアップするのが面倒なのでWatchtowerを使って自動更新できるようにしました。
Watchtowerは稼働中のコンテナと元になったコンテナイメージを監視し、イメージの更新を検知してイメージの更新とコンテナの再起動を自動で実行してくれるツールです。また、自動更新の結果についてチャットツールやメールに通知を送ることができます。今回はメールで通知を送るようにしました。
設定方法
watchtower
ディレクトリ以下に、compose.yaml
を作成します。
# compose.yaml services: watchtower: container_name: watchtower image: containrrr/watchtower restart: always volumes: - /var/run/docker.sock:/var/run/docker.sock](services: env_file: - ./watchtower.env
同じディレクトリにwatchtower.env
を作成して設定を記述します。GmailをSMTPサーバとして通知を送信するように設定しました。
# watchtower.env WATCHTOWER_CLEANUP=true TZ=Asia/Tokyo WATCHTOWER_INCLUDE_RESTARTING=true WATCHTOWER_POLL_INTERVAL=36000 WATCHTOWER_NOTIFICATIONS=email WATCHTOWER_NOTIFICATION_EMAIL_FROM=succi0303+watchtower@gmail.com WATCHTOWER_NOTIFICATION_EMAIL_TO=succi0303@gmail.com WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.gmail.com WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587 WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=succi0303@gmail.com WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=<app password> WATCHTOWER_NOTIFICATION_EMAIL_DELAY=30
2つのファイルを作成したらdocker compose up -d
でWatchtowerを起動します。
動作確認
次のコマンドでWatchtowerを手動実行して動作を確認できます。
docker compose run --rm watchtower --run-once
実行結果の例です。
INFO[0001] Watchtower 1.7.1 INFO[0001] Using notifications: smtp INFO[0001] Checking all containers (except explicitly disabled with label) INFO[0001] Running a one time update. INFO[0029] Session done Failed=0 Scanned=22 Updated=0 notify=no INFO[0029] Waiting for the notification goroutine to finish notify=no
注意事項
Watchtowerは自宅サーバや開発環境での利用を想定されたもので、商用の本番環境での利用は非推奨です。意図せず環境を壊す危険性があります。本番環境での運用を意図する場合はKubernetesの利用を検討するよう案内されています。