はじめに
この実験では、Docker Swarm 内でサービスの実行インスタンス(レプリカ)の数を効果的に管理する方法を学びます。まず、複数の実行コピーを持つレプリケートされたサービスを作成し、基準を設定します。
作成後、サービスのスケールを動的に調整する方法を探索します。これには、単一のサービスをスケールアップして増加した需要を処理すること、スケールダウンしてレプリカをゼロにすること、最後に複雑なデプロイメントを管理するために複数のサービスを同時にスケールすることが含まれます。実践的なコマンドを通じて、コンテナ化されたアプリケーションの高可用性とリソースの最適化を達成するために docker service scale コマンドを使用する実践的な経験を積むことができます。
レプリケートされたサービスを作成する
このステップでは、Docker を使用してレプリケートされたサービスを作成する方法を学びます。レプリケートされたサービスとは、サービスの複数の同一コピー(レプリカ)が同時に実行されることを意味します。これにより高可用性が提供され、より多くのトラフィックを処理することができます。
まず、必要な Docker イメージを取得しましょう。この例では alpine イメージを使用します。
docker pull alpine
イメージが取得されてダウンロードされていることを示す出力が表示されるはずです。
次に、3 つのレプリカを持つ my-alpine-service という名前のレプリケートされたサービスを作成しましょう。alpine イメージと ping localhost コマンドを使用します。このコマンドは各コンテナ内で実行され、ローカルホストを継続的にピングします。
docker service create --name my-alpine-service --replicas 3 alpine ping localhost
このコマンドを実行すると、Docker Swarm がサービスを作成し、指定された数のレプリカを起動します。サービスの作成が確認される出力が表示されるはずです。
サービスが作成され、レプリカが実行されていることを確認するには、サービスを一覧表示できます。
docker service ls
my-alpine-service が 3 つのレプリカとともに表示されるはずです。
また、サービスの詳細を取得するためにサービスを調査することもできます。
docker service inspect my-alpine-service
このコマンドは、サービスに関する詳細情報を含む大きな JSON オブジェクトを出力します。これにはレプリカの数も含まれます。
最後に、サービスに関連付けられたタスクを確認して、個々のコンテナが実行されていることを確認しましょう。
docker service ps my-alpine-service
このコマンドは、サービスの各レプリカ(タスク)の状態を表示します。3 つのタスクが表示され、それぞれが実行状態にあるはずです。
単一のサービスをスケールアップする
このステップでは、単一のサービスをスケールアップする方法を学びます。スケールアップとは、サービスのレプリカ数を増やすことを意味します。これは、増加した負荷やトラフィックを処理する必要がある場合に便利です。
前のステップで、3 つのレプリカを持つ my-alpine-service という名前のサービスを作成しました。今度は、このサービスを 5 つのレプリカにスケールアップしましょう。これには docker service scale コマンドを使用できます。
docker service scale my-alpine-service=5
このコマンドを実行すると、Docker Swarm はサービスに 2 つの新しいレプリカを追加します。サービスが更新されていることを示す出力が表示されるはずです。
サービスがスケールアップされたことを確認するには、再度サービスを一覧表示できます。
docker service ls
これで、my-alpine-service が 5 つのレプリカとともに表示されるはずです。
また、サービスに関連付けられたタスクを確認して、新しく作成されたコンテナを確認することもできます。
docker service ps my-alpine-service
このコマンドは、サービスのすべての 5 つのレプリカ(タスク)の状態を表示します。5 つのタスクが表示され、新しいタスクは実行状態に移行しているはずです。
単一のサービスをゼロにスケールダウンする
このステップでは、単一のサービスをレプリカ数 0 にスケールダウンする方法を学びます。レプリカ数を 0 にスケールダウンすることで、サービスのすべてのインスタンスが実質的に停止します。これは、サービスの設定を削除せずに一時的にサービスを停止する場合に便利です。
前のステップで、my-alpine-service を 5 つのレプリカにスケールアップしました。今度は、このサービスをレプリカ数 0 にスケールダウンしましょう。再び docker service scale コマンドを使用します。
docker service scale my-alpine-service=0
このコマンドを実行すると、Docker Swarm はサービスのすべての実行中のレプリカを停止して削除します。サービスが更新されていることを示す出力が表示されるはずです。
サービスがレプリカ数 0 にスケールダウンされたことを確認するには、サービスを一覧表示できます。
docker service ls
これで、my-alpine-service がレプリカ数 0 で表示されるはずです。
また、サービスに関連付けられたタスクを確認することもできます。
docker service ps my-alpine-service
このコマンドは、タスクの状態を表示します。レプリカ数を 0 にスケールダウンしたので、実行中のタスクは表示されないはずです。「Shutdown」状態のタスクが表示されることがあり、これはタスクが停止されたことを示しています。
複数のサービスをスケールする
このステップでは、複数のサービスを同時にスケールする方法を学びます。これは、たとえばアプリケーションの異なるコンポーネントのように、一緒にスケールする必要がある複数のサービスがある場合に便利です。
まず、別のサービスを作成しましょう。nginx イメージを使用して、レプリカ数 1 の my-nginx-service という名前のサービスを作成します。まず、nginx イメージを取得する必要があります。
docker pull nginx
nginx イメージが取得されていることを示す出力が表示されるはずです。
次に、my-nginx-service を作成します。
docker service create --name my-nginx-service --replicas 1 nginx
my-nginx-service が作成されたことを確認する出力が表示されるはずです。
これで、2 つのサービスがあります。my-alpine-service(現在はレプリカ数 0)と my-nginx-service(レプリカ数 1)です。両方のサービスを一度にスケールしましょう。my-alpine-service を 2 つのレプリカに、my-nginx-service を 3 つのレプリカにスケールします。
docker service scale my-alpine-service=2 my-nginx-service=3
このコマンドを実行すると、Docker Swarm は指定されたレプリカ数に従って両方のサービスを更新します。両方のサービスが更新されていることを示す出力が表示されるはずです。
両方のサービスがスケールされたことを確認するには、サービスを一覧表示できます。
docker service ls
これで、my-alpine-service が 2 つのレプリカとともに、my-nginx-service が 3 つのレプリカとともに表示されるはずです。
また、各サービスのタスクを個別に確認して、実行中のコンテナを確認することもできます。
docker service ps my-alpine-service
これにより、my-alpine-service の 2 つの実行中のタスクが表示されます。
docker service ps my-nginx-service
これにより、my-nginx-service の 3 つの実行中のタスクが表示されます。
最後に、作成したサービスをクリーンアップしましょう。docker service rm コマンドを使用して両方のサービスを削除できます。
docker service rm my-alpine-service my-nginx-service
両方のサービスが削除されたことを確認する出力が表示されるはずです。
サービスが削除されたことを確認するには、再度サービスを一覧表示します。
docker service ls
サービスは表示されないはずです。
まとめ
この実験では、Docker サービスのスケーリングを管理する方法を学びました。まず、指定されたレプリカ数でレプリケートされたサービスを作成し、耐障害性のあるアプリケーションの初期デプロイを実証しました。次に、単一のサービスに対して実行中のインスタンス数を動的に調整する方法を探りました。まずは需要の増加に対応するためにスケールアップし、その後スケールダウンし、レプリカ数を 0 に減らしてサービスを実質的に停止する方法も学びました。
最後に、複数のサービスを同時にスケールする方法を学び、単一のコマンドで Docker Swarm 環境内の複数のアプリケーションのリソース割り当てを管理する能力を示しました。これらの手順により、docker service scale コマンドを使用してサービスのライフサイクルとリソース利用を効率的に管理する実践的な経験を得ることができました。



