はじめに
Docker Swarm は、大規模な Docker コンテナのデプロイと管理を可能にする強力なクラスタ管理およびオーケストレーションソリューションです。このチュートリアルでは、Docker Swarm のセットアップ方法、Swarm サービスの管理とスケーリング方法、そして Docker のコンテナオーケストレーション機能の全力を活用する方法を学習します。
Docker Swarm の理解
Docker Swarm とは?
Docker Swarm は、Docker コンテナのためのネイティブなクラスタリングおよびオーケストレーションツールです。Swarm と呼ばれる Docker エンジン群を管理し、その Swarm にサービスをデプロイできます。Docker Swarm では、Docker エンジンが単一の仮想 Docker ホストとして連携します。
Docker Swarm の主要な概念
ノード: ノードは、Swarm に参加する個々の Docker エンジンです。ノードには、マネージャーとワーカーの 2 種類があります。
- マネージャー: マネージャーは、Swarm の管理、タスクのスケジューリング、Swarm の所望の状態の維持、および Swarm のエントリポイントの提供を担当します。
- ワーカー: ワーカーは、Swarm 内の実コンテナの実行を担当します。
サービス: サービスは、アプリケーションの所望の状態を定義します。サービスは、単一のコンテナまたは連携するコンテナのグループにすることができます。
タスク: タスクは、Swarm 内のスケジューリングの原子単位です。各サービスはタスクに分割され、利用可能なノードに実行がスケジュールされます。
ロードバランシング: Docker Swarm は、サービスのための組み込みのロードバランシングを提供します。マネージャーノードは、自動的にワーカーノード間でタスクを分散し、高い可用性とスケーラビリティを確保します。
Docker Swarm の利点
ネイティブなオーケストレーション: Docker Swarm はネイティブなオーケストレーションツールであり、Docker エンジンに組み込まれており、追加のソフトウェアは必要ありません。
シンプルさ: Docker Swarm は比較的簡単にセットアップおよび管理でき、小規模から中規模のデプロイに適しています。
高い可用性: Docker Swarm は、自動タスクスケジューリングやロードバランシングなどの組み込みの高可用性機能を提供します。
スケーラビリティ: Docker Swarm は、必要に応じてノード数とコンテナ数を簡単にスケールアップまたはスケールダウンできます。
セキュリティ: Docker Swarm は、役割ベースのアクセス制御や暗号化された通信など、Docker エンジンと同じセキュリティ機能を使用します。
Docker Swarm の基本的な理解ができたところで、次のセクションである Docker Swarm の初期化に進みましょう。
Docker Swarm の初期化
ノードの準備
Docker Swarm を初期化する前に、Docker ホスト(ノード)一式を用意する必要があります。物理マシンまたは仮想マシンを使用できますが、Docker のバージョンは同じである必要があります。
Swarm の初期化
Docker Swarm を初期化するには、ノードの 1 つをマネージャーとして指定する必要があります。目的のノードで次のコマンドを実行します。
docker swarm init --advertise-addr <MANAGER-IP>
<MANAGER-IP> をマネージャーノードの IP アドレスに置き換えてください。
このコマンドを実行すると、ワーカーとして他のノードを Swarm に参加させるために使用できるトークンを受け取ります。目的のノードで次のコマンドを実行して、ノードをワーカーとして参加させることができます。
docker swarm join --token <TOKEN> <MANAGER-IP>:2377
<TOKEN> を docker swarm init コマンドから受け取ったトークンに、<MANAGER-IP> をマネージャーノードの IP アドレスに置き換えてください。
Swarm の確認
マネージャーノードで次のコマンドを実行して、Swarm の状態を確認できます。
docker node ls
これにより、Swarm 内のすべてのノードとその役割(マネージャーまたはワーカー)とステータスが表示されます。
Swarm のセキュリティ強化
デフォルトでは、Swarm 内のノード間の通信は Raft プロトコルを使用して暗号化されています。ただし、相互 Transport Layer Security (mTLS) 認証を有効にすることで、Swarm のセキュリティをさらに強化できます。
mTLS を有効にするには、必要な証明書を生成および配布する必要があります。マネージャーノードで docker swarm ca コマンドを使用してこれを実行できます。
docker swarm ca --rotate
このコマンドは、新しいルート証明書と中間証明書を生成し、Swarm 内のすべてのノードに配布します。
Docker Swarm を初期化したところで、次のセクションである「Swarm サービスの管理とスケーリング」に進みましょう。
Swarm サービスの管理とスケーリング
サービスのデプロイ
Docker Swarm にサービスをデプロイするには、docker service create コマンドを使用できます。たとえば、Nginx Web サーバーをデプロイするには、次のコマンドを実行できます。
docker service create --name nginx -p 80:80 nginx:latest
これにより、名前が "nginx" の新しいサービスが作成され、Swarm にデプロイされます。このサービスはホスト上のポート 80 を公開し、コンテナ内のポート 80 に転送します。
サービスのスケーリング
docker service scale コマンドを使用して、サービスのレプリカ(タスク)数をスケールできます。たとえば、"nginx" サービスを 5 つのレプリカにスケールするには、次を実行できます。
docker service scale nginx=5
これにより、"nginx" サービスの追加タスクが 4 つ作成され、マネージャーノードは利用可能なワーカーノードに自動的にスケジュールします。
サービスの更新
docker service update コマンドを使用して、サービスの構成を更新できます。たとえば、"nginx" サービスを別のイメージバージョンを使用するように更新するには、次を実行できます。
docker service update --image nginx:1.19 nginx
これにより、"nginx" サービスが "nginx:1.19" イメージを使用するように更新されます。
Swarm サービスの監視
docker service ls と docker service ps コマンドを使用して、Swarm サービスの状態を監視できます。docker service ls コマンドは、Swarm で実行中のすべてのサービスのリストを表示し、docker service ps コマンドはサービス内の各タスクの状態を表示します。
## すべてのサービスのリスト
docker service ls
## 特定のサービスのタスクのリスト
docker service ps nginx
ノードのドレイン
ノードでメンテナンスを行う必要がある場合は、そのノードを「ドレイン」できます。これにより、マネージャーは、そのノードで実行されているタスクを他の利用可能なノードに再スケジュールします。docker node update コマンドを使用してこれを実行できます。
docker node update --availability drain <NODE-ID>
<NODE-ID> をドレインするノードの ID に置き換えてください。
これで、Docker Swarm サービスの管理とスケーリングの基本について説明しました。この知識があれば、Docker Swarm 上でアプリケーションをデプロイ、スケール、および維持できるはずです。
まとめ
このチュートリアルを終了すると、Docker Swarm の概要と、Swarm のセットアップ、Swarm サービスの管理、コンテナ化されたアプリケーションの容易なスケーリング方法をしっかりと理解しているはずです。Docker Swarm の力を活用して、コンテナのデプロイと管理プロセスを効率化し、アプリケーションの高可用性とスケーラビリティを確保します。



