Docker Swarm · 2 min read · Oct 05, 2025

Ubuntu 22.04にDocker Swarmをインストールする方法

Docker Swarmは、Docker Engineの上に構築されたコンテナオーケストレーションです。これにより、複数のサーバー上にDockerノードのクラスターを作成および展開できます。Docker Swarmは、コンテナ化されたアプリケーションのデプロイをサービスに簡素化します。コンテナを管理およびオーケストレーションするための最も簡単な方法を提供します。

Docker Swarmは、高レベルの利用可能なアプリケーションを提供します。Docker Swarmでは、複数のノードで単一のアプリケーションまたはサービスを実行できます。これらのノードは「ワーカーノード」と呼ばれます。また、「スワームマネージャー」と呼ばれるノードもあり、これはDocker Swarmの中央管理およびオーケストレーションを担当します。

このチュートリアルでは、Ubuntu 22.04サーバーにDocker Swarmソフトウェアをステップバイステップでインストールする方法を示します。

前提条件

このガイドを完了するには、以下のものを用意してください:

  • 3台のUbuntuサーバー22.04 - 1台はスワームマスター/マネージャーとして使用し、2台はワーカーノードとして使用します。
  • sudo管理者権限を持つ非ルートユーザー。

システムの設定

Dockerをインストールし、Docker Swarmを構成する前に、以下のタスクを完了してシステムを準備する必要があります:

  • Docker Swarmのためのポートを開く:すべてのサーバーでDocker Swarmによって使用されるいくつかのポートを開く必要があります。これはUFW(Uncomplicated Firewall)を使用して実現できます。
  • Dockerリポジトリの追加:すべてのサーバーにDocker Engineをインストールするために公式のDockerリポジトリを使用します。

Docker Swarmのためのポートを開く

次のセクションでは、SSHのためにポート22を開き、次にDocker Swarmのためにポート23777946、および4789をUFW(Uncomplicated Firewall)を介してスワームマスター/マネージャーおよびスワームノードで開きます。UFWはデフォルトでインストールされていますが、まだ開始されていません。

まず、以下のufwコマンドを実行してOpenSSHアプリケーションプロファイルを追加し、デフォルトのSSHポート22を開きます。次に、UFWを開始して有効にします。

sudo ufw allow OpenSSH  
sudo ufw enable

続行するにはyと入力し、Firewall is active and enabled on system startupという出力が得られるはずです。

enable ufw

次に、以下のコマンドを実行して、スワームデプロイメントでサービスによって使用されるポートを開きます。この場合、サービスのためにポート30000:35000を割り当てます。

sudo ufw allow 30000:35000/tcp

次に、Docker Swarmのためのポートを開くために以下のコマンドを実行します。

for ports in 2377/tcp 7946/tcp 7946/udp 4789/udp  
do  
sudo ufw allow $ports  
done

setup ufw

最後に、UFWを再読み込みし、以下のコマンドを実行してUFWのステータスを確認します。

sudo ufw reload  
sudo ufw status

OpenSSHアプリケーションプロファイルと、UFWで有効になっているDocker Swarmのポート2377、7946、および4789が表示されるはずです。

verify ufw

Dockerリポジトリの追加

UFWの設定後、公式のDockerリポジトリをサーバーに追加する必要があります。Docker Engineをインストールするために公式のDockerリポジトリを使用します。

以下のコマンドを実行して、Ubuntuサーバーにいくつかの基本パッケージをインストールします。

sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y

install basic deps

次に、以下のコマンドを実行して、Docker GPGキーとリポジトリをシステムに追加します。

sudo install -m 0755 -d /etc/apt/keyrings  
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg  
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \  
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \  
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \  
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

最後に、以下のコマンドを実行して各サーバーのUbuntuリポジトリを更新およびリフレッシュします。

sudo apt update

プロセス中にDockerリポジトリが取得されるのが表示されるはずです。

update repo

Docker Engineのインストール

Ubuntuシステムの準備が整ったら、これらのサーバーにDocker Engineをインストールします。

以下のコマンドを使用して、UbuntuシステムにDocker Engineをインストールします。インストールを確認するためにyを入力します。

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

install docker

インストールが完了したら、以下のsystemctlコマンドを実行してdockerサービスを確認し、サービスが実行中であることを確認します。

sudo systemctl is-enabled docker  
sudo systemctl status docker

以下の出力には、dockerサービスが実行中で有効であることが表示されるはずです。

check docker service

(オプション):非ルートがDockerコンテナを実行できるようにする

Docker Swarmをデプロイし、非ルートユーザーを使用してコンテナを実行する場合は、ユーザーがdockerグループに追加される必要があります。これにより、ユーザーはdockerコマンドを実行し、コンテナを実行できるようになります。

以下のusermodコマンドを実行して、現在のユーザーをdockerグループに追加します。

sudo usermod -aG docker username

今、非ルートユーザーとしてログインし、以下のdockerコマンドを実行して設定を確認します。

su - username  
docker run hello-world

設定が成功すれば、コンテナhello-worldを実行でき、以下の出力が得られるはずです。

docker hello-world

Docker Swarmの作成

Docker Engineをインストールしたので、Ubuntuサーバーを使用してDockerを作成および開始する準備が整いました。この例では、1台のサーバーをスワームマスター/マネージャーとして、2台のサーバーをワーカーノードとして使用します。

Docker Swarmを設定するために、以下のタスクを完了します:

  • マスター/マネージャーでスワームモードを初期化します。
  • ワーカーノードをDocker Swarmに追加します。

始めましょう。

マスター/マネージャーでのスワームモードの初期化

