第31回 Docker Swarmクラスタのオーバレイネットワークを構築する方法古賀政純の「攻めのITのためのDocker塾」(4/7 ページ)

» 2016年11月02日 08時00分 公開

「docker run」ではなくて「docker service」

 Swarmクラスタに独自のオーバレイネットワーク「mynet01」が作成されました。今度は、このオーバレイネットワーク「mynet01」で通信できるコンテナを稼働させてみましょう。今回は、ワーカノードn0122において、Dockerイメージ「larsks/thttpd」使ってDockerコンテナtest01を稼働させます。Dockerイメージ「larsks/thttpd」は、Webサーバが内蔵されており、コマンドラインでWebサーバの稼働状況を簡易的に確認するのに有用です。以下のコマンドをSwarmマネージャノードで入力し、コンテナを起動します。


n0121 # docker service create \
--name test01 \ ←コンテナ名
--constraint 'node.hostname == n0122' \ ←ワーカノード「n0122」でコンテナを起動
--network mynet01 \ ←コンテナはオーバレイネットワーク「mynet01」に所属させる
larsks/thttpd ←Webサーバ入りのDockerイメージを指定

 ここで、Dockerコンテナを実行する「docker run」ではなく、なにやら見慣れない「docker service」というコマンドが登場してきました。連載第27回までは、Dockerコンテナを実行する際に「docker run」を使用していましたが、今回は、「docker run」ではなく「docker service」を使ってコンテナを起動しています。

 実は、Docker 1.12から「Swarmモード」と呼ばれる新たな機能が搭載されており、Swarmクラスタに所属するワーカノードでコンテナを実行する場合、コンテナをSwarmクラスタのアプリケーションの実行単位である「サービス(service)」として管理する必要があります。コンテナ実行時は、「docker run」ではなく、「docker service」を使うことで、コンテナをSwarmクラスタの管理下に置くことができます。Swarmクラスタ管理下のサービスとして登録されたコンテナは、Swarmクラスタのオーバレイネットワークを使って通信ができるようになります。

 Dockerコンテナは、クラスタのワーカノードで稼働することになりますが、Docker 1.12時点において、コンテナを起動するための「docker service」コマンドは、マスタノードでしか実行できない仕様になっています。では、docker serviceコマンドを使って、ワーカノードにどうやってコンテナを起動させるのでしょうか?上記のコマンド実行例を再度よく見てください。「--constraint 'node.hostname == n0122'」というオプションとパラメータが付与されています。

 「--constraint」には、パラメータとしてコンテナを実行したいワーカノードを明示的に指定する「node.hostname」が付与されています。今回は、n0122が与えられていますので、コンテナはワーカノードのn0122で実行されることになります。この「--constraint」オプションは、Swarmクラスタのワーカノードでコンテナを実行する際の挙動を細かく制御する場合に用いられます。Dockerのドキュメントに指定できるパラメータ一覧が載っていますので、一読してみてください。

 「docker service」コマンドにより、Swarmクラスタのワーカノードでコンテナを実行しますが、ワーカノードn0122にコンテナの元となるDockerイメージ(今回の例では「larsks/thttpd」)が存在しない場合、自動的にDockerイメージがn0122にダウンロードされ、コンテナが起動します。

 ちなみに、Docker Swarmにおけるサービスは、複製サービス(Replicated Services)とグローバルサービス(Global Services)の2種類が存在します。複製サービスは、文字通り、複数のワーカノードに同じものが複製されて稼働するタスクのことです。タスクとは、マネージャノードがワーカノードに割り当てる最小スケジューリング単位のことです。一方のグローバルサービスは、クラスタ内の全ノードで利用可能なタスクです。これらのサービスは、Dockerエンジンのバージョン1.12以降の概念で、クラスタにおけるアプリケーションの実行の単位となります。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