Docker
の普及に伴い、基本的に 90% のプロジェクトがアプリケーションをデプロイし、隔離するために Docker
を提供しています。デプロイ前にいくつかの基本的な経験があれば、今後の更新やデータの保存方法を事前に設定することができます。しかし、Docker
にほとんど理解がないユーザーにとっては、ユーザードキュメントをコピー&ペーストして実行するしかなく、後の更新は非常に不明瞭で、再デプロイするしかありません。
偶然 Github
で WatchTower
というプロジェクトを見つけました。これがコンテナ更新の最良の解決策かもしれないと思いました。
簡単な紹介#
Watchtower はコンテナ管理ツールで、推奨されるインストール方法も Docker を使用することです。Docker 内のコンテナを監視し、依存しているイメージが更新された後に自動的にコンテナを更新し、データを復元することができます。
いくつかの利点#
- 自動更新で、手動の介入が不要で、更新時にはすべてのデータ情報を保存します。
- 簡単に使え、デフォルトの実行方法も直接 Docker で実行され、他の余分な設定は必要ありません。
- カスタマイズの自由度が高く、時間点、更新イメージ戦略、更新コンテナ戦略などの設定をサポートしています。
- 軽量で、既存のサービスとシームレスに統合され、他の余分な設定は必要ありません。
簡単な使い方#
WatchTower
はデフォルトで以下の Docker
コマンドを実行するだけで動作します。デフォルトでは 5 分ごとにチェックし、起動後のログには各実行の時間や次回の実行予定時間が含まれます。
docker run -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
ここで、起動時に他の設定を追加することもできます。
- デフォルトのタイムゾーンを設定します。ここでは直接東八区に設定します。
- バックグラウンドで実行します。
- 再起動ポリシーを設定し、
docker
が再起動しても引き続き実行されます。
# -d バックグラウンドで実行
# -e TZ="Asia/Shanghai" タイムゾーンを東八区に設定。
# -v /var/run/docker.sock:/var/run/docker.sock WatchTower がコンテナ情報を取得できるようにします。
docker run -d \
--name watchtower \
-e TZ="Asia/Shanghai" \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower
拡張設定#
基本的なアプリケーションに加えて、いくつかの一般的な拡張設定をリストアップします:
--run-once
一度だけ実行します。--cleanup
実行後に未使用のイメージをクリーンアップします。--include-stopped
停止したコンテナもチェックします。--schedule
cron
定期戦略を使用して実行します。--interval
インターバル時間を使用して実行し、--schedule
とのいずれかを選択します。
以上を組み合わせると、いくつかの一般的な方法を整理できます。
- コンテナイメージの更新を手動で一度実行し、停止したコンテナを含めて、更新後に一度クリーンアップを実行します。
docker run --rm \
--name watchtower \
-e TZ="Asia/Shanghai" \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--run-once \
--cleanup \
--include-stopped
- バックグラウンドで実行し、毎朝 5 時に一度チェックを実行します(ここで使用する
cron
は 6 桁で、linux
システムのデフォルトサポートとは異なることに注意が必要です)。
docker run -d \
--name watchtower \
-e TZ="Asia/Shanghai" \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup \
--include-stopped \
--schedule "0 0 5 * * *"
- バックグラウンドで実行し、毎時一度チェックを実行します(ここでの単位は
s
なので、一時間は3600
に設定します)。
docker run -d \
--name watchtower \
-e TZ="Asia/Shanghai" \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup \
--include-stopped \
--interval 3600