[Docker] docker-compose で複数コンテナを紐付けて操作する
こちらのコマンドを使う方が多そうだ。
[markdown]
> * [Node.jsのマイクロサービスの構築を通してDockerを学ぶ – 前編 | プログラミング | POSTD](http://postd.cc/learn-docker-by-building-a-microservice-1/)
> * [Node.jsのマイクロサービスの構築を通してDockerを学ぶ – 後編 | プログラミング | POSTD](http://postd.cc/learn-docker-by-building-a-microservice-2/)
> * [dwmkerr/node-docker-microservice at step4](https://github.com/dwmkerr/node-docker-microservice/tree/step4)
他に公式ドキュメントがある。
> * [Example Applications](https://docs.docker.com/docker-for-mac/examples/)
“`prettyprinted
% docker version
Client:
Version: 1.12.0-rc2
API version: 1.24
Go version: go1.6.2
Git commit: 906eacd
Built: Fri Jun 17 20:35:33 2016
OS/Arch: darwin/amd64
Experimental: true
Server:
Version: 1.12.0-rc2
API version: 1.24
Go version: go1.6.2
Git commit: a7119de
Built: Wed Jun 29 10:03:33 2016
OS/Arch: linux/amd64
Experimental: true
“`
## まとめ
– Dockerfile をコンテナ毎に用意する(Dockerfile でまかなう)。
– docker-compose.yml で複数コンテナの紐付けを行う。
– `docker-compose build`, `docker-compose up` で利用する。
## docker コマンドを利用してコンテナを操作する
コンテナ毎に Docoker ファイルを用意し、Docker コマンドで操作する。
複数コンテナを利用するユースケースが一般的と想像できるので、後述の docker-compose コマンドで操作することになるだろう。
### Dockerfile を利用してオリジナルのイメージを作成する
`-t` でイメージに命名する。
“`prettyprinted
% docker build -t deadwood/database ./deadwood-database
“`
### 環境変数を渡してコンテナを動かす
これらの環境変数は Dockerfile に持たせることになる。
`–name` でコンテナに名前を付ける。
`-d` でバックグラウンドで実行する。
`-e` で環境変数を渡す。
`-p` でコンテナ内部と外部のポートを割り当てる。
“`prettyprinted
% docker run –name db -d -e MYSQL_ROOT_PASSWORD=123 -p 3306:3306 mysql:latest
“`
コンテナの依存関係は docker-compose.yml に持たせることになる。
`–link` で db と名付けられたコンテナにリンクし、これを db として参照する。
“`prettyprinted
% docker run -it -p 8123:8123 –link db:db -e DATABASE_HOST=DB users-service
“`
### 実行中のコンテナにログインする
“`prettyprinted
% docker exec -it db /bin/bash
“`
以下ではコマンドの実行を受け取る。
“`prettyprinted
% docker exec db cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 17c9aa64df99
“`
## docker-compose コマンドを利用して複数コンテナを操作する
コンテナ毎に Dockerfile を用意しておき、docker-compose.yml で紐付ける。
> * [Overview of Docker Compose](https://docs.docker.com/compose/overview/)
> * [Docker Compose — Docker-docs-ja 1.12.RC ドキュメント](http://docs.docker.jp/compose/toc.html)
“`yaml:docker-compose.yml
version: ‘2’
services:
httpd:
build: ./deadwood-httpd
ports:
– “8080:80”
depends_on:
– db
environment:
– DATABASE_HOST=db
db:
build: ./deadwood-database
“`
`build` でイメージを作成する。
“`prettyprinted
% docker-compose build
% docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sandboxdocker_httpd latest 228c75119fc2 12 seconds ago 316.7 MB
sandboxdocker_db latest 1d707530cce3 34 seconds ago 380.2 MB
mysql 5 1195b21c3a45 3 weeks ago 380.2 MB
mysql latest 1195b21c3a45 3 weeks ago 380.2 MB
centos latest 904d6c400333 4 weeks ago 196.8 MB
nginx latest 0d409d33b27e 4 weeks ago 182.8 MB
“`
`up` でコンテナを実行する。
“`prettyprinted
% docker-compose up
% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fa09e73f8f4f sandboxdocker_httpd “/usr/sbin/httpd -D F” 20 seconds ago Up 18 seconds 0.0.0.0:8080->80/tcp sandboxdocker_httpd_1
d9cf291bc967 sandboxdocker_db “docker-entrypoint.sh” 21 seconds ago Up 20 seconds 3306/tcp sandboxdocker_db_1
“`
`down` で実行を終える。
“`prettyprinted
% docker-compose down
% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
“`
未来ですね。
> * [DriftwoodJP/sandbox-docker: Docker for Mac sample.](https://github.com/DriftwoodJP/sandbox-docker)
技術評論社
売り上げランキング: 237,581
[/markdown]