はじめに
このチュートリアルでは、ワーカーノードを Docker Swarm クラスターに参加させる手順を案内します。この記事の最後まで読むと、Docker Swarm 環境のセットアップと管理方法、およびコンテナ化されたアプリケーションをスケールするために新しいノードをクラスターにシームレスに追加する方法を理解できるようになります。
Docker Swarm 入門
Docker Swarm は、Docker コンテナ用のネイティブなクラスタリングおよびオーケストレーションソリューションです。これにより、複数の Docker ホストを管理し、それらにアプリケーションをデプロイすることができ、高可用性、ロードバランシング、およびスケーラビリティを提供します。
Docker Swarm とは?
Docker Swarm は Docker Engine に組み込まれた機能で、複数の Docker ホストを 1 つの仮想的な Docker ホストにクラスタリングすることができます。これにより、複数のホストにまたがってコンテナ化されたアプリケーションを管理およびスケールすることができ、障害許容性と高可用性を提供します。
Docker Swarm の主要概念
- Swarm(クラスター): Swarm は、Docker Engine を実行し、クラスターを形成するために結合された Docker ホスト(物理または仮想)のグループです。
- Node(ノード): Node は、Swarm の一部である単一の Docker ホストです。ノードは、Manager(マネージャー)または Worker(ワーカー)のいずれかになります。
- Manager Node(マネージャーノード): マネージャーノードは、Swarm の状態を管理し、タスクをスケジュールし、クラスターの望ましい状態を維持する役割を担います。
- Worker Node(ワーカーノード): ワーカーノードは、マネージャーノードからの指示に従って実際のコンテナを実行する役割を担います。
- Service(サービス): サービスは、アプリケーションを Swarm 全体にどのようにデプロイし、スケールするかを宣言的に定義する方法です。
graph TD
A[Docker Host] --> B[Docker Host]
B[Docker Host] --> C[Docker Host]
C[Docker Host] --> D[Docker Host]
D[Docker Host] --> A[Docker Host]
A --- E[Manager Node]
B --- F[Worker Node]
C --- G[Worker Node]
D --- H[Worker Node]
Docker Swarm の利点
- 高可用性: Docker Swarm は自動的なロードバランシングとフェイルオーバーを提供し、アプリケーションが高可用性を維持することを保証します。
- スケーラビリティ: Swarm にノードを追加または削除することで、アプリケーションを簡単にスケールアップまたはスケールダウンすることができます。
- 簡単さ: Docker Swarm は Docker Engine に組み込まれた機能であるため、セットアップと管理が簡単です。
- 統合性: Docker Swarm は、Docker Compose や Docker Registry などの他の Docker ツールやサービスとシームレスに統合されます。
Docker Swarm クラスターのセットアップ
前提条件
Docker Swarm クラスターをセットアップする前に、以下の条件を満たしていることを確認してください。
- Docker Engine がインストールされた少なくとも 2 つの Ubuntu 22.04 ホスト(物理または仮想)。
- ホストへの SSH アクセス。
手順 1: Swarm の初期化
いずれかのホストで、以下のコマンドを実行して Swarm を初期化します。
docker swarm init --advertise-addr <HOST_IP_ADDRESS>
<HOST_IP_ADDRESS> をホストの IP アドレスに置き換えてください。
このコマンドの出力には、他のノードを Swarm に追加するために使用するジョイントークンが含まれます。
手順 2: ワーカーノードを Swarm に追加する
他のホストで、前の手順で出力されたコマンドを実行して、ワーカーノードとして Swarm に参加させます。
docker swarm join --token <TOKEN> <HOST_IP_ADDRESS>:2377
<TOKEN> を Swarm 初期化時に出力されたトークンに、<HOST_IP_ADDRESS> をマネージャーノードの IP アドレスに置き換えてください。
手順 3: Swarm の確認
マネージャーノードで以下のコマンドを実行して、Swarm 内のノードを表示します。
docker node ls
出力にはマネージャーノードとワーカーノードが表示されるはずです。
手順 4: サービスのデプロイ
Swarm のセットアップをテストするために、簡単なサービスをデプロイします。
docker service create --name nginx --publish 80:80 nginx
これにより、"nginx" という名前のサービスが作成され、Swarm 全体にデプロイされます。
graph TD
A[Manager Node] --> B[Worker Node]
B[Worker Node] --> C[Worker Node]
C[Worker Node] --> A[Manager Node]
A -- "docker swarm init" --> D[Swarm]
B -- "docker swarm join" --> D[Swarm]
C -- "docker swarm join" --> D[Swarm]
D -- "docker service create" --> E[Nginx Service]
ワーカーノードを Swarm に参加させる
前提条件
ワーカーノードを Swarm に参加させる前に、以下の条件を満たしていることを確認してください。
- 少なくとも 1 つのマネージャーノードを持つ稼働中の Docker Swarm クラスター。
- ワーカーノードとして参加させたいホストへの SSH アクセス。
手順 1: 参加コマンドを取得する
マネージャーノードで、以下のコマンドを実行してワーカーノード用の参加コマンドを取得します。
docker swarm join-token worker
これにより、以下のようなコマンドが出力されます。
docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s7p15g43pits9-8y0wywnrwwt7a4vox4vx9v68r 192.168.0.16:2377
手順 2: ワーカーノードとして Swarm に参加する
ワーカーノードとして参加させたいホストで、前の手順で取得したコマンドを実行します。
docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s7p15g43pits9-8y0wywnrwwt7a4vox4vx9v68r 192.168.0.16:2377
これにより、ホストがワーカーノードとして Swarm に参加します。
手順 3: ノードが Swarm に参加したことを確認する
マネージャーノードで、以下のコマンドを実行して Swarm 内のノードを一覧表示します。
docker node ls
出力に新しいワーカーノードが表示されるはずです。
graph TD
A[Manager Node] --> B[Worker Node]
B[Worker Node] --> C[Worker Node]
C[Worker Node] --> A[Manager Node]
A -- "docker swarm join-token worker" --> D[Join Command]
B -- "docker swarm join" --> A[Manager Node]
これらの手順に従うことで、新しいワーカーノードを Docker Swarm クラスターに簡単に参加させることができ、コンテナ化されたアプリケーションの容量と耐性を拡張することができます。
まとめ
この Docker チュートリアルでは、Docker Swarm クラスターのセットアップ方法と、ワーカーノードをそれに参加させる方法を学びました。Swarm に新しいノードを追加することで、Docker ベースのアプリケーションを簡単にスケールし、高可用性の分散環境を構築することができます。このガイドから得た知識を活かして、拡大するビジネスニーズに対応するために、自信を持って Docker Swarm インフラストラクチャを管理および拡張することができます。



