logologo
Docker Swarmとは?開発終了?特徴から導入手順まで解説
thumb_dockerswarm_01

Docker Swarmとは?開発終了?特徴から導入手順まで解説

アンドエンジニア編集部
2024.05.12
この記事でわかること
Docker Swarmとは、Dockerが開発したコンテナのオーケストレーションツールを指します
Docker Engine 1.12以降に組み込まれたSwarmモードは、追加ソフトウェアなしに利用できます
クラスタリングの管理に必要な機能が提供されており、簡単に始められるメリットがあります

Docker Swarmとは

img_dockerswarm_01

Docker Swarmとは、Dockerが開発したツールで、コンテナのオーケストレーションツールを指します。2014年にDocker向けオーケストレーションのプロジェクトとして発足し、Dockerコンテナにネイティブなクラスタリング機能を提供します。

Docker Swarmは、Dockerエンジンのグループを単一の仮想Dockerエンジンとして扱うもので、その役割は現在Swarmモードが担っています。

【参考】:Docker 【参考】:Docker Docs: Docker Swarm 概要

Swarmモードの概要

当初のDocker Swarmは開発を終了し、Docker Engineに統合されたSwarmモードがクラスタ管理を行います。SwarmkitをDocker Engineに組み込んでクラスターマネジメントを可能にしたものです。

ここで言うクラスタとは、コンテナ化されたノードの集合体を指し、アプリケーションの可用性と負荷分散などに対応します。

Swarmモードは、Docker Engine 1.12以降で組み込まれており、Docker Swarm CLI(コマンドラインインターフェース)で、Swarmコンテナを実行したり、ディスカバリトークンを作成したり、クラスタ内のノードを一覧表示したりします。

Swarmのノードの一覧表示や更新、Swarmからノードの削除など、クラスターマネジメントを行います。

【参考】:Docker Docs: Swarm モード概要

エンジニア初心者でも分かる!Dockerコンテナの超入門!

「Classic Swarm」とは

当初のDocker Swarmは役割を終えて開発終了されたことによって、「Classic Swarm」として記録が残されています。しかしながら、GitHubにおける「Classic Swarm」の情報掲載は2021年2月を持って更新を終了し、「Public Archive」として情報参照のみを提供しています。

Docker Docsには引き続き、従来のDocker Swarmの情報も掲載されています。

【参考】:Classic Swarm: a Docker-native clustering system 【参考】:SwarmKit 【参考】:Understanding Difference between Docker Swarm(Classic), Swarm Mode & SwarmKit

Swarmモードの特徴と機能

SwarmモードはDocker Engineに統合されており、オーケストレーションツールを別途用意する必要がありません。分散設計がされておりスケーリングや負荷分散に対応します。ローリングアップデートなど、クラスターマネジメントで必要な機能を提供します。

ノードは、マネージャーノードとワーカーノードに分類され、オーケストレーション・タスクを管理・実行します。初期設定では、マネージャーノードはワーカーノードを兼ねますので、1台でもSwarmを利用することができます。

【参考】:Docker Docs: Swarm モード概要 【参考】:Docker Docs: Swarm モードの重要な概念

KubernetesとSwarmの違い

Kubernetesは、Googleが開発したコンテナプラットフォームでオーケストレーション機能を提供します。自社のコンテナ管理の目的で開発されました。そのため、より大規模なシステム構成で複雑なワークロードに対応します。KubernetesとSwarmの違いは、ともにコンテナオーケストレーション・ソフトウェアという点では変わりません。

しかしながら、Kubernetesが大規模なクラスタリング向けなのに対してDocker Swarmは、マイクロサービス・アーキテクチャに力点を置いたもので、ロード・バランシング、サービス・ディスカバリーなどをサポートするものの、比較的小規模な構成に適している点に違いがあります。

【参考】:Kubernetes

コンテナ化を楽に!KubernetesとDockerの違いを解説

Docker ComposeとSwarmの違い

Docker Composeは、複数のコンテナを定義し実行するためのツールです。Dockerアプリケーションのサービスを設定し、まとめてコンテナを起動するなどの手続きを設定します。

Docker ComposeとSwarmの違いは、設定の対象に違いがあります。起動するサービスを自動化する際にはDocker Composeを用い、コンテナ全体をまとめて管理し、フェイルオーバーやスケーリングするなどの場合はSwarmモードを用いる点が異なります。

