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ストレージフィールドタイプのクエリ効率についての簡単な理解

推薦する

ウェブページのカスタム選択ボックス選択

選択ドロップダウン リスト フォームは誰もがよく知っているかもしれませんが、デフォルトのドロップダウ...

Centos7でのSambaサーバー構成(実戦)

サンバの概要Samba は、Linux および UNIX システム上で SMB プロトコルを実装する...

MySQL データベース データのロード 複数の用途

目次MySQL Load Dataの多様な用途1. LOAD の基本的な背景2. 基本パラメータをロ...

HTML 順序なしリスト 箇条書き 画像を使用した CSS の記述

少なくとも 5 冊のベストセラー書籍の順序なしリストを含む HTML ページを作成します。各書籍の前...

Linux 環境変数の設定方法のまとめ (.bash_profile と .bashrc の違い)

Linux では、アプリケーションをダウンロードしてインストールすると、起動時にアプリケーション名...

nginx を使用した負荷分散モジュールの解釈

目次負荷分散に nginx を使用するための 2 つのモジュール:アップストリームはロードノードプー...

Nodejs エラー処理プロセス記録

この記事では、接続エラー ECONNREFUSED を例に、Node.js がエラーを処理するプロセ...

Maven モードで Tomcat ソースコードを実行する方法

序文最近、Tomcat の起動プロセスを分析していました。Tomcat のソース コードはアイデア次...

Ubuntu 20.04 ベスト設定ガイド (初心者向け)

1. システム構成1. sudoパスワードをオフにするsudo コマンドを使用するたびにパスワード...

TypeScript ジェネリックを簡単に説明する方法

目次概要ジェネリック医薬品とはビルドシステムジェネリック医薬品の一般的な理解ジェネリッククラスジェネ...

Linuxのファイル権限の詳細な紹介

Linux の優れた点は、マルチユーザー、マルチタスク システムにあります。 Linux では通常、...

JS が WeChat の「クソ爆弾」機能を実装

みなさんこんにちは、Qiufengです。最近、WeChatは新しい機能をリリースしました(WeCha...

高同時実行シナリオにおける nginx 最適化の詳細な説明

日常の運用・保守作業では、nginx サービスが頻繁に使用され、nginx の高同時実行性によって生...

Tomcatのデフォルトパスの設定によって発生するプロジェクトURLの競合を解決する方法の詳細な説明

序文Tomcat は優れた Java コンテナですが、避けられない小さな落とし穴もいくつかあります。...

Docker で nginx の https を設定する方法

https をサポートしていない Web サイトは、ブラウザによって徐々に安全でないとマークされるた...