Docker Machine で Swarm クラスタ構築¶
Docker Machine を使って Docker Swarm クラスタをプロビジョン(自動構築)できます。Docker Machine とは Docker のプロビジョニング・ツールです。Machine はホストをプロビジョンし、そこに Docker Engine をインストールし、Docker CLI クライアント用の設定を行います。Machine で Swarm 用のオプションを指定したら、プロビジョニングの過程で Swarm クラスタ用の設定も迅速に行えます。
このページでは、Machine で基本的な Swarm クラスタを構築するために必要なコマンドを紹介します。ローカルの Mac もしくは Windows 上に環境を構築します。流れを理解してしまえば、クラウド・プロバイダ上や、あるいは会社のデータセンタ内にも Swarm クラスタをセットアップできるようになるでしょう。
Swarm クラスタの構築が初めてであれば、まず Swarm について学び、 Swarm を検証環境で試すには や プロダクション用の Swarm クラスタ構築 を読んでおく必要があります。Machine を使うのが初めてであれば、 Machine を使う前に概要の理解 が望ましいでしょう。
何が必要ですか?¶
Mac OS X や Windows で Docker Toolbox を使ってインストールしていた場合は、既に Docker Machine がインストール済みです。インストールの必要があれば、 Mac OS X または Windows のページをご覧ください。
Machine を使ったインストールをサポートしているのは、AWS 、 Digital Ocean 、 Google Cloud Platform 、 IBM SoftLayer 、 Microsoft Azure 、 Hyper-V 、 OpenStack 、 RackSpace 、 VirtualBox 、 VMware Fusion 、vCloud Air 、 vSphere です。このページの例では VirtualBox 上で boot2docker.iso
イメージを使った仮想マシンをいくつか起動します。このイメージは Docker Engine を実行するための最小ディストリビューションです。
Toolbox をインストールしたら、 VirtualBox と必要に応じて boot2docker.iso
イメージが用意されます。また、Machine がサポートするあらゆるシステム上へプロビジョン可能です。
注釈
この例では Mac OS X もしくは Windows の利用を想定していますが、 Docker Machine は Linux システム上に直接インストール可能です 。
Swarm トークンをホスト上で生成¶
Swarm の設定を始める前に、Docker Engine の動くホストをプロビジョニングする必要があります。Machine をインストールしたホスト上のターミナルを開きます。それから local
という名称のホストをプロビジョニングするため、次のように実行します。
docker-machine create -d virtualbox local
この例では VirtualBox を指定していますが、DigitalOcean やデータセンタ内のホストでも簡単に作成できます。 local
の値はホスト名です。作成したら、自分のターミナル上で local
ホストと通信できるように、環境変数を指定します。
eval "$(docker-machine env local)"
各 Swarm ホストでは、 Engine の設定時にトークンも指定します。このトークンは Swarm ディスカバリ・バックエンドが Swarm クラスタの適切なノードであることを認識するために必要です。クラスタ用のトークンを作成するには、 swarm
イメージを実行します。
docker run swarm create
Unable to find image 'swarm' locally
1.1.0-rc2: Pulling from library/swarm
892cb307750a: Pull complete
fe3c9860e6d5: Pull complete
cc01ef3f1fbc: Pull complete
b7e14a9c9c72: Pull complete
3ec746117013: Pull complete
703cb7acfce6: Pull complete
d4f6bb678158: Pull complete
2ad500e1bf96: Pull complete
Digest: sha256:f02993cd1afd86b399f35dc7ca0240969e971c92b0232a8839cf17a37d6e7009
Status: Downloaded newer image for swarm
0de84fa62a1d9e9cc2156111f63ac31f
swarm create
コマンドの出力結果がクラスタ用のトークンです。このトークンを安全な場所にコピーして覚えておきます。このトークンは、Swarm ノードのプロビジョニング時や、そのノードをクラスタに追加する時のクラスタ ID として使います。トークンはこの後で環境変数 SWARM_CLUSTER_TOKEN
として参照します。
Swarm ノードのプロビジョン¶
クラスタの全てのノードは Engine をインストールしている必要があります。Machine で SWARM_CLUSTER_TOKEN
を使えば、Machine でコマンドを1つ実行するだけで、Engine のホストをプロビジョニングし、Swarm のノードとして設定された状態にします。新しい仮想マシンを Swarm マネージャ・ノードの swarm-manager
として作成します。
docker-machine create \
-d virtualbox \
--swarm \
--swarm-master \
--swarm-discovery token://SWARM_CLUSTER_TOKEN \
swarm-manager
次に追加用のノードをプロビジョニングします。ここでも SWARM_CLUSTER_TOKEN
を指定する必要があります。そして、各ホストには HOST_NODE_NAME
でユニークな名前を付ける必要があります。
docker-machine create \
-d virtualbox \
--swarm \
--swarm-discovery token://SWARM_CLUSTER_TOKEN \
HOST_NODE_NAME
例えば、 HOST_NODE_NAME
には node-01
のような名前を指定するでしょう。
注釈
ここまで実行したコマンドは Docker Hub が提供している Docker Swarm のホステッド・ディスカバリ・サービスに依存しています。もしも Docker Hub あるいはネットワークに問題があれば、これらのコマンド実行に失敗するでしょう。サービスが利用可能かどうか、 Docker Hub ステータス・ページ をご確認ください。Docker Hub で問題がある場合は復旧まで待つか、あるいは、別のディスカバリ・バックエンドの設定をご検討ください。
Machine でノード環境に接続¶
Machine 接続先のホストを環境変数で指定するには、 env
サブコマンドの利用が一般的です。
eval "$(docker-machine env local)"
Docker Machine には、 env
コマンドで Swarm ノードに接続するための、特別な --swarm
フラグがあります。
docker-machine env --swarm HOST_NODE_NAME
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.101:3376"
export DOCKER_CERT_PATH="/Users/mary/.docker/machine/machines/swarm-manager"
export DOCKER_MACHINE_NAME="swarm-manager"
# Run this command to configure your shell:
# eval $(docker-machine env --swarm HOST_NODE_NAME)
シェル上の操作を swarm-manager
という名称の Swarm ノードに切り替えるには、次のように実行します。
eval "$(docker-machine env --swarm swarm-manager)"
これで Docker CLI を使ってクラスタと相互に通信できるようになりました。
docker info
Containers: 2
Images: 1
Role: primary
Strategy: spread
Filters: health, port, dependency, affinity, constraint
Nodes: 1
swarm-manager: 192.168.99.101:2376
└ Status: Healthy
└ Containers: 2
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 1.021 GiB
└ Labels: executiondriver=native-0.2, kernelversion=4.1.13-boot2docker, operatingsystem=Boot2Docker 1.9.1 (TCL 6.4.1); master : cef800b - Fri Nov 20 19:33:59 UTC 2015, provider=virtualbox, storagedriver=aufs
CPUs: 1
Total Memory: 1.021 GiB
Name: swarm-manager