Webサーバー(Apache 2など)を備えたDockerコンテナーがあるとします。その下のOSを更新したいと思います。 このSFの回答 最良の方法は、ベースイメージと私のApacheイメージを再構築することです。ただし、新しいコンテナを作成する前に古いコンテナを削除する必要があるため、イメージをデプロイするとダウンタイムが発生し、ポート80/443にバインドしているコンテナは1つだけになります。
しかし、この更新をダウンタイムなしでどのように展開できますか?ロードバランサーを使用し、コンテナー間通信を使用する必要がありますか?また、ロードバランサーを更新するにはどうすればよいですか?
はい、ロードバランサーを使用して、一度に1つのインスタンスを更新する必要があります。コンテナ間通信がどこにやって来るのかわかりません。
例として、サイトAにサービスを提供するロードバランサーがあるとします。ユーザーはそれに接続し、「A」としてのみ認識します。ロードバランサは、2つ以上のバックエンド(B、Cなど)があることを認識しており、それらがVMであるかコンテナであるかは関係ありません。
次に、バックエンド(この場合はApacheインスタンス)をアップグレードします。
次に、C、Dなどに対して同じプロセスを実行します。
2013年11月から Dockerコンテナーのインプレースアップグレードのオープンリクエスト が存在することに注意してください。
おそらく、このモデルでライブサイトを既に実行していて、ダウンタイムなしでアップグレードしたいので、これを求めているのでしょう。したがって、上記の理想的な目標状態に到達する必要がありますが、段階的に行う必要があります。
それを仮定しましょう:
これらの仮定が誤っている場合は、最初に修正して、これが正しいようにする必要があります。
次に、次の手順に従います。
最も簡単なオプションは、独自のバランサを実行しないことです。たとえば、サービスとしてロードバランシングを提供するクラウドプラットフォームを使用している場合は、それを使用することを検討してください。そうすれば、ロードバランサーのメンテナンスと更新は問題になりません。
独自のロードバランサーを実行している場合は、別の間接層(DNSなど)を追加すると役立ちます。以下を想定しましょう:
次のように進めます。
bのIPアドレスをAとともにDNS解決に追加する
bに問題がある場合は、次のように取り消します。
これで完了です。
プロセスの自動化に役立つこれらの記事やツールをご覧ください。ただし、一般的な考え方は同じです。
「コンピューターサイエンスのすべての問題は、もちろん、間接参照が多すぎる問題を除いて、別のレベルの間接参照で解決できます。」— デビッド・ウィーラー