succi0303 blog

This is my personal blog. All posts are my own.

自宅サーバのコンテナアプリケーションをWatchtowerで自動更新できるようにしてみた

自宅サーバで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を作成して設定を記述します。GmailSMTPサーバとして通知を送信するように設定しました。

# 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の利用を検討するよう案内されています。

参考リンク