はじめに
このチュートリアルでは、堅牢なコンテナオーケストレーションプラットフォームである Docker Swarm を使用して、マルチサービスアプリケーションをデプロイするプロセスを探索します。Docker Compose を使用してアプリケーションのサービスを定義し、その後、Docker Swarm スタックとしてシームレスにデプロイする方法を学び、スケーラビリティと高可用性を確保します。
このチュートリアルでは、堅牢なコンテナオーケストレーションプラットフォームである Docker Swarm を使用して、マルチサービスアプリケーションをデプロイするプロセスを探索します。Docker Compose を使用してアプリケーションのサービスを定義し、その後、Docker Swarm スタックとしてシームレスにデプロイする方法を学び、スケーラビリティと高可用性を確保します。
Docker Swarm は、Docker コンテナのためのネイティブなクラスタリングおよびオーケストレーションソリューションです。Docker ホストのグループを管理し、アプリケーションをそれら全体にデプロイすることで、高可用性とスケーラビリティを実現します。
Docker Swarm は、Docker の組み込み機能であり、Docker ホストのクラスタ (Swarm) を作成および管理できます。Swarm では、複数の Docker ホスト (ノード) が単一の仮想 Docker ホストとして連携します。これにより、アプリケーションやサービスを Swarm 全体でデプロイでき、Docker がロードバランシング、スケーリング、フェールオーバーを処理します。
Docker Compose は、マルチコンテナアプリケーションを定義および実行するためのツールです。複数のサービスから構成される複雑なアプリケーションをデプロイする必要がある場合に特に便利です。各サービスには独自の要件があります。
Docker Compose でマルチサービスアプリケーションをデプロイするには、サービス、その構成、およびそれらがどのように接続されるかを定義する docker-compose.yml ファイルを作成する必要があります。以下に例を示します。
version: "3"
services:
web:
image: labex/web-app:v1
ports:
- "80:8080"
depends_on:
- db
db:
image: labex/database:v1
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
この例では、web と db の 2 つのサービスがあります。web サービスは labex/web-app:v1 イメージを使用し、ホストのポート 80 でポート 8080 を公開します。また、db サービスに依存しています。db サービスは labex/database:v1 イメージを使用し、データベースデータ用のボリュームをマウントします。
アプリケーションをデプロイするには、以下のコマンドを使用できます。
## 必要に応じてイメージをビルドする
docker-compose build
## アプリケーションをデプロイする
docker-compose up -d
docker-compose up -d コマンドは、すべてのサービスをバックグラウンドで開始します。
Docker Compose を使用すると、サービスを簡単にスケーリングできるという利点があります。たとえば、web サービスを 3 つのレプリカにスケールするには、次のように実行できます。
docker-compose scale web=3
これにより、web サービスのインスタンスが 2 つ追加され、Docker Compose は自動的にそれら全体でトラフィックをロードバランシングします。
マルチサービスアプリケーションを Docker Swarm スタックとしてデプロイしたら、さまざまなコマンドを使用して管理およびスケーリングできます。
アプリケーションを Docker Swarm スタックとしてデプロイするには、docker stack deploy コマンドを使用できます。
docker stack deploy -c docker-compose.yml my-app
これにより、docker-compose.yml ファイルの構成に基づいて Swarm サービスが作成されます。
Swarm スタックの状態を監視するには、以下のコマンドを使用できます。
## 実行中のサービスの一覧表示
docker stack services my-app
## サービスのタスク (コンテナインスタンス) の一覧表示
docker service ps my-app_web
## サービスのログの表示
docker service logs my-app_web
Swarm スタック内のサービスをスケーリングするには、docker service scale コマンドを使用できます。
## "web" サービスを 5 つのレプリカにスケーリング
docker service scale my-app_web=5
これにより、web サービスのインスタンスが 4 つ追加され、Docker Swarm は自動的にそれら全体でトラフィックをロードバランシングします。
Swarm スタックを新しいバージョンのサービスで更新するには、docker service update コマンドを使用できます。
## "web" サービスを新しいイメージを使用するように更新
docker service update my-app_web --image labex/web-app:v2
これにより、web サービスがロールアップ更新され、古いコンテナが新しいコンテナに置き換えられます。サービスの中断はありません。
これらのコマンドを使用することで、Docker Swarm スタックを効果的に管理およびスケーリングし、マルチサービスアプリケーションの高可用性とパフォーマンスを確保できます。
このチュートリアルを終了すると、Docker Swarm と、それを用いてマルチサービスアプリケーションをデプロイおよび管理する方法について、しっかりとした理解が得られます。Docker Swarm クラスタを設定し、Docker Compose を使用してアプリケーションのサービスを定義し、スケーラブルで堅牢なシステムとしてスタック全体をデプロイできるようになります。