docker swarm leave コマンドを使ってノードを削除する方法

DockerDockerBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、docker swarm leave コマンドを使用して Docker Swarm 内のノードを管理する方法を学びます。まず、Docker Swarm を初期化し、ワーカーノードをそれに参加させます。その後、ワーカーノードを Swarm から削除する練習を行います。最後に、強制オプションの使用の必要性を含む、マネージャーノードを削除するプロセスを調査します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/SystemManagementGroup -.-> docker/info("Display System-Wide Information") docker/SystemManagementGroup -.-> docker/version("Show Docker Version") subgraph Lab Skills docker/ls -.-> lab-555243{{"docker swarm leave コマンドを使ってノードを削除する方法"}} docker/ps -.-> lab-555243{{"docker swarm leave コマンドを使ってノードを削除する方法"}} docker/info -.-> lab-555243{{"docker swarm leave コマンドを使ってノードを削除する方法"}} docker/version -.-> lab-555243{{"docker swarm leave コマンドを使ってノードを削除する方法"}} end

Docker Swarm の初期化

このステップでは、Docker Swarm を初期化する方法を学びます。Docker Swarm は、Swarm モードで実行されている Docker ホストのクラスターです。Swarm モードを使用すると、Docker ノードのクラスターを単一の仮想システムとして管理することができます。

Swarm を初期化する前に、LabEx VM にインストールされている現在の Docker バージョンを確認しましょう。

docker version

以下のような出力が表示され、Docker バージョンが 20.10.21 であることが示されます。

Client: Docker Engine - Community
 Version:           20.10.21
 API version:       1.41
 Go version:        go1.18.9
 Git commit:        baedd2a
 Built:             Tue Oct 25 17:58:10 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.21
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.18.9
  Git commit:       305620d
  Built:            Tue Oct 25 17:56:51 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.10
  GitCommit:        b4bd567ea6c98e7b5d78a23676a0a79559d930d5
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Docker Swarm を初期化するには、docker swarm init コマンドを使用します。このコマンドは、現在の Docker ホストを Swarm マネージャーに変換します。

docker swarm init

コマンドを実行した後、Swarm が初期化されたことを示す出力が表示され、他のノードをワーカーとして参加させるためのコマンドが提供されます。出力は次のようになります。

Swarm initialized: current node (xxxxxxxxxxxx) is now a manager.

To add a worker to this swarm, run the following command on the worker node:

    docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 172.17.0.2:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

出力には、現在のノードが Swarm マネージャーになったことが示されています。また、この Swarm にワーカーノードを参加させるためのコマンドも提供されています。このコマンドは次のステップで使用します。

docker info コマンドを使用して、Swarm の状態を確認することができます。

docker info

出力の "Swarm" セクションを探します。Swarm が "active" であることが示されているはずです。

...
 Swarm: active
  NodeID: xxxxxxxxxxxx
  Is Manager: true
  ClusterID: xxxxxxxxxxxx
  Managers: 1
  Nodes: 1
  Orchestration:
   TaskHistoryRetentionLimit: 5
  Raft:
   HeartbeatInterval: 100ms
   ElectionTimeout: 3s
   SnapshotInterval: 500ms
  Dispatcher:
   HeartbeatPeriod: 5s
  CA configuration:
   Expiry duration: 3 months
   Force rotate at: 7 weeks
  Root Rotation: false
  Local Node State: active
  Error: none
  Remote Manager:
   ID: xxxxxxxxxxxx
   Addr: 172.17.0.2:2377
   Addr: 172.17.0.2:2377
  Node Address: 172.17.0.2
  Manager Status:
   Cluster Address: 172.17.0.2:2377
   Leader: Yes
   Reachability: Reachable
...

これにより、このノードで Docker Swarm が正常に初期化されたことが確認されます。

ワーカーノードを Swarm に参加させる

前のステップでは、Docker Swarm を初期化し、出力にはワーカーノードを参加させるためのコマンドが表示されました。実際のシナリオでは、このコマンドを、Swarm にワーカーとして追加したい別のマシンで実行します。ただし、ここでは単一の LabEx VM を使用しているため、同じマシンで参加コマンドを実行することでワーカーノードの参加をシミュレートします。

まず、ワーカーノードの参加コマンドを取得しましょう。マネージャーノード(現在の VM)で docker swarm join-token worker を実行することで、参加トークンとコマンドを取得できます。

docker swarm join-token worker

出力は次のようになります。

To add a worker to this swarm, run the following command on the worker node:

    docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 172.17.0.2:2377

出力から docker swarm join --token ... の完全なコマンドをコピーします。このコマンドには、一意のトークンと Swarm マネージャーの IP アドレスとポートが含まれています。

次に、コピーしたコマンドを実行して、現在のノードをワーカーとして Swarm に参加させます。

docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 172.17.0.2:2377

トークンと IP アドレスを、docker swarm join-token worker コマンドから取得した値に置き換えます。

ノードがワーカーとして Swarm に参加したことを示す出力が表示されるはずです。

This node joined a swarm as a worker.