Docker Swarmを初期化するには、以下のdocker swarm initコマンドを実行します。追加のパラメータ–advertise-addrは、特定のIPアドレス内でDocker Swarmをバインドし、パラメータ–default-addr-poolは、Swarm上で実行されるコンテナの内部IPアドレスを決定します。

この例では、Docker SwarmモードはIPアドレス192.168.5.30にバインドされ、コンテナのIPアドレスプールは10.20.0.0/16です。

docker swarm init --advertise-addr 192.168.5.30 --default-addr-pool 10.20.0.0/16

初期化プロセスが成功すると、以下の出力が表示されます。出力内には、ノードをDocker Swarmに追加するための生成されたトークンが表示されます。

次に、以下のコマンドを実行してスワームモードのステータスを確認します。

docker info

スワームモードが有効になっている場合、出力にはSwarm: activeとNodeID、マネージャーおよびノードのステータスの詳細が表示されるはずです。

check swarm mode

最後に、以下のコマンドを実行してDocker Swarmのノードのリストを確認します。

docker node ls

この時点で、Docker Swarmには1つのノード(スワームマスター/マネージャー)のみが利用可能です。

ワーカーノードをDocker Swarmに追加

Docker Swarmが初期化されたので、ワーカーノードをDocker Swarmに追加できます。

まず、以下のコマンドを実行してワーカーノードのための生成されたトークンを表示します。

docker swarm join-token worker

ワーカーノードを追加するためのトークンを含む指示が表示されるはずです。

次に、ワーカーノードに移動し、以下のdocker swarm joinコマンドを実行してワーカーノードをDocker Swarmに追加します。

docker swarm join --token SWMTKN-1-0i6kbe2oek1iw19jfpvd2j5l0dhfmssz4w505aeihx7ouz8wqc-2dbk7cnmo12uunj53eywwnqr7 192.168.5.30:2377

プロセスが成功すると、’This node joined a swarm as a worker’という出力が画面に表示されます。

次に、スワームマスター/マネージャーに戻り、以下のコマンドを実行して利用可能なノードのリストを確認します。

docker node ls

すべてがうまくいけば、Docker Swarmには3台のサーバー(1台のスワームマネージャーと2台のワーカーノード)があり、ステータスはReady、可用性はrunningです。

Docker Swarmでのサービスの実行

この時点で、3台のUbuntuサーバーでDocker Swarmを正常に作成しました。次に、Docker Swarmにアプリケーションをデプロイする方法を学びます。これをサービスと呼びます。サービスはマイクロサービスアプリケーションのイメージであり、HTTPサーバー、データベースサーバー、または他のアプリケーションである可能性があります。

この例では、Nginxイメージを使用してシンプルなHTTPサービスをデプロイします。

以下のコマンドを実行して、Swarm上に新しいサービスを作成します。この例では、1つのレプリカを持つ新しいサービスtest-nginxを作成し、ポート30001を公開し、nginx:alpineイメージを基にします。

docker service create --replicas 1 --name test-nginx -p 30001:80 nginx:alpine

次に、以下のコマンドを使用してtest-nginxサービスの詳細を確認します。

docker service inspect test-nginx  
docker service inspect --pretty test-nginx

test-nginxサービスに関する詳細情報が表示されるはずです。

check service

次に、以下のコマンドを使用してDocker Swarm内のDockerサービスのリストを確認します。

docker service ls  
docker service ps test-nginx

成功すれば、test-nginxサービスがNODEマネージャーで1つのレプリカとポート30001を公開して実行されているのが表示されるはずです。

check service detail

最後に、以下のcurlコマンドを使用して、ホストIPアドレスのポート30001経由でtest-nginxサービスにアクセスします。

curl 192.168.5.30:30001  
curl -I 192.168.5.30:30001

index.htmlのソースコードページとHTTPヘッダーの詳細が表示されるはずです。

check nginx service

Docker Swarmでのサービスのスケーリング

Dockerサービスをデプロイしたので、次のタスクはDocker Swarmでサービスをスケーリングすることです。これにより、ワーカーノード全体にサービスの希望するレプリケーションが作成されます。

サービスをスケールするには、以下のdocker service scaleコマンドを実行します。この場合、test-nginxサービスを3つのレプリカにスケールします。

docker service scale test-nginx=3

scale service

次に、以下のコマンドを実行してtest-nginxサービスを確認します。test-nginxサービスがスケールされていれば、Dockerによって作成され、両方のワーカーノードで実行されている別の2つのサービスが表示されるはずです。

docker service ps test-nginx

ワーカーノードのターミナルに移動し、以下のコマンドを実行してtest-nginxサービスが実行されていることを確認します。

docker ps  
curl 192.168.5.31:30001

すべてがうまくいけば、各ワーカーノードで状態がUpのコンテナtest-nginx.RANDOM-STRINGが表示されるはずです。

check service worker1

check service worker2

Docker Swarmでのサービスの削除

環境をクリーンアップするために、Docker Swarmからtest-nginxサービスを削除し、nginx:alpine Dockerイメージを削除します。

test-nginxサービスを削除し、以下のコマンドを使用してDocker Swarmで利用可能なサービスのリストを確認します。

docker service rm test-nginx  
docker service ps

次に、nginx:alpineイメージを削除し、以下のコマンドを使用して各サーバーのダウンロードされたイメージのリストを確認します。

docker rmi nginx:alpine  
docker images

結論

まとめると、Ubuntu 22.04にDocker Swarmをステップバイステップで正常にインストールしました。3台のUbuntuサーバーでDocker Swarmをデプロイし、Docker Swarm上でアプリケーションやサービスをデプロイ、スケール、削除する方法を学びました。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。