Docker Composeコマンドまとめ

開発環境の構築で必要不可欠になっているDockerですが、アプリケーションごとにDBサーバー、キャッシュサーバー、フロントエンドサーバー、バックエンドサーバー等いろんなサーバーが関わってくるので、それぞれ立ち上げるのにそれなりの手間がかかるでしょう。そこで登場するのがDocker Composeです。

Docker Composeを使うと、複数のコンテナから構成されるサービスを一つのYAMLファイル(docker-compose.yml)で定義して、まとめて管理することができます。
アプリケーション毎にそれに関わる全てのサーバーをまとめて定義、ビルド、起動等が行えるのです。

以下は、あるアプリケーションのために定義した「docker-compose.yml」の例です。

version: '2'
services:

  # MariaDB データベース
  db.aiden-style.com:
    image: mariadb:10.1
    container_name: db.aiden-style.com
    volumes:
      - /var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      TERM: xterm

  # バーチャルホスト自動設定用リバースプロクシィ
  proxy.aiden-style.com:
    image: jwilder/nginx-proxy
    container_name: proxy.aiden-style.com
    ports:
      - "80:80"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro

  # phpmyadmin データベース管理
  phpmyadmin.aiden-style.com:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin.aiden-style.com
    environment:
      - VIRTUAL_HOST=phpmyadmin.aiden-style.com
      - PMA_ARBITRARY=1
    ports:
      - "8200:80"
    volumes:
      - /sessions
    depends_on:
      - db.aiden-style.com
    external_links:
      - db.aiden-style.com:db

  # aiden-style.com フロントエンド
  aiden-style.com:
    image: aidenlee/nginx-php56
    container_name: aiden-style.com
    environment:
      - VIRTUAL_HOST=aiden-style.com
      - HTDOCS_DIR=aiden-style.com
    ports:
      - "8201:80"
    volumes:
      - ../..:/var/www
    working_dir: /var/www
    depends_on:
      - db.aiden-style.com

  # aiden-style.com バックエンド
  admin.aiden-style.com:
    image: aidenlee/nginx-php56
    container_name: admin.aiden-style.com
    environment:
      - VIRTUAL_HOST=admin.aiden-style.com
      - HTDOCS_DIR=admin.aiden-style.com
    ports:
      - "8202:80"
    volumes:
      - ../..:/var/www
    working_dir: /var/www
    depends_on:
      - db.aiden-style.com

この「docker-compose.yml」で定義したものを一括で管理・操作できるのが以下のようなコマンドです。

docker-compose build

YAMLに「build:」があれば、そのイメージをまとめてビルドします。

$ docker-compose build

docker-compose pull

YAMLに「image:」があれば、そのイメージをまとめてプルします。

$ docker-compose pull

docker-compose up -d

docker-compose build, docker-compose pullをした後にdocker runを実行します。

$ docker-compose up -d

docker-compose up -d redmine

個別のサービスを指定して起動します。依存関係がある場合は関係するコンテナすべてが起動します。

$ docker-compose up -d redmine

docker-compose logs

関係するコンテナすべての出力を表示します。

$ docker-compose logs

docker-compose stop

関係するコンテナをまとめて終了します。

$ docker-compose stop

docker-compose rm

関係するコンテナをまとめて削除します。

$ docker-compose rm