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 つあります。
version
と services
です。
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 形式においては、ボリュームマウントなどのように、まだサポートされていない設定があります。
関連トピック¶
- はじめよう
- docker stack deploy コマンド
- Compose ファイル の deploy オプション