Docker Swarm を用いたマルチサービスアプリケーションのデプロイ方法

DockerBeginner
オンラインで実践に進む

はじめに

このチュートリアルでは、堅牢なコンテナオーケストレーションプラットフォームである Docker Swarm を使用して、マルチサービスアプリケーションをデプロイするプロセスを探索します。Docker Compose を使用してアプリケーションのサービスを定義し、その後、Docker Swarm スタックとしてシームレスにデプロイする方法を学び、スケーラビリティと高可用性を確保します。

Docker Swarm の理解

Docker Swarm は、Docker コンテナのためのネイティブなクラスタリングおよびオーケストレーションソリューションです。Docker ホストのグループを管理し、アプリケーションをそれら全体にデプロイすることで、高可用性とスケーラビリティを実現します。

Docker Swarm とは?

Docker Swarm は、Docker の組み込み機能であり、Docker ホストのクラスタ (Swarm) を作成および管理できます。Swarm では、複数の Docker ホスト (ノード) が単一の仮想 Docker ホストとして連携します。これにより、アプリケーションやサービスを Swarm 全体でデプロイでき、Docker がロードバランシング、スケーリング、フェールオーバーを処理します。

Docker Swarm の主要な概念

  • Swarm: 連携するように構成された Docker ホストのクラスタ。
  • ノード: Swarm の一部である単一の Docker ホスト。
  • サービス: アプリケーションまたはサービスが Swarm 全体でどのようにデプロイおよびスケーリングされるかを宣言的に定義する方法。
  • タスク: サービスの一部として実行されているコンテナの単一インスタンス。
  • オーバーレイネットワーク: Swarm 内のすべてのノードを接続する仮想ネットワークで、コンテナが相互に通信できるようにします。

Docker Swarm の利点

  • 高可用性: Docker Swarm は、サービスの健全性と可用性を自動的に管理し、失敗したタスクを再起動し、Swarm 全体で再配布します。
  • スケーラビリティ: リプリカ数を調整することで、サービスを簡単にスケールアップまたはスケールダウンできます。
  • ロードバランシング: Docker Swarm は組み込みのロードバランシングを提供し、サービスのタスク全体に受信リクエストを分散します。
  • シンプルさ: Docker Swarm は Docker のネイティブ機能であるため、コンテナ化されたアプリケーションの設定と管理が容易です。
graph TD A[Docker ホスト] --> B[Docker ホスト] B[Docker ホスト] --> C[Docker ホスト] C[Docker ホスト] --> A[Docker ホスト] A[Docker ホスト] -- Swarm --> B[Docker ホスト] B[Docker ホスト] -- Swarm --> C[Docker ホスト] C[Docker ホスト] -- Swarm --> A[Docker ホスト]

Docker Compose によるマルチサービスアプリケーションのデプロイ

Docker Compose は、マルチコンテナアプリケーションを定義および実行するためのツールです。複数のサービスから構成される複雑なアプリケーションをデプロイする必要がある場合に特に便利です。各サービスには独自の要件があります。

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:

この例では、webdb の 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 は自動的にそれら全体でトラフィックをロードバランシングします。

graph LR client[クライアント] --> load_balancer[ロードバランサー] load_balancer --> web1[Web サービス] load_balancer --> web2[Web サービス] load_balancer --> web3[Web サービス] web1 --> db[データベース サービス] web2 --> db web3 --> db

Docker Swarm スタックの管理とスケーリング

マルチサービスアプリケーションを 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 は自動的にそれら全体でトラフィックをロードバランシングします。

graph LR client[クライアント] --> load_balancer[ロードバランサー] load_balancer --> web1[Web サービス] load_balancer --> web2[Web サービス] load_balancer --> web3[Web サービス] load_balancer --> web4[Web サービス] load_balancer --> web5[Web サービス] web1 --> db[データベース サービス] web2 --> db web3 --> db web4 --> db web5 --> db

スタックの更新

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 を使用してアプリケーションのサービスを定義し、スケーラブルで堅牢なシステムとしてスタック全体をデプロイできるようになります。