[Docker] docker-compose で複数コンテナを紐付けて操作する

こちらのコマンドを使う方が多そうだ。

他に公式ドキュメントがある。

% 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 でイメージに命名する。

% docker build -t deadwood/database ./deadwood-database

環境変数を渡してコンテナを動かす

これらの環境変数は Dockerfile に持たせることになる。

--name でコンテナに名前を付ける。
-d でバックグラウンドで実行する。
-e で環境変数を渡す。
-p でコンテナ内部と外部のポートを割り当てる。

% docker run --name db -d -e MYSQL_ROOT_PASSWORD=123 -p 3306:3306 mysql:latest

コンテナの依存関係は docker-compose.yml に持たせることになる。
--link で db と名付けられたコンテナにリンクし、これを db として参照する。

% docker run -it -p 8123:8123 --link db:db -e DATABASE_HOST=DB users-service

実行中のコンテナにログインする

% docker exec -it db /bin/bash

以下ではコマンドの実行を受け取る。

% 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 で紐付ける。

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 でイメージを作成する。

% 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 でコンテナを実行する。

% 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 で実行を終える。

% docker-compose down
% docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

未来ですね。

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

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