[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)

WEB+DB PRESS Vol.86
WEB+DB PRESS Vol.86

posted with amazlet at 16.06.29
結城 洋志 沖元 謙治 足永 拓郎 林 健太郎 大竹 智也 内田 誠悟 伊藤 直也 中山 裕司 hiroki.o 泉水 翔吾 佐藤 太一 高橋 俊幸 西尾 泰和 舘野 祐一 中島 聡 橋本 翔 はまちや2 竹原 麻植 泰輔
技術評論社
売り上げランキング: 237,581

[/markdown]