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のためにポート2377、7946、および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という出力が得られるはずです。

次に、以下のコマンドを実行して、スワームデプロイメントでサービスによって使用されるポートを開きます。この場合、サービスのためにポート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
最後に、UFWを再読み込みし、以下のコマンドを実行してUFWのステータスを確認します。
sudo ufw reload
sudo ufw statusOpenSSHアプリケーションプロファイルと、UFWで有効になっているDocker Swarmのポート2377、7946、および4789が表示されるはずです。

Dockerリポジトリの追加
UFWの設定後、公式のDockerリポジトリをサーバーに追加する必要があります。Docker Engineをインストールするために公式のDockerリポジトリを使用します。
以下のコマンドを実行して、Ubuntuサーバーにいくつかの基本パッケージをインストールします。
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y
次に、以下のコマンドを実行して、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.gpgecho \
"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リポジトリが取得されるのが表示されるはずです。

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
インストールが完了したら、以下のsystemctlコマンドを実行してdockerサービスを確認し、サービスが実行中であることを確認します。
sudo systemctl is-enabled docker
sudo systemctl status docker以下の出力には、dockerサービスが実行中で有効であることが表示されるはずです。

(オプション):非ルートがDockerコンテナを実行できるようにする
Docker Swarmをデプロイし、非ルートユーザーを使用してコンテナを実行する場合は、ユーザーがdockerグループに追加される必要があります。これにより、ユーザーはdockerコマンドを実行し、コンテナを実行できるようになります。
以下のusermodコマンドを実行して、現在のユーザーをdockerグループに追加します。
sudo usermod -aG docker username今、非ルートユーザーとしてログインし、以下のdockerコマンドを実行して設定を確認します。
su - username
docker run hello-world設定が成功すれば、コンテナ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、マネージャーおよびノードのステータスの詳細が表示されるはずです。

最後に、以下のコマンドを実行して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-nginxtest-nginxサービスに関する詳細情報が表示されるはずです。

次に、以下のコマンドを使用してDocker Swarm内のDockerサービスのリストを確認します。
docker service ls
docker service ps test-nginx成功すれば、test-nginxサービスがNODEマネージャーで1つのレプリカとポート30001を公開して実行されているのが表示されるはずです。

最後に、以下のcurlコマンドを使用して、ホストIPアドレスのポート30001経由でtest-nginxサービスにアクセスします。
curl 192.168.5.30:30001
curl -I 192.168.5.30:30001index.htmlのソースコードページとHTTPヘッダーの詳細が表示されるはずです。

Docker Swarmでのサービスのスケーリング
Dockerサービスをデプロイしたので、次のタスクはDocker Swarmでサービスをスケーリングすることです。これにより、ワーカーノード全体にサービスの希望するレプリケーションが作成されます。
サービスをスケールするには、以下のdocker service scaleコマンドを実行します。この場合、test-nginxサービスを3つのレプリカにスケールします。
docker service scale test-nginx=3
次に、以下のコマンドを実行して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が表示されるはずです。


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上でアプリケーションやサービスをデプロイ、スケール、削除する方法を学びました。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。