【参考】:Docker Docs: Docker Compose 概要 【参考】:Docker Docs: Swarm モードの重要な概念

Docker Composeとは?インストール方法やDockerとの違いも解説!

Docker Swarmを導入する

img_dockerswarm_02

ここでは、Swarmモードの導入の流れについて解説していきます。セットアップするには、Docker Engine 1.12以降が必要です。1台のノードの場合でも、Swarmの初期化、サービスの作成やスケールが可能です。

ただし、マルチノードのコマンドを確認するには、マネージャーノード1台、ワーカーノード2台を用意します。

Swarmでは、必要なネットワークの通信ポートとしてTCPポート2377、TCP/UDPポート7946、UDPポート4789を使用します。必要に応じて、 ”docker network” コマンドでネットワーク設定を確認することができます。

【参考】:Docker Docs: Docker Swarm 導入チュートリアル 【参考】:Docker Docs: swarm モード導入ガイド 【参考】:Docker Docs: swarm モード・ルーティング・メッシュを使う 【参考】:Docker Docs: Docker CLI docker network

Swarmを有効化する

Swarmを有効化するには、Docker EngineがサポートするLinux環境を用意し、Docker Engineをインストールします。Docker Engineのデーモンが起動したら、マネージャーノードで、”docker swarm init”コマンドを実行します。

Swarmが起動したら、 ”docker info” に ”Swarm: Active” と表示され、Swarmクラスタが作成されます。

【参考】:Docker Docs: Docker のインストール 【参考】:Docker Docs: swarm (クラスタ)の作成

Swarmにノードを追加する

マネージャーノードでSwarmクラスタが作成されたら、ワーカーノードを追加します。

追加するには、 ”docker swarm join” コマンドを使用します。このコマンドはワーカーノードの台数分繰り返します。ノードの追加が完了すると、マネージャーノードから ”docker node ls” で確認することができます。

登録したノードは、 ”docker swarm leave” でクラスタから削除(離脱)することもできます。

【参考】:Docker Docs: swarm に他のノードを追加

Swarmにサービスをデプロイする

Swarmにサービスをデプロイするには、“docker service create”コマンドを使用します。実行中のサービスは、 ”docker service ls” で確認できます。サービスIDが分かったら、 ”docker service inspect --pretty サービスID” で詳細情報を得ることができます。

サービスの実行ノードを確認するには、 ”docker service ps サービスID” コマンドを使用します。

サービスをスケーリングする際には、サービスIDを確認後に ”docker service scale サービスID=タスク数” コマンドで、実行コンテナの数(=タスク数)を変更することができます。

【参考】:Docker Docs: swarm にサービスをデプロイ 【参考】:Docker Docs: swarm 上のサービスを調べる 【参考】:Docker Docs: swarm でサービスをスケール

デプロイとは?ビルド・リリースとの違いについてもわかりやすく解説

Swarmの実行サービスを停止する

Swarmでは、不要なサービスを削除することができます。Swarmの実行サービスを停止するには、 ”docker service rm サービスID” コマンドを実行します。実行結果を確認するには、 ”docker service inspect サービスID” コマンドを用います。

【参考】:Docker Docs: swarm で実行中のサービスを削除

Swarmからノードを無効化する

ワーカーノードを、クラスタ環境でサービスデプロイから外す場合は無効化を行います。 ”docker node update --availability drain ノードID” コマンドで無効化することができます。再度有効化する場合は、”docker node update --availability active ノードID”を実行し、有効化します。

【参考】:Docker Docs: swarm からノードをドレイン(解放)

Docker Swarmは手軽に始められます

img_dockerswarm_03

Swarmは、Docker Engineに統合されていますので、クラスタリングソフトウェアを追加導入することなしに使えます。小規模なクラスタリング用途には十分な機能を提供していますので、ちょっと試してみたい場合などは、Swarmが手軽でおすすめです。

気になる人のXをフォローしよう!
公式LINE
公式YouTube
マイナビITエージェント

編集部オススメコンテンツ

thumb_gptowten_01
ChatGPTの面白い使い方15選!ビジネスや遊び相手になる事例
アンドエンジニア編集部
2024.02.19

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供

カテゴリー

編集部おすすめコンテンツ

アンドエンジニアへの取材依頼、情報提供などはこちらから

logologo
Powered by マイナビ AGENT