Docker スタックと配布アプリケーションバンドル(試験的)

注釈

このページに示す機能は「試験的」(experimental)として位置づけられています。 このため正規安定版となる頃には変更されているかもしれません。

注釈

ここに示すドキュメントは docker/docker-ce repo にある Docker スタックと配布アプリケーションバンドル (Docker Stacks and Distributed Application Bundles)を修正したものです。 そして最新の記述に合わせて的確に更新を行っています。

概要

Dockerfile からイメージがビルドされ、そのイメージからコンテナが生成されます。 同じように docker-compose.yml からは 配布アプリケーションバンドル がビルドされ、そのバンドルからは スタック (stack)が生成されます。 このことから言えば、バンドルとは複数サービスを持った配布可能なイメージ形式、ということになります。

Docker スタックと配布アプリケーションバンドルは、試験的な機能として Docker 1.12 および Docker Compose 1.8 より導入が始まりました。 これはスウォームモードや、Engine API におけるノードとサービスの考え方が進められた時期です。 Docker Engine や Docker Registry はバンドル配布をサポートしていません。 また バンドルbundle )というものの考え方は、新たなリリースを迎えたとしても、さして重要視するものではありません。

もっとも スウォームモード 、複数サービスによりアプリケーション、スタックファイルというものは、今や完全にサポートされました。 スタックファイルとは Compose ファイルバージョン 3 の特定の形ということができます。

Docker に取り掛かかり始めたばかりの方が、次に複数サービスによるアプリケーションのデプロイ方法を学ぶとすれば、はじめよう を読んでみるのがよいと思います。 そこでは Compose ファイルに 1 つのサービス設定を定義して、アプリをデプロイし、関連ツールやコマンドを使っていく方法が示されています。

バンドルの生成

バンドルを生成するには、すでにある docker-compose.yml から docker-compose を実行するのが最も単純です。 もちろんこれは 一つ のやり方にすぎません。 Docker イメージを作り出すのが docker build だけではないことと同じ話です。

docker-compose を使って以下を実行します。

$ docker-compose bundle
WARNING: Unsupported key 'network_mode' in services.nsqd - ignoring
WARNING: Unsupported key 'links' in services.nsqd - ignoring
WARNING: Unsupported key 'volumes' in services.nsqd - ignoring
[...]
Wrote bundle to vossibility-stack.dab

バンドルからのスタック生成

注釈

スタックとバンドルに関するサポートが試験的な段階にあるため、これを利用するためには Docker Engine の試験的ビルド(experimental build)をインストールする必要があります。

Mac や Windows を利用している場合は Docker Desktop for Mac または Docker Desktop for Windows の「ベータチャネル」(Beta channel)からダウンロードしてインストールしてください。 Linux を利用している場合は 試験ビルドの README に示す手順に従ってください。

スタックは docker deploy コマンドを使って生成されます。

$ docker deploy --help

利用方法:  docker deploy [オプション] STACK

スタックを生成、更新します。

オプション:
      --file   string        配布アプリケーションバンドルへのパスを指定します。
                             (デフォルト: STACK.dab)
      --help                 利用方法を表示します。
      --with-registry-auth   Swarm エージェントにレジストリ認証情報を送信します。
```

前に生成したスタックをデプロイします。

$ docker deploy vossibility-stack
Loading bundle from vossibility-stack.dab
Creating service vossibility-stack_elasticsearch
Creating service vossibility-stack_kibana
Creating service vossibility-stack_logstash
Creating service vossibility-stack_lookupd
Creating service vossibility-stack_nsqd
Creating service vossibility-stack_vossibility-collector

サービスが正しく生成されているかを確認します。

$ docker service ls
ID            NAME                                     REPLICAS  IMAGE
COMMAND
29bv0vnlm903  vossibility-stack_lookupd                1 nsqio/nsq@sha256:eeba05599f31eba418e96e71e0984c3dc96963ceb66924dd37a47bf7ce18a662 /nsqlookupd
4awt47624qwh  vossibility-stack_nsqd                   1 nsqio/nsq@sha256:eeba05599f31eba418e96e71e0984c3dc96963ceb66924dd37a47bf7ce18a662 /nsqd --data-path=/data --lookupd-tcp-address=lookupd:4160
4tjx9biia6fs  vossibility-stack_elasticsearch          1 elasticsearch@sha256:12ac7c6af55d001f71800b83ba91a04f716e58d82e748fa6e5a7359eed2301aa
7563uuzr9eys  vossibility-stack_kibana                 1 kibana@sha256:6995a2d25709a62694a937b8a529ff36da92ebee74bafd7bf00e6caf6db2eb03
9gc5m4met4he  vossibility-stack_logstash               1 logstash@sha256:2dc8bddd1bb4a5a34e8ebaf73749f6413c101b2edef6617f2f7713926d2141fe logstash -f /etc/logstash/conf.d/logstash.conf
axqh55ipl40h  vossibility-stack_vossibility-collector  1 icecrime/vossibility-collector@sha256:f03f2977203ba6253988c18d04061c5ec7aab46bca9dfd89a9a1fa4500989fba --config /config/config.toml --debug

スタックの管理

スタックの管理には docker stack コマンドを利用します。

$ docker stack --help

利用方法:  docker stack コマンド

Docker スタックを管理します。

オプション:
      --help   利用方法を表示します。

コマンド:
  config      スタック設定を出力します。
  deploy      スタックを生成、更新します。
  rm          スタックを削除します。
  services    スタック内のサービスを一覧表示します。
  tasks       スタック内のタスクを一覧表示します。

各コマンドの詳細は 'docker stack COMMAND --help' を実行してください。

バンドルファイルフォーマット

配布アプリケーションバンドルは JSON 形式により表現されます。 バンドルがファイルとして保存されている場合、そのファイル拡張子は .dab です。

バンドルには最上位のフィールドが 2 つあります。 versionservices です。 Docker 1.12 の各ツールにて利用されるバージョンは 0.1 です。

バンドル内の services とは、アプリケーションを含めたサービスのことです。 これは Docker Engine API 1.12 において導入された、新しい Service オブジェクトに対応するものです。

サービスには以下のフィールドがあります。

Image (必須) string
サービスが実行するイメージ。 Docker イメージは全内容に基づくハッシュを使って指定します。 この値によってサービスのデプロイ内容が完全に特定されます。 たとえば postgres@sha256:e0a230a9f5b4e1b8b03bb3e8cf7322b0e42b7838c5c87f4545edb48f5eb8f077 のようなものです。
Command []string
サービスコンテナ内で実行するコマンド。
Args []string
サービスコンテナに受け渡すコマンド引数。
Env []string
環境変数。
Labels map[string]string
サービス上のメタデータを設定するために利用するラベル。
Ports []Port
サービスのポート。 (Port (int) と Protocol (string から構成される。) サービス記述は、公開するコンテナポートの指定のみでも可能です。 このポートは操作時に、実行ホストへのポートマッピングを行うことができます。
WorkingDir string
サービスコンテナ内部のワークディレクトリ。
User string
ユーザ名または UID (書式: <name|uid>[:<group|gid>]
Networks []string
サービスコンテナが接続するべきネットワーク。 バンドルをデプロイしているエンティティは、必要なネットワークを生成します。

注釈

DAB 形式においては、ボリュームマウントなどのように、まだサポートされていない設定があります。

関連トピック