自分専用メモ。
複数コンテナ管理における自分勝手な要件
- 複数コンテナのビルド、デプロイ、依存関係、起動、停止をまとめて管理・制御したい
- 公式イメージとプライベートレジストリを併用したい
- ビルド/起動/停止前後などのイベントでスクリプトを流したい
- いっぺんにいろんなことをやらない(自動化しすぎない)
- Docker ホストには役割を振り、それに応じた分岐をしたい(本番、テスト、開発など)
- 大規模なオーケストレーションとかいらないので、まずは小規模で
現状の複数コンテナ管理ツール
docker-compose
イメージの push ができない。基本、デプロイ専用という印象。細かいことをさせてくれない。きわめて発展途上。
maestro-NG
イメージの push ができず docker-compose と同じような立ち位置だが、細かいことは結構できるかも。テスト環境をさくっと立ち上げたいと言った用途に。
crane
なかなか良いのだが、ビルド前後のイベントはない。また、設定ファイル中で Dockerfile を指定してしまうと、crane lift する時に必ずビルドが走る仕様となっている。作者は「ビルドは分離したほうが良い気がしてきた」と言っており、V2 あたりで導入される見込み。環境依存スクリプトの概念もない。期待したいが。。。
ないものはないので、理想ツールを夢想する
仮に、ツールの名前を dcon とする。
- Docker ホストの役割設定("prod" とか "test" とか任意文字列):
$ dcon set [-g] host-role="HOST-ROLE"
- カレントタグの設定(ビルド/push/pull のターゲットになる):
$ dcon set [-g] current-tag="TAG-NAME"
- 各種設定値確認:
$ dcon set
- イメージのビルド:
$ dcon b[uild]
- イメージの push:
$ dcon push
- イメージのビルド & push:
$ dcon pub[lish]
- イメージの pull:
$ dcon pull
- コンテナの起動:
$ dcon start
- イメージの pull & 起動(イメージがなければエラー終了):
$ dcon up
- コンテナの停止:
$ dcon stop
- コンテナの削除:
$ dcon rm
- イメージの削除:
$ dcon rmi
- ステータス確認:
$ dcon stat
オプション類:
- -g: グローバル設定(Daemon labels でも良いが、これなら再起動不要ですぐに切り替え可能)
- -f: 強制
- -d: デバッグ出力
- -v: バージョン表示
- -h: 使い方表示
dcon.yaml に設定を書く。ひとまず crane.yaml と同じで良い気がする。
docn.yaml
containers:
apache:
image: some-apache-image:latest
run:
volumes-from: ["app"]
publish: ["80:80"]
link: ["mysql:db", "memcached:cache"]
detach: true
app:
dockerfile: app
image: michaelsauter/app
run:
volume: ["app/www:/srv/www:rw"]
detach: true
mysql:
image: mysql
run:
env: ["MYSQL_ROOT_PASSWORD=mysecretpassword"]
detach: true
memcached:
image: tutum/memcached
run:
detach: true