Docker Swarmの概念と使用法の詳細な説明

Docker Swarmの概念と使用法の詳細な説明

Docker Swarm は、Docker によって開発されたコンテナ クラスター管理サービスです。バージョン 1.12.0 以降では、インストール後に Docker の一部 (バンドル ソフトウェア) となり、Swarm モードとも呼ばれ、追加のインストールは必要ありません。

Kubernetes と比較すると、Docker Swarm はシンプルなソフトウェアであり、物足りないようです。しかし、docker-compose との互換性がすべてを補います。クラスターの使用経験がない初心者の場合は、Docker Swarm から始めるのが良い選択です。

コンセプト

Docker Swarm には主に以下の概念が含まれます。

  • 群れ
  • ノード
  • スタック
  • サービス
  • タスク
  • 負荷分散

Swarm 自体は「グループ」、群衆、または群れを意味します。これは、Docker を使用して接続された後のコンピュータ クラスターの状態を指します。 docker swarm コマンドを使用すると、クラスターを作成、参加、離脱できます。

ノードはコンピュータノードであり、Docker ノードとも考えられます。ノードは、マネージャーとワーカーの 2 つのカテゴリに分かれています。 Swarm には少なくとも 1 つのマネージャーが必要であり、一部の管理コマンドはマネージャーでのみ使用できます。どちらのタイプのノードもサービスを実行できますが、実行コマンドを実行できるのはマネージャーだけです。たとえば、docker node コマンドを使用して、マネージャー内でのみノードを表示、構成、削除できます。

スタックは、docker-compose に似たサービスのグループです。デフォルトでは、スタックはネットワークを共有し、相互にアクセス可能ですが、他のスタック ネットワークからは分離されています。このコンセプトは、配置の便宜のためだけのものです。 docker stack コマンドを使用すると、サービスを 1 つずつ操作する代わりに、スタックを簡単に操作できます。

サービスはコンテナの一種です。ユーザーにとって、サービスは Swarm とのやり取りの中心的なコンテンツです。サービスには 2 つの実行モードがあります。1 つはレプリケート モードであり、サービスが実行するコンテナーの数を指定します。もう 1 つはグローバル モードであり、実行条件を満たすすべてのノードでこのタイプのコンテナーを実行します。 docker service コマンドは Swarm 内のサービスを操作できます。

タスクとは、Swarm 実行コマンドの最小単位であるコンテナを実行するタスクを指します。サービスを正常に実行するには、1 つ以上のタスク (サービスのコンテナーの数によって異なります) を実行して、各コンテナーが正常に起動されるようにする必要があります。通常、ユーザーはタスクではなくサービスを操作します。

負荷分散にはリバースプロキシも含まれます。 Swarm は Ingress ロード バランシングを使用します。つまり、各ノードの公開ポートへのアクセスはすべて、実際のサービスに自動的にプロキシされます。一般的な原理を下の図に示します。

複製モード

サービス: 
 いくつかのサービス: 
  ... 
  展開する: 
   モード: 複製 
   レプリカ: 3

デフォルトではモードは複製されるため、この行は省略できます。レプリカのデフォルトの数は 1 です。つまり、このサービスは 1 つのコンテナーのみを起動します。このモードでは、複数のサービスをオンデマンドで起動でき、Swarm が自動的に調整します。ノードが複数のコンテナを起動することもあります。

グローバルモード

サービス: 
 いくつかのサービス: 
  ... 
  展開する: 
   モード: グローバル 
   配置: 
    ...

デプロイ可能なすべてのノードに対して 1 つをデプロイします。配置により、条件を満たすノードを制限し、不適切なノードへの展開を回避できます。

操作する

よく使用される特定の操作の一部をここに示します。

最初のノードの作成

docker swarm init --advertise-addr $IP

$IP は、現在のノードの外部からアクセス可能な IP アドレスであり、他のノードがアドレス指定するのに便利です。

このようにして、マネージャー ノードが 1 つだけ含まれる Swarm が初期化されます。

Swarmに新しいノードを追加する

マネージャー ノードで次のコマンドを実行して、ノードに参加する方法を確認します。

$ docker swarm 参加トークンマネージャー 
この Swarm にマネージャーを追加するには、次のコマンドを実行します。 
  docker swarm に参加 --token SWMTKN-1-2zspelk468gb6wgw5adea4wlbw4kfy3q1uhr86zpafl9m5a3ho-ezs4fylj526e801b3cl0pojr5 10.174.28.52:2377 
$ docker swarm join-token ワーカー 
この Swarm にワーカーを追加するには、次のコマンドを実行します。 
  docker swarm に参加 --token SWMTKN-1-2zspelk468gb6wgw5adea4wlbw4kfy3q1uhr86zpafl9m5a3ho-164iqklrfv8o3t55g088hylyk 10.174.28.52:2377

どの Swarm にも参加していないマシンで、上記のコマンド docker swarm join --token ... を実行して、この Swarm のマネージャー ノードまたはワーカー ノードになります。

ノードラベルを設定する

マネージャー ノードでは、任意のノードにラベルを設定できます。

