先日、Dockerでnginxとphp-fpmを起動する手順Dockerfileを作る手順と注意点と参考サイトを公開しました。

今回はより便利なDocker Composeを使った複数のコンテナの管理を書いていきます。
今回も前回同様に、Docker初心者向けの記事となります。
※なお、docker runやDockerfileを作成したことが無いと、どういったメリットがあるか感じにくいと思いますので、事前にdocker runしたりDockerfileまで作成してみることをおすすめします。

Docker Composeとは

docker-composeの公式リファレンスには下記のように記載があります。

複数のコンテナを使う Docker アプリケーションを、定義・実行するツールです。Compose はアプリケーションのサービスの設定に、Compose ファイルを使います。そして、コマンドを1つ実行するだけで、設定した全てのサービスを作成・起動します。

今まではDockerfileでビルドしたイメージをdocker runのオプションを駆使して、複数コンテナを一つずつ実行していましたが、docker-composeを使うことで簡単に複数のコンテナがリンクした環境を作ることが可能です。

では実際に試してみます。

Docker ComposeでWordPress環境を作る

docker-compose.ymlというファイルにyaml形式で、コンテナの情報を記載していくことで、簡単にコンテナ環境を作成することができます。
公式リファレンスにdocker-composeを使って、WordPress環境を作成する手順が記載されていますので、まずはその通りに実施します。

環境

docker for macで進めていきます。バージョンは下記の通りです。
※docker 1.8以降からはdocker tool boxを利用するようになったようで、macであればdocker for macと一緒にtool boxの中にdocker-composeが含まれているかと思います。もしdocker-composeがなければ、dockerの公式サイトからインストールを実施してください。

$ docker -v
Docker version 1.13.0, build 49bf474
$ docker-compose -v
docker-compose version 1.10.0, build 4bd6f1a

ディレクトリを作成する

どこでも良いのでGit管理しやすいように適当な場所にディレクトリを作成して、移動します。

$ mkdir my-wordpress
$ cd my-wordpress

docker-compose.ymlを作成する。

公式リファレンスの内容をコピーして、docker-compose.ymlにペーストします。

version: '2'
services:
  db:
    image: mysql:5.7
    volumes:
      - "./.data/db:/var/lib/mysql"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    links:
      - db
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_PASSWORD: wordpress

おそらくすでにdocker runしたり、Dockerfileまで作成したことがある人であれば、大方書いて有ることはわかるかと思います。
データベースのデータはvolumeオプションで、dockerのホストのローカルに保存されるようになっています。
docker runのオプションなどで指定したものがyaml形式に落とし込まれているイメージです。
また、ここに書いてあるように、有名なOSSのアプリケーションはだいたいイメージがアップロードされています。
公式で出されているイメージも多いので、それらを活用することで大幅に作業効率を向上することが可能です。

なお、注意点としてはdocker-compose.ymlのバージョンが、最新版が2(2017年2月8日現在)となっていることです。
バージョン1と書き方が若干変わっているのと、使用可能なオプションが2のほうが増えています。バージョン2前提が記載していたら、1のままでオプションが使えない~とならないよう注意してください。

コンテナを起動する

$ docker-compose up -d

-dは例のごとくデタッチドモードになります。upオプションを使うことで、docker-compose.ymlに記載されている流れのとおりに、イメージをダウンロードして、コンテナを起動するまで一気にやってくれます。
すでにイメージがある場合は、起動をしてくれます。

コンテナの起動状況を確認する

$ docker-compose ps
           Name                         Command               State          Ports
------------------------------------------------------------------------------------------
wordpresstest1_db_1          docker-entrypoint.sh mysqld      Up      3306/tcp
wordpresstest1_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8000->80/tcp

StateがUPになっていればOKです。これがExitなど、UP以外になっている場合は起動に失敗している可能性があります。

サイトにアクセスする

ブラウザでhttp://localhost:8000/にアクセスします。
そうするとWordPressのインストール画面が表示されたと思います。
そのあとは画面に沿って進めれば、サイトが表示されるかと思います。


※どうでもいいけどhttp://localhost:8000が結構はてブされているのがツボでしたw

以上で、Docker Composeを使ってWordPress環境が作成できました。

まとめ

いかがでしたでしょうか?
あっという間にWordPress環境が作れたのではないかと思います。

私が「Docker楽しいのでは??」となりはじめたのも、Docker Composeで上記WordPress環境を作成してみて感じるようになりました。
あっという間に手間無しで作れてしまうのでとても便利で、しかも楽しいです。

Vagrantでも簡単にWordPress環境が作成できたりすると思いますが、Dockerほど高速ではありません。
また、yaml形式の記述は可読性が高く、とても覚えやすいのが特徴です。
hub.docker.comを探せば、有名どころはほぼ網羅されているのではというくらいイメージがあります。
私がちらっとみただけでも、PukiwikiやECCUBE,joomla,mediatomb,mediawikiなどなど、なんでもあります。

もし、まだ Docker Composeを触ったことがないようでしたら、ぜひ触ってみてください。
おすすめです。

カテゴリー: Tech