はじめに
この実験では、Docker Swarm 環境においてサービスの更新を効果的に管理する方法を学びます。まず、コンテナ化されたアプリケーションのデプロイとスケーリングの基礎となる Docker Swarm サービスを作成します。
サービスを作成した後、サービスの設定を更新し、一般的なデプロイメントシナリオをシミュレートします。この実験の核心は、docker service rollback コマンドを使用してサービスを前の安定したバージョンに戻す方法を示すことです。最後に、ロールバック後のサービスの設定を確認し、復元が成功したことを確認します。
Docker Swarm サービスを作成する
このステップでは、Docker Swarm サービスを作成する方法を学びます。Docker Swarm サービスは、Swarm クラスタ上で実行されるタスクのセットです。各タスクはコンテナのインスタンスです。サービスは Docker Swarm の中心的な概念であり、コンテナイメージのレプリカをいくつ実行するか、およびそれらをどのように更新するかを定義できます。
サービスを作成する前に、Docker Swarm を初期化する必要があります。単一の仮想マシン (VM) 上で実行しているため、シングルノードの Swarm を初期化します。
まず、Swarm を初期化しましょう。
docker swarm init --advertise-addr 127.0.0.1
Swarm が初期化され、現在のノードがマネージャになったことを示す出力が表示されるはずです。
次に、nginx イメージを使用してサービスを作成しましょう。サービスの名前を my-nginx とし、nginx コンテナのレプリカを 3 つ実行するように指定します。
まず、nginx イメージをプルして、ローカルで利用可能なことを確認します。
docker pull nginx:latest
次に、サービスを作成します。
docker service create --name my-nginx --replicas 3 nginx:latest
このコマンドは、nginx:latest イメージを使用して 3 つのレプリカを持つ my-nginx という名前の新しいサービスを作成します。Docker Swarm は、これらのレプリカを Swarm 内のノードに自動的に分散させます (この場合は、単一のノードのみ)。
サービスが作成され、レプリカが実行されていることを確認するには、サービスを一覧表示できます。
docker service ls
my-nginx が 3/3 のレプリカが実行されている状態で表示されるはずです。
また、サービスに関連付けられたタスクを調査することもできます。
docker service ps my-nginx
このコマンドは、my-nginx サービスを構成する個々のタスク (コンテナ)、それらの現在の状態、および実行されているノードを表示します。3 つのタスクが Running 状態で表示されるはずです。
サービスを新しい設定に更新する
このステップでは、my-nginx サービスを更新して、nginx イメージの別のバージョンを使用するようにします。これは、Docker Swarm でサービスのローリングアップデートを実行する方法を示すものです。
まず、nginx:1.21 イメージをプルしましょう。これは、サービスを更新する対象となる Nginx の特定のバージョンです。
docker pull nginx:1.21
次に、my-nginx サービスを更新して、nginx:1.21 イメージを使用するようにします。また、レプリカの数を 5 に変更します。
docker service update --image nginx:1.21 --replicas 5 my-nginx
このコマンドは、Docker Swarm に my-nginx サービスを更新するよう指示します。--image nginx:1.21 フラグは使用する新しいイメージを指定し、--replicas 5 フラグはレプリカの希望する数を 5 に変更します。Docker Swarm はローリングアップデートを実行し、古いコンテナを指定されたイメージを実行する新しいコンテナに置き換え、レプリカの数を調整します。
サービスタスクを一覧表示することで、更新の進行状況を監視できます。
docker service ps my-nginx
nginx:1.21 イメージで新しいタスクが作成され、古いタスクがシャットダウンされるのが見られるでしょう。最終的に、すべてが nginx:1.21 イメージを使用する 5 つのタスクが Running 状態で表示されるはずです。
また、サービスの詳細を確認して更新を確認することもできます。
docker service inspect my-nginx --pretty
出力の Image と Replicas フィールドを確認し、それぞれ nginx:1.21 と 5 に更新されていることを確認してください。
サービスを前のバージョンにロールバックする
このステップでは、my-nginx サービスを前の設定にロールバックします。Docker Swarm は以前のサービス設定を追跡しており、更新に問題が生じた場合には、既知の正常な状態に簡単に戻すことができます。
サービスをロールバックするには、--rollback フラグを使用して docker service update コマンドを実行します。
docker service update --rollback my-nginx
このコマンドは、Docker Swarm に my-nginx サービスを最後の更新前の設定にロールバックするよう指示します。この場合、これは nginx:latest イメージと元のレプリカ数(3 つ)に戻すことを意味します。
サービスタスクを一覧表示することで、ロールバックのプロセスを監視できます。
docker service ps my-nginx
nginx:1.21 イメージを実行しているタスクがシャットダウンされ、nginx:latest イメージを実行する新しいタスクが作成されるのが見られるでしょう。タスクの数も前のレプリカ数に戻ります。
ロールバックが完了すると、nginx:latest イメージを実行しているタスクが表示され、レプリカの数が 3 に戻っているはずです。
また、サービスの詳細を調べてロールバックを確認することもできます。
docker service inspect my-nginx --pretty
出力の Image と Replicas フィールドを確認してください。これらは、最後の更新前の設定を反映しているはずです。
ロールバック後のサービス設定を確認する
このステップでは、my-nginx サービスが前の設定に正常にロールバックされたことを明示的に検証します。これには、サービスで使用されているイメージとレプリカの数の両方を確認する作業が含まれます。
まず、現在の状態を確認するためにサービスを一覧表示しましょう。
docker service ls
my-nginx が一覧に表示され、REPLICAS 列には 3/3 と表示されるはずです。これは、希望するレプリカ数が 3 で、現在 3 つが実行中であることを示しています。
次に、イメージとレプリカ数を確認するためにサービスの詳細を調べましょう。
docker service inspect my-nginx --pretty
出力で Image フィールドを探してください。これは現在 nginx:latest であるはずです。また、Replicas フィールドを探し、それが 3 であることを確認してください。
最後に、実行中のコンテナが正しいイメージを使用していることを確認するために、サービスに関連付けられたタスクを確認しましょう。
docker service ps my-nginx
3 つのタスクが一覧表示され、各タスクの IMAGE 列は nginx:latest であるはずです。すべてのタスクの CURRENT STATE は Running であるはずです。
これらのチェックを行うことで、ロールバックが成功し、サービスが希望する前の状態で実行されていることを確信できます。
まとめ
この実験では、Docker Swarm サービスの管理方法、特にサービスの作成と更新について学びました。まず、シングルノードの Docker Swarm を初期化し、nginx:latest イメージを使用して 3 つのレプリカを持つ my-nginx という名前のサービスを作成しました。docker service ls と docker service ps を使用して、サービスの作成と実行中のタスクを確認しました。
サービスを作成した後、サービス設定の更新方法を調べました。これには、サービスで使用するイメージを変更する作業が含まれており、Swarm 環境でのサービス更新の一般的なシナリオを示しています。