ノードが Swarm に参加したことを確認するには、マネージャーの視点から Swarm 内のノードを一覧表示できます。単一の VM がマネージャーとワーカーの両方の役割を果たしているため、docker node ls コマンドを使用できます。

docker node ls

出力には Swarm 内のノードが表示されます。同じノード ID に対して 2 つのエントリが表示され、1 つはステータスが "Ready" でロールが "Manager"、もう 1 つはステータスが "Ready" でロールが "Worker" となっているはずです。

ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
xxxxxxxxxxxx *                labex-vm            Ready               Active              Leader              20.10.21
xxxxxxxxxxxx                  labex-vm            Ready               Active                              20.10.21

これにより、ノードがワーカーとして Swarm に正常に参加したことが確認されます。

ワーカーノードから Swarm を脱退する

前のステップでは、ノードをワーカーとして Swarm に正常に参加させました。今回は、ノードを Swarm から削除する方法を学びます。ワーカーノードから Swarm を脱退するには、docker swarm leave コマンドを使用します。

現在のノードをワーカーとして Swarm から脱退させるには、次のコマンドを実行します。

docker swarm leave

ノードが Swarm を脱退したことを示す出力が表示されるはずです。

Node left the swarm.

次に、ノードが Swarm を脱退したことを確認しましょう。再び docker node ls コマンドを使用できます。ただし、ノードが Swarm を脱退しているため、このノードで docker node ls を実行するとエラーが発生します。なぜなら、このノードはもはや Swarm の一部ではないからです。

docker node ls

次のようなエラーメッセージが表示されます。

Error: This node is not a swarm manager. Use "docker swarm join" to join the swarm and try again.

このエラーにより、ノードがもはや Swarm の一部ではないことが確認されます。

さらに確認するために、docker info を使用して Swarm の状態を確認しましょう。

docker info

出力の "Swarm" セクションには、Swarm が "inactive" であることが示されているはずです。

...
 Swarm: inactive
...

これにより、ノードが Docker Swarm を正常に脱退したことが確認されます。

強制オプションを使用せずにマネージャーノードから Swarm を脱退しようとする

前のステップでは、ワーカーノードを Swarm から正常に削除しました。今回は、追加オプションを使用せずに同じ docker swarm leave コマンドを使ってマネージャーノードを Swarm から削除しようとした場合に何が起こるかを見てみましょう。

マネージャーノードから Swarm を脱退しようとするには、次のコマンドを実行します。

docker swarm leave

次のようなエラーメッセージが表示されます。

Error response from daemon: You are attempting to leave the swarm on a node that is participating as a manager. Use the --force flag to force the node to leave the swarm. Note that this may disrupt the swarm, so use this option with caution.

このエラーメッセージは、明示的に強制しない限り、マネージャーノードから単純に Swarm を脱退することはできないことを示しています。これは、特にマルチマネージャー構成において、Swarm の意図しない混乱を防ぐための安全機構です。

ノードがまだマネージャーであり、Swarm の一部であることを確認するには、docker info コマンドを使用できます。

docker info

"Swarm" セクションには、依然として "active" と "Is Manager: true" が表示されるはずです。

...
 Swarm: active
  NodeID: xxxxxxxxxxxx
  Is Manager: true
...

これにより、強制フラグを使用せずに Swarm を脱退しようとした試みは失敗し、ノードは依然として Swarm マネージャーであることが確認されます。

マネージャーノードを強制的に Swarm から脱退させる

前のステップでは、--force フラグを使用せずにマネージャーノードが Swarm を脱退できないことを学びました。これは、Swarm の意図しない混乱を防ぐためです。今回は、--force フラグを使用してマネージャーノードを Swarm から脱退させます。

重要な注意: マネージャーノードを強制的に Swarm から脱退させると、特に最後のマネージャーである場合、Swarm が混乱する可能性があります。本番環境ではこのコマンドを慎重に使用してください。

マネージャーノードを強制的に Swarm から脱退させるには、次のコマンドを実行します。

docker swarm leave --force

ノードが Swarm を脱退したことを示す出力が表示されるはずです。

Node left the swarm.

次に、ノードが正常に Swarm を脱退したことを確認しましょう。docker info コマンドを使用できます。

docker info

出力の "Swarm" セクションには、Swarm が "inactive" であることが示されているはずです。

...
 Swarm: inactive
...

これにより、--force フラグを使用してマネージャーノードが Docker Swarm を正常に脱退したことが確認されます。このノードでは Swarm はもう存在しません。

まとめ

この実験では、docker swarm init コマンドを使用して Docker Swarm を初期化する方法を学びました。このコマンドは、現在のノードをマネージャーとして指定し、他のノードが参加するためのコマンドを提供します。その後、新しく作成された Swarm にワーカーノードを参加させる練習を行いました。

続いて、docker swarm leave コマンドを使用してノードを Swarm から削除する方法を調べました。まずはワーカーノードが Swarm を脱退する方法を示しました。次に、強制オプションを使用せずに同じコマンドをマネージャーノードで試してみましたが、デフォルトでは許可されないことがわかりました。最後に、--force フラグを使用してマネージャーノードを強制的に Swarm から脱退させることに成功しました。