サーチ…


前書き

スウォームは、 サービスを一括して展開する多くのDockerエンジン(またはノード )です。 Swarmは、多くの物理マシン、仮想マシン、またはクラウドマシンに処理を分散するために使用されます。

構文

備考

スウォームモードには、次の機能が実装されています。

  • Docker Engineと統合されたクラスタ管理
  • 分散設計
  • 宣言的サービスモデル
  • スケーリング
  • 希望の状態の調整
  • マルチホストネットワーキング
  • サービス発見
  • ロードバランシング
  • デフォルトで安全なデザイン
  • 更新プログラムの更新

Swarmに関するより多くの公式のDockerドキュメント: Swarmモードの概要


スターンモードCLIコマンド

ドキュメントのコマンドの説明をクリックしてください

群れを初期化する

docker swarm init [OPTIONS]

ノードおよび/またはマネージャとしてスウォームに参加する

docker swarm join [OPTIONS] HOST:PORT

新しいサービスを作成する

docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]

1つまたは複数のサービスに関する詳細情報を表示する

docker service inspect [OPTIONS] SERVICE [SERVICE...]

サービスの一覧表示

docker service ls [OPTIONS]

1つ以上のサービスを削除する

docker service rm SERVICE [SERVICE...]

1つまたは複数のレプリケートされたサービスのスケーリング

docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...]

1つ以上のサービスのタスクを一覧表示する

docker service ps [OPTIONS] SERVICE [SERVICE...]

サービスを更新する

docker service update [OPTIONS] SERVICE

docker-machineとVirtualBoxを使ってLinux上にswarmを作成する

# Create the nodes
# In a real world scenario we would use at least 3 managers to cover the fail of one manager.
docker-machine create -d virtualbox manager
docker-machine create -d virtualbox worker1

# Create the swarm
# It is possible to define a port for the *advertise-addr* and *listen-addr*, if none is defined the default port 2377 will be used.
docker-machine ssh manager \
    docker swarm init \
    --advertise-addr $(docker-machine ip manager)
    --listen-addr $(docker-machine ip manager)

# Extract the Tokens for joining the Swarm
# There are 2 different Tokens for joining the swarm.
MANAGER_TOKEN=$(docker-machine ssh manager docker swarm join-token manager --quiet)
WORKER_TOKEN=$(docker-machine ssh manager docker swarm join-token worker --quiet)


# Join a worker node with the worker token
docker-machine ssh worker1 \
    docker swarm join \
    --token $WORKER_TOKEN \
    --listen-addr $(docker-machine ip worker1) \
    $(docker-machine ip manager):2377



ワーカーとマネージャのジョイントークンを調べる

swarmに新しいノードのプロビジョニングを自動化するときは、swarmの正しい結合トークンとアドミニストレーターのアドバタイズされたアドレスを知る必要があります。これは、既存のマネージャノードのいずれかで次のコマンドを実行することで確認できます。

# grab the ipaddress:port of the manager (second last line minus the whitespace)
export MANAGER_ADDRESS=$(docker swarm join-token worker | tail -n 2 |  tr -d '[[:space:]]')

# grab the manager and worker token
export MANAGER_TOKEN=$(docker swarm join-token manager -q)
export WORKER_TOKEN=$(docker swarm join-token worker -q)

-qオプションは、トークンのみを出力します。このオプションがなければ、swarmに登録するための完全なコマンドが得られます。

次に、新たにプロビジョニングされたノードで、あなたはswarmを使って参加することができます。

docker swarm join --token $WORKER_TOKEN $MANAGER_ADDRESS

こんにちは世界のアプリケーション

通常は、サービスのスタックを作成して、複製されたオーケストレーションされたアプリケーションを作成したいと考えています。

典型的な最新のWebアプリケーションは、データベース、API、フロントエンド、およびリバースプロキシで構成されています。

永続性

データベースには永続性が必要なので、swarmのすべてのノードで共有されるファイルシステムが必要です。それは、NAS、NFSサーバー、GFS2または何か他のものにすることができます。それを設定することはここでは範囲外です。現在、Dockerには集団の永続性は含まれておらず、管理されていません。この例では、すべてのノードに/nfs/ sharedロケーションがマウントされていると想定しています。

ネットワーク

互いと通信できるようにするには、swarmのサービスが同じネットワーク上にある必要があります。

IP範囲(ここでは10.0.9.0/24 )とネットワーク名( hello-network )を選択し、コマンドを実行します。

docker network create \
  --driver overlay \
  --subnet 10.0.9.0/24 \
  --opt encrypted \
  hello-network

データベース

私たちが必要とする最初のサービスはデータベースです。例としてpostgresqlを使ってみましょう。 nfs/postgresデータベース用のフォルダを作成し、これを実行します:

docker service create --replicas 1 --name hello-db \
       --network hello-network -e PGDATA=/var/lib/postgresql/data \
       --mount type=bind,src=/nfs/postgres,dst=/var/lib/postgresql/data \
       kiasaki/alpine-postgres:9.5

--network hello-network--mountオプションを使用したことに注目してください。

API

APIの作成はこの例の範囲外です。したがって、 username/hello-api下にAPIイメージがあるとしましょう。

docker service create --replicas 1 --name hello-api \
       --network hello-network \
       -e NODE_ENV=production -e PORT=80 -e POSTGRESQL_HOST=hello-db \
       username/hello-api

データベースサービスの名前が渡されたことに注目してください。 Docker swarmにはラウンドロビンDNSサーバーが組み込まれているため、APIはDNS名を使用してデータベースに接続できます。

リバースプロキシ

私たちのAPIを外部世界に提供するためにnginxサービスを作成しましょう。共有場所にnginx設定ファイルを作成し、これを実行してください:

docker service create --replicas 1 --name hello-load-balancer \
       --network hello-network \
       --mount type=bind,src=/nfs/nginx/nginx.conf,dst=/etc/nginx/nginx.conf \
       -p 80:80 \
       nginx:1.10-alpine

ポートを公開するために-pオプションを使用したことに注目してください。このポートは、swarmの任意のノードで使用できます。

ノードの可用性

スウォームモードノード可用性:

  • アクティブとは、スケジューラがタスクをノードに割り当てることができることを意味します。
  • Pauseはスケジューラーが新しいタスクをノードに割り当てないが、既存のタスクは実行中のままであることを意味します。
  • ドレインはスケジューラが新しいタスクをノードに割り当てないことを意味します。スケジューラは、既存のタスクをすべてシャットダウンし、使用可能なノードでスケジューリングします。

モードの可用性を変更するには:

#Following commands can be used on swarm manager(s)
docker node update --availability drain node-1
#to verify:
docker node ls

スウォームノードの宣伝または降格

ノードまたはノードのセットをdocker node promoteは、マネージャノードからdocker node promoteを実行します。

docker node promote node-3 node-2

Node node-3 promoted to a manager in the swarm.
Node node-2 promoted to a manager in the swarm.

ノードまたはノードのセットをdocker node demoteは、マネージャノードからdocker node demoteを実行します。

docker node demote node-3 node-2

Manager node-3 demoted in the swarm.
Manager node-2 demoted in the swarm.

群を離れて

ワーカーノード:

#Run the following on the worker node to leave the swarm.

docker swarm leave
Node left the swarm.

ノードにManagerロールがある場合は、 マネージャの定足数を維持するための警告が表示されます。 --forceを使用すると、マネージャノードを終了することができます。

#Manager Node

docker swarm leave --force
Node left the swarm.

Swarmを離れたノードは、引き続きdocker node ls出力に表示されます。

リストからノードを削除するには:

docker node rm node-2

node-2


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow