Docker Swarmクラスターにサービスをデプロイする方法 - TechRepublic

Docker Swarmクラスターにサービスをデプロイする方法 - TechRepublic

Docker Swarmは、最も簡単にデプロイできるコンテナクラスターの一つです。数分でクラスターを起動し、高可用性、フェイルオーバー、そしてスケーラビリティを実現できます。起動後は、Swarmにコンテナをデプロイしてクラスターのメリットを活用できます。例えば、あらゆる需要に対応できるスケールアウト可能なサービスをデプロイすることも可能です。

参照:知っておくべきオープンソースと Linux の用語 40 選 (TechRepublic Premium)

まさにそれをこれからお見せします。ここでは、まずDocker Swarmをインストールし、新しいクラスターにサービスをデプロイして、企業のニーズに合わせて拡張できるようにします。

必要なもの

デモでは、コントローラー1台とノード2台で構成されるクラスターを使用します。これらのクラスターはすべてUbuntu Server 20.04上で動作します。異なるLinuxディストリビューションをご利用の場合は、Dockerのインストール手順を変更する必要がある場合があります(それ以上の変更は必要ありません)。

ということで、群がってみましょう。

Dockerのインストール方法

まず最初にDockerをインストールする必要があります。コントローラーと、デプロイ予定のノードの数に応じて、同じ手順を実行してください。

サーバーにログインし、次のコマンドで apt を更新します。

sudo apt-get update

次に、次のコマンドで必要な依存関係をインストールします。

sudo apt-get install ca-certificates curl gnupg lsb-release -y

公式 Docker GPG キーを追加します。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

次のようにして Docker 安定リポジトリを追加します。

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Docker Engine を次のようにインストールします。

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io -y

次のコマンドで Docker を起動して有効にします。

sudo systemctl enable --now docker

次のコマンドを使用して、ユーザーを docker グループに追加します。

sudo usermod -aG docker $USER

次のようにして、システムに新しいグループを認識させます。

newgrp docker

すべてのノードに対して上記の手順を繰り返します。

Docker コントローラーに戻り、次のコマンドで swarm を初期化します。

docker swarm init --advertise-addr SERVER

ここで、SERVER は Docker コントローラーの IP アドレスです。

次に、次のような join コマンドが表示されます。

docker swarm join --token SWMTKN-1-46uxtlbe3wrelly1fe5e65p1wdvg95bcjo48izvptpwof62rdo-42yl4jprovhng56sgxmyv7arv 192.168.1.13:2377

このコマンドをコピーし、すべてのノードで実行してください。実行後、コントローラーで以下のコマンドを実行して参加を確認できます。

docker info

次のような出力が表示されます。

Swarm: active

NodeID: wb44efzwy68x9gek45ee1nbnb

Is Manager: true

ClusterID: vjec4hz1sjj535x9w0mspox87

Managers: 1

Nodes: 3

Default Address Pool: 10.0.0.0/8

SubnetSize: 24

Data Path Port: 4789

Orchestration:

Task History Retention Limit: 5

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

これで、Swarmにサービスをデプロイできます。まずはシンプルに、操作できないNGINXコンテナサービスをデプロイしてみましょう。これを行うには、コントローラーで以下のコマンドを実行します。

docker service create --name nginx_test nginx

サービスのステータスを確認するには、次のコマンドを発行します。

docker service ls

次のような出力で、NGINX サービスが複製されたことがわかります。

zie1n4nm5es3   nginx_test             replicated   1/1                nginx:latest

上記の例では、1つのノードのみを利用しています。このサービスを3つのノードすべてにデプロイしたい場合はどうすればよいでしょうか?その場合、コマンドは次のようになります。

docker service create --replicas 3 --name nginx3nodes nginx

次のコマンドを発行します。

docker service ls

次の出力で、nginx3nodes デプロイメントが 3 つのノードのうち 3 つに複製されたことがわかります。

y1yu8fq27aab   nginx3nodes              replicated   3/3                nginx:latest

このサービスは現在、クラスター内の3つのノードすべてを利用しています。以下のコマンドで、このサービスを2ノードにスケールダウンできます。

docker service scale nginx3nodes=2

次の方法でステータスを確認します:

docker service ls

これで、2/2 ノードに nginx サービスが表示されるはずです。

Swarmに5つのノードがあるとします。サービスを5つのノードすべてにスケールする場合、コマンドは以下のようになります。

docker service scale nginx3nodes=5

サービスを削除するには、次のコマンドを発行します。

docker service rm nginx3nodes

デプロイメント内のコンテナイメージを更新したいとします。最初のデプロイから数日が経過しており、利用可能な最新のコンテナイメージを使用していることを確認したいとします。nginx:latest が更新されたコンテナイメージであると仮定します。このサービスを新しいイメージで更新するには、次のコマンドを実行します。

docker service update --image nginx:latest nginx3nodes

最後に、群れをより簡単に管理したい場合は、次のコマンドを使用してコントローラーに Portainer を展開します。

docker run -d -p 8000:8000 -p 9443:9443 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce

デプロイが完了したら、http://SERVER:9443 にアクセスしてください(SERVER はサーバーのIPアドレスです)。管理者ユーザーを作成してログインすると、左側のナビゲーションに Swarm が表示されます。クリックしてクラスターを確認してください(図A)。

図A

Portainer 内から Swarm を管理します。
Portainer 内から Swarm を管理します。

これが、Docker Swarm を起動してノードにサービスをデプロイするための基本的な手順です。

Jack Wallen によるビジネス プロフェッショナル向けの最新のテクノロジー アドバイスをすべて知るには、YouTube でTechRepublic の How To Make Tech Work を購読してください。

Tagged: