docker-composeでWordPress環境構築

<h1>前提</h1>
dockerコマンド、docker-compose、docker-syncの基本は理解しているものとして
docker-composeで単一コンテナ内でvirtualhostで複数のワードプレスを設置する環境を
サクッと準備できるようにする。
<h2>環境：</h2>
・Macbook air　El Capitan 10.11.6
・docker for mac
・docker-sync

<h2>dockerの個人的イメージ（随時変えていきます）</h2>
![スクリーンショット 2016-12-01 15.24.27.png](https://qiita-image-store.s3.amazonaws.com/0/101607/432d65fc-28d5-5643-40b0-f9a7be7782b5.png)

<h2>使用するdocker image</h2>
最終的にawsへのデプロイを考えているのでdocker hubへも追加されたamazonlinux公式イメージを使用し
データベースは仮RDSということでmysqlの公式イメージを使用する。

amazonlinux公式
https://hub.docker.com/_/amazonlinux/
mysql公式
https://hub.docker.com/_/mysql/

<h2>ディレクトリ構成</h2>
![スクリーンショット 2016-12-01 16.27.19.png](https://qiita-image-store.s3.amazonaws.com/0/101607/808879b7-1f6e-b521-4f7a-05efeaf022bf.png)


<h2>amznlinuxのDockerfile</h2>
APPサーバ構築用のDockerfileです。

```docker:Dockerfile
FROM amazonlinux:latest

RUN yum clean all && yum -y update
RUN yum clean all

### Apache
RUN yum install -y httpd
RUN chkconfig httpd on

### MySQL Server
RUN yum install -y mysql mysql-server mysql-client

### PHP
RUN yum install -y php php-mysql php-pear php-cli php-mbstring php-mcrypt php-pdo php-xml

RUN pear install Crypt_Blowfish
RUN pear install -a Mail

# Edit php setting file
COPY php/php.ini /etc/php.ini

EXPOSE 80

CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]
```

解説は割愛しますのでRUNとかCMDとかEXPOSEってなんぞな方は下記URLにてご確認下さい。
http://docs.docker.jp/engine/reference/builder.html
先人に感謝！

<h2>mysqlのDockerfile</h2>
公式イメージをほぼそのまま使用しているので特に変わったことはしてません。
ホントに公式呼んでるだけ

```docker:Dockerfile
FROM mysql:5.6.34

```

<h2>各種設定ファイル</h2>
マウントしたりコピーしたりしているphp.ini、my.cnf、httpd.confについては必要があれば上書きしましょう
githubにはダミーをいれてあります。（動きますが適当なのでよく読んで下さい）

<h2>docker-compose.yml</h2>
こちらはdocker-composeコマンドを使用したとき読み込まれるファイルですがDockerfileが各コンテナごとにガリガリ書いていく感じでdocker-composeはDockerfile内でEXPOSEなどの設定をまとめて行うことができたり、コンテナ同士の依存関係を指定したりします。

```docker:docker-compose.yml
version: '2'

services:
  amznlinux:
    depends_on:
      - mysql
    build: amznlinux
    links:
      - mysql
    extra_hosts:
      - "localpage1.jp:127.0.0.1"
      - "localpage2:127.0.0.1"
    ports:
      - "80:80"
    volumes:
      - ./amznlinux/httpd:/etc/httpd/conf/
  
  mysql:
    build: mysql
    ports:
      - "3306:3306"
    restart: always
    volumes:
      - ./mysql/data_volume:/var/lib/mysql:rw
      - ./sharedata_mysql:/share_data:rw
      # - ./mysql/my:/etc/mysql/conf.d
    environment:
      MYSQL_DATABASE: databasename
      MYSQL_ROOT_PASSWORD: password
```

例によって説明は割愛しますのでわからないことはリファレンスをご確認下さい
http://docs.docker.jp/compose/compose-file.html

そういえばymlって触ったことなかったんですが半角スペース2個で各要素を判別してるんですね
sublimeで改行すると自動でtab入れてくれたので最初build時などにエラーを結構吐いてくれました。

<h2>docker-compose-dev.yml</h2>
このファイルはdocker-syncを行う際に読み込まれてdocker-compose.ymlの設定を上書きします。

```docker:docker-compose-dev.yml
version: '2'

volumes:
  www:
    external: true

services:
  amznlinux:
    volumes:
      - www:/var/www
```

ここと下のdocker-sync.yml関してはこちらを参考にさせていただきました。
http://cluex-developers.hateblo.jp/entry/2016/11/02/122633

<h2>docker-sync.yml</h2>
docker-syncはdocker for macを使用して環境を構築した場合ブラウザアクセスが非常に
遅くなってしまうという症状があるため、それを回避するために使用します。
詳細は前項のURLよりご確認下さい

```docker:docker-sync.yml

options:
  # default: docker-compose.yml if you like, you can set a custom location (path) of your compose file like ~/app/compose.yml
  compose-file-path: 'docker-compose.yml'

  # optional, default: docker-compose-dev.yml if you like, you can set a custom location (path) of your compose file. Do not set it, if you do not want to use it at all

  # if its there, it gets used, if you name it explicitly, it HAS to exist
  compose-dev-file-path: 'docker-compose-dev.yml'

syncs:
  www:
    src: './amznlinux/www'
    dest: '/var/www'
    sync_strategy: 'rsync'
    sync_host_port: 10871
    sync_excludes: ['.DS_Store',]

```

docker syncに関してはdockerと別にインストールが必要なので注意して下さい。

上記ソースに関してはgit hubにWordpressを格納しているwwwディレクトリを空にしてそのうち上げますので
興味があれば遊んでみて下さい

最後まで駄文にお付き合い頂いた方々はありがとうございました。
ちなみにこの記事は以前の記事の焼き増しです。