実行中のコンテナーをダウンタイムなしでアップグレードしたい Docker ホストを構築しています。ここでは、1 つのコンテナーのみを実行しているとします。
新しいイメージを作成し、そこからコンテナーを起動してdocker run -P ...
、ランダムなホスト ポートが割り当てられるようにします。次に、Registratorのようなものを使用して、Consul のサービスを自動的に更新できます。現在、Consul には、イメージ名に対応するサービスの 2 つの登録 (古いコンテナーと新しいコンテナー) があります。
Consul-Templateを使用して新しいコンテナーのポートを指すように nginx リバース プロキシ構成を更新したいと思います(ここで説明) 。Consul-Template で最新のコンテナの詳細のみを取得するにはどうすればよいですか?
私が検討した2つの解決策は次のとおりです。
- を使用して
CreateIndex
、このサービスの最新の登録を検索します。ただし、Consul-Template を CreateIndex でソートする方法がわかりません。 - サービスタグの使用。問題は、以前のコンテナ/Consul サービス登録からタグを削除する方法がわからないことです。それが可能であれば、特定のタグを新しいコンテナーに割り当てて、 Consul-Template で選択するだけで済みます。これは、複数のコンテナーのダウンタイムなしのアップグレードを実行するように拡張されます。
更新:タグを更新/クリアする方法に関するドキュメントを見つけました: 1、2、3。これは、新しいコンテナーがタグで開始される前に実行されている古いコンテナーで実行できます。
これは、この問題を解決する最善の方法ですか?