docker ノード更新 $node_name --label-add main=true

$node_name はノード ID または HOSTNAME を設定します。ラベルはキーと値のペアの形式です。main=true の場合、main がキーで、true が値です。

ラベルを設定した後、Compose ファイル内の配置の制約を使用して、使用可能なノードを制限できます。

サービス: 
 いくつかのサービス: 
  ... 
  展開する: 
   配置: 
    制約: 
     - node.labels.main == true 
   ...

上記の構成により、Label が main=true に設定されているノードでのみ some-service を使用できるようになります。

サービスの開始と停止

docker スタックをデプロイ $stack_name -c docker-compose.yaml -c other.yaml ...

$stack_name はスタック名です。 -c を使用して複数の docker-compose ファイルを指定したり、同じスタックの下に複数のファイルを一括でデプロイしたりできます。これらの YAML ファイルの記述は、次の固有の構成が追加され、Swarm シナリオでサポートされていない一部の構成が無視されることを除いて、基本的に元の docker-compose コマンドと同じです。

docker service create を使用して手動でスタックを作成するのではなく、docker-compose ファイルを使用してスタックをオーケストレーションすることをお勧めします。詳細な設定項目については、Compose ファイル バージョン 3 リファレンス | Docker ドキュメントを参照してください。

スタック内のすべてのサービスを停止するには、次のコマンドを実行します。

docker スタック rm $stack_name

実行中のサービスのイメージを更新する

docker サービス更新 --image $image:$tag $service_name

以上がDocker Swarmの概念と使い方の詳しい説明です。Docker Swarmの詳細については、123WORDPRESS.COMの他の関連記事にも注目してください。

以下もご興味があるかもしれません:
  • Docker Swarmを使用してWordPressを構築する方法
  • Docker Swarm を使用してサービスのローリング アップデートを実装するためのサンプル コード
  • デプロイから基本操作までDocker Swarm
  • docker swarm は指定されたノード上で指定されたコンテナをどのように実行しますか?
  • Docker Swarm のサービス検出と負荷分散の原則の詳細な説明
  • docker swarm クラスターの障害と例外の詳細な説明
  • Docker Swarmを使用してクラスターを構築する方法
  • Docker Swarm 入門例
  • Docker 1.12 を使用してマルチホスト Docker Swarm クラスターを構築する詳細な説明

<<:  Vueはツリー構造の追加、削除、変更、チェックのサンプルコードを実装します

>>:  MySQLストレージフィールドタイプのクエリ効率についての簡単な理解

推薦する

MySQL サーバー 5.7.20 のインストールと設定方法のグラフィック チュートリアル

この記事ではMySQL 5.7.20のインストールと設定方法を記録し、皆さんと共有します1. MyS...

Tomcat 実行時の JVM エンコーディングの問題を修正

質問:最近、プロジェクトを展開すると文字化けしたデータが出てきました。確認したところ、プロジェクトは...

And キーワードを使用した MySQL の複数条件クエリ ステートメント

AND キーワードを使用した MySQL 複数条件クエリ。MySQL では、AND キーワードを使用...

CSS で要素フローティングとクリアフローティングを実装する方法

フローティングの基礎標準ドキュメント フローでは、要素は塊級元素と行內元素の 2 種類に分けられます...

Linux でバックグラウンドで実行中のプログラムを表示して終了する方法

1. .shファイルを実行する./sh ファイルを使用して直接実行することもできますが、現在のターミ...

IEではボタンが両側に伸びる

ボタン (input, button) を記述すると、IE では次のようになります。単語数が増えると...

MySQLインデックスを正しく作成する方法

インデックス作成は大学図書館の書誌インデックスの構築に似ており、データ検索の効率を向上させ、データベ...

404エラーページを作成する際に注意すべき問題の簡単な分析

ウェブサイトを最適化するときは、エラー ページの使い方を学ぶ必要があります。たとえば、ウェブサイトに...

Tomcat9 のダウンロード、インストール、設定 + Eclipse への統合に関する詳細なチュートリアル

トムキャット公式サイトtomcatはローカルサーバーと同等であり、Webページを開くことができます設...

process.env.NODE_ENV 本番環境モードを設定する方法

始める前に、process.env.NODE_ENV にはデフォルトで開発と本番の 2 つの状態しか...

Docker ベースの ELK を素早く構築する方法

[概要] この記事では、自作の Docker プラットフォームをベースに完全な ELK システムを素...

Linux ブートシステム方式の分析

この記事では、Linux システムを起動する方法について説明します。ご参考までに、詳細は以下の通りで...

MYSQL から MARIADB へのプロジェクト移行に関するチュートリアル

データベース (MySQL) を準備します。すでに MySQL をお持ちの場合は、これを無視できます...

MySQLデータベースの基礎知識と操作のまとめ

この記事では、例を使用して、MySQL データベースの基本的な知識と操作について説明します。ご参考ま...

ウェブページコンテンツの閲覧設計手法に関する議論

<br />コンテンツ ページの記事の場合、記事が長すぎる場合やカテゴリ (ランキング)...