Dockerであそぶ(8)docker-composeでコンテナをまとめて管理


ここ1,2年で注目を集めている仮想化技術の1つ「Docker」について、今更感がありますが試していきたいと思います。
他の仮想化技術との違いや特徴、開発環境として使っていくにはどうすればいいかなどを紹介していきたいと考えています。

これまでの連載

はじめに

前回までにLAMPの実行・開発環境を作ることができました。
しかし、それぞれの役割毎に3つのコンテナを作成しているため、起動や停止のときにコマンドを多数実行しなければならず、順番を間違えるとエラーが発生してしまいます。さらに覚えるにはやや長いコマンドのため必ずしも扱いやすいものではありませんでした。

コンテナ名 役割 コマンド
my-mariadb1 DBサーバー docker run -it -d -p 3306:3306
-e MYSQL_ROOT_PASSWORD=root
-e MYSQL_DATABASE=docker
-e MYSQL_USER=docker
-e MYSQL_PASSWORD=docker
–name my-mariadb1 mariadb:latest
my-php1 WEBサーバー docker run -it -d -p 80:80 -v
//c/Users/sudoy/Documents/docker/php/public-html/:/var/www/html
–name my-php1 –link my-mariadb1 my-php
my-phpmyadmin1 PhpMyAdminサーバー docker run –name my-phpmyadmin1 -d
–link my-mariadb1:db
-p 8080:80 phpmyadmin/phpmyadmin

そこで登場するのが「docker-compose」です。(以前はfigと呼ばれていました。)
コンセプトは非常に単純で、これまで「docker run」コマンドのオプションとして設定されていたものを、YAML形式の設定ファイルに記述し管理することができます。
起動するときは単に「docker-compose up」とすればよく、起動順などもYAMLの設定ファイルから自動的に解釈してくれるという優れものです。

ディレクトリ構成を整える

前回までに作成した上記のコンテナが起動しているようでしたら、止めておきましょう。

sudoy@SUDOY-NOTE MINGW64 ~/Documents/docker/php
$ docker stop my-phpmyadmin1
my-phpmyadmin1

sudoy@SUDOY-NOTE MINGW64 ~/Documents/docker/php
$ docker stop my-php1
my-php1

sudoy@SUDOY-NOTE MINGW64 ~/Documents/docker/php
$ docker stop my-mariadb1
my-mariadb1

新しく「techpjin-lamp」などのサービス名を冠したフォルダを新しく作成し、その中に使用してたファイル一式(私たちの場合はphpフォルダ)を移動します。
もし、他にも独自にビルドしたコンテナ(Dockerfile)があれば、「techpjin-lamp」フォルダの中に移動します。
phpの動作確認やmariadbとの連携確認をした際にスクリプトが作成してありますので、出来上がるフォルダツリーは以下のようになるかと思います。

c:\users\sudoy\documents\docker\techpjin-lamp
│  docker-compose.yml
│
└─php
    │  Dockerfile
    │
    └─public-html
            db.php
            index.php

「techpjin-lamp」フォルダ直下の「docker-compose.yml」はこのあと作成します。

docker-compose.ymlファイルの作成

「techpjin-lamp」フォルダの中にdocker-compose.ymlファイルを作成し、以下のように記述します。

my-mariadb:
  image: mariadb:latest
  environment:
    - MYSQL_ROOT_PASSWORD=root
    - MYSQL_DATABASE=docker
    - MYSQL_USER=docker
    - MYSQL_PASSWORD=docker
  ports:
    - "3306:3306"

my-php:
  image: my-php
  ports:
    - "80:80"
  volumes:
    - /c/Users/sudoy/Documents/docker/techpjin-lamp/php/public-html:/var/www/html 
  links:
    - my-mariadb

my-phpmyadmin:
  image: phpmyadmin/phpmyadmin
  ports:
    - "8080:80"
  links:
    - "my-mariadb:db"

YAML書式はほぼ「docker run」コマンドのオプションと連動しているため、戸惑うところは特にないかと思います。
それぞれのコンテナに名前(my-mariadbやmy-php)を付けて、それぞれどのイメージを使い、オプションには何を使うかを指定していきます。
あらかじめイメージをビルドしていれば、my-phpのように独自のイメージを指定することもできますし、以下のように指定することでビルド作業自体もdocker-composeに任せてしまうこともできます。

my-php:
  build: ./php

あとは「docker-compose.yml」ファイルのあるフォルダをカレントにして、「docker-compose up」コマンドを実行するだけです。

sudoy@SUDOY-NOTE MINGW64 ~/Documents/docker
$ cd techpjin-lamp/

sudoy@SUDOY-NOTE MINGW64 ~/Documents/docker/techpjin-lamp
$ docker-compose up
Creating techpjinlamp_my-mariadb1_1
Creating techpjinlamp_my-phpmyadmin1_1
Creating techpjinlamp_my-php1_1
.. 中略 ..

phpやphpmyadminにアクセスできるか試してみてください。

停止するには、「CTRL+C」を押下します。
バッググラウンドで起動するには「-d」オプションを指定すればOKです。

よく使うサブコマンド

docker-composeでよく使うサブコマンドの一覧です。

サブコマンド 概要
docker-compose build 「image:」の代わりに「build: 」を指定しいる場合に、イメージのビルドを行う
docker-compose pull 使用するイメージの中にダウンロードしていないものがあればダウンロードする
docker-compose up -d バックグラウンドで関連するコンテナを全て起動する
docker-compose stop 関連するコンテナをまとめて停止する
docker-compose ps 関連するコンテナの情報をまとめて一覧表示する
docker-compose rm 関連するコンテナをまとめて削除する

今回はここまでにしておきます。

  • このエントリーをはてなブックマークに追加

PAGE TOP