CodeGym /コース /Docker SELF /サービスのスケーリング

サービスのスケーリング

Docker SELF
レベル 16 , レッスン 2
使用可能

8.1 コマンド docker compose scale

サービスのスケーリングとは、アプリの負荷を管理し、信頼性を確保するために、同じサービスを実行するコンテナのインスタンスの数を増減させるプロセスだよ。Docker Composeでは、サービスをスケーリングするために、古いバージョンではdocker compose scaleコマンドを、新しいバージョンでは--scaleパラメータを使うんだ。

スケーリングの基本コンセプト:

  1. スケーラビリティ: 現在の負荷に応じて簡単にサービスのインスタンス数を増やしたり減らしたりできる能力。
  2. 信頼性: 複数のインスタンスを実行することで、1つのインスタンスの障害が全体のサービス停止につながらないようにする方法。
  3. 負荷分散: 複数のサービスインスタンス間で負荷を分散してパフォーマンスを最適化すること。

docker compose scaleコマンドの使用

コマンドの構文:


docker compose scale SERVICE=NUM

ここで:

  • SERVICE: スケーリングしたいサービスの名前。
  • NUM: 実行する必要があるインスタンスの数。

使用例:

例えば、compose.yamlファイルにwebサービスの定義があると仮定するね。

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

そして、webサービスのインスタンスを3つ起動したい場合は、このコマンドを使うよ:

Terminal

docker compose scale web=3

注意: docker compose scaleコマンドを実行する前に、docker compose upコマンドでサービスを起動しておく必要があるよ。

新バージョンでの--scaleパラメータの使用

新しいバージョンでは、docker compose scaleコマンドが--scaleパラメータに置き換えられていて、upコマンドと一緒に使うよ。

Terminal

docker compose up --scale web=3

この方法の方がおすすめだよ。サービスを一緒に起動してスケーリングできるからね。

8.2 実用的な例

例 1: Webサーバーのスケール

compose.yamlファイルを作成しよう:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80-90:80"

サービスを起動して3つのインスタンスにスケールしよう:

Terminal

docker compose up --scale web=3

これで80-90の範囲のポートで動作するNginx Webサーバーの3つのインスタンスができるよ。

重要! サービスを複数のインスタンスにスケールする場合、ポートの範囲を指定する必要がある。例えば: "80-90:80"。これでホストマシンに10個のポートの範囲が「予約」されるんだ。サービスのレプリカを追加すると、範囲内のポートが割り当てられるようになる。これをしないと、ポートがランダムに選択され、レプリカにアクセスできなくなることがあるんだよ。

例 2: データベースを伴うスケール

compose.yamlファイルを作成しよう:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80-90:80"
    depends_on:
      - db

  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password

サービスwebを起動して4つのインスタンスにスケールしよう:

Terminal

docker compose up --scale web=4

これで1つのPostgreSQLデータベースを使用する4つのNginx Webサーバーのインスタンスができるよ。

8.3 スケーラブルなサービスの管理

サービスをスケーリングした後は、Docker Composeのコマンドを使ってインスタンスを管理できるよ。

実行中のコンテナの確認

実行中の全てのコンテナを確認するには、docker compose psコマンドを使おう:

ターミナル

docker compose ps

スケーラブルなサービスの停止と削除

サービスの全てのインスタンスを停止して削除するには、docker compose downコマンドを使おう:

ターミナル

docker compose down

ヒントとコツ:

  1. 負荷分散: 複数のサービスインスタンス間でトラフィックを分散するために、ロードバランサーを使おう。例えば、NginxHAProxyをこの目的で使えるよ。
  2. データの保存: スケーラブルなサービスが生成するデータが失われないように、それらをボリュームや外部ストレージに保存することを確認しよう。
  3. モニタリング: PrometheusGrafanaのようなモニタリングツールを使って、スケーラブルなサービスのパフォーマンスや状態を監視しよう。
  4. 自動スケーリング: KubernetesやDocker Swarmのようなオーケストレーターを使って、負荷に応じてサービスを自動的にスケーリングする方法を検討しよう。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION