8.1 コマンド docker compose scale
サービスのスケーリングとは、アプリの負荷を管理し、信頼性を確保するために、同じサービスを実行するコンテナのインスタンスの数を増減させるプロセスだよ。Docker Composeでは、サービスをスケーリングするために、古いバージョンではdocker compose scale
コマンドを、新しいバージョンでは--scale
パラメータを使うんだ。
スケーリングの基本コンセプト:
- スケーラビリティ: 現在の負荷に応じて簡単にサービスのインスタンス数を増やしたり減らしたりできる能力。
- 信頼性: 複数のインスタンスを実行することで、1つのインスタンスの障害が全体のサービス停止につながらないようにする方法。
- 負荷分散: 複数のサービスインスタンス間で負荷を分散してパフォーマンスを最適化すること。
docker compose scale
コマンドの使用
コマンドの構文:
docker compose scale SERVICE=NUM
ここで:
- SERVICE: スケーリングしたいサービスの名前。
- NUM: 実行する必要があるインスタンスの数。
使用例:
例えば、compose.yaml
ファイルにwebサービスの定義があると仮定するね。
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
そして、webサービスのインスタンスを3つ起動したい場合は、このコマンドを使うよ:
docker compose scale web=3
注意: docker compose scale
コマンドを実行する前に、docker compose up
コマンドでサービスを起動しておく必要があるよ。
新バージョンでの--scale
パラメータの使用
新しいバージョンでは、docker compose scale
コマンドが--scale
パラメータに置き換えられていて、up
コマンドと一緒に使うよ。
docker compose up --scale web=3
この方法の方がおすすめだよ。サービスを一緒に起動してスケーリングできるからね。
8.2 実用的な例
例 1: Webサーバーのスケール
compose.yaml
ファイルを作成しよう:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80-90:80"
サービスを起動して3つのインスタンスにスケールしよう:
docker compose up --scale web=3
これで80-90の範囲のポートで動作するNginx Webサーバーの3つのインスタンスができるよ。
重要!
サービスを複数のインスタンスにスケールする場合、ポートの範囲を指定する必要がある。例えば: "80-90:80"
。これでホストマシンに10個のポートの範囲が「予約」されるんだ。サービスのレプリカを追加すると、範囲内のポートが割り当てられるようになる。これをしないと、ポートがランダムに選択され、レプリカにアクセスできなくなることがあるんだよ。
例 2: データベースを伴うスケール
compose.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つのインスタンスにスケールしよう:
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
ヒントとコツ:
- 負荷分散: 複数のサービスインスタンス間でトラフィックを分散するために、ロードバランサーを使おう。例えば、NginxやHAProxyをこの目的で使えるよ。
- データの保存: スケーラブルなサービスが生成するデータが失われないように、それらをボリュームや外部ストレージに保存することを確認しよう。
- モニタリング: PrometheusやGrafanaのようなモニタリングツールを使って、スケーラブルなサービスのパフォーマンスや状態を監視しよう。
- 自動スケーリング: KubernetesやDocker Swarmのようなオーケストレーターを使って、負荷に応じてサービスを自動的にスケーリングする方法を検討しよう。
GO TO FULL VERSION