ウェブサーバーのコンテナを作成

# docker-compose.ymlのwebコンテナ部分を抜粋
web:
  build: ./web
  ports:
    - "80:80"
    - "443:443"
  volumes_from:
    - app
  volumes:
    - ./web/nginx.conf:/etc/nginx/nginx.conf

ウェブサーバーは前回の記事で作成したDockerfileを利用します。webという名前のフォルダにDockerfilenginx.confを格納し、Dockerfileを格納したフォルダのパスをbuildで指定してください。ただし、ウェブサーバーの設定ファイル(nginx.conf)は外部化しておきたいため、volumeswebフォルダに格納したnginx.confをコンテナ内(/etc/nginx/nginx.conf)にマウントします。

nginx.confには、PHPへのリクエストをPHPコンテナへプロキシするように設定を記述します。次の通り、PHPコンテナのIPアドレスを記載する必要はなく、docker-compose.ymlに定義したサービス名を指定するだけで接続できます。

# nginx.confの一部をPHPへのリクエストに関する設定部分を抜粋
location ~ \.php$ {
  fastcgi_pass   php:9000;
  fastcgi_index  index.php;
  fastcgi_split_path_info ^(.+\.php)(/.*)$;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include        fastcgi_params;
}

PHPのコンテナを作成

# docker-compose.ymlのphpコンテナ部分を抜粋
  php:
    build: ./php
    ports:
      - "9000:9000"
    volumes_from:
      - app
    depends_on:
      - db

次に、PHPのコンテナを作成します。配布されているPHPの公式イメージをそのまま利用したいところですが、最小限の構成でコンパイルされているため、そのままではMySQLと連携させることができません。Dockerfileを作成し、MySQLと連携できるよう公式イメージをカスタマイズします。

次の内容でDockerfileを作成し、phpフォルダに格納してください。php:7.0-fpmの公式イメージにはdocker-php-ext-installというスクリプトが用意されており、引数に指定したエクステンションをインストールしPHPをリコンパイルしてくれます。

FROM php:7.0-fpm
RUN docker-php-ext-install pdo_mysql mysqli

データベースのコンテナを作成

# docker-compose.ymlのdbコンテナ部分を抜粋
  db:
    image: mysql:5.7.18
    env_file: .env
    ports:
      - "3306:3306"
    volumes:
      - ./db-data:/var/lib/mysql

配布されているmysql:5.7.18の公式イメージを利用します。コンテナが破棄されてもデータが残るよう、volumesでホストマシンのディレクトリー(./db-data)とdbコンテナのデータ領域(/var/lib/mysql)をマウントしデータの永続化を行います。

MySQLへ接続するためのパスワードは、docker-compose.ymlに依存しないよう、外部ファイル(.env)に定義しておきます。

データボリュームコンテナを作成

# docker-compose.ymlのappコンテナ部分を抜粋
  app:
    build: ./app
    volumes:
      - /usr/local/nginx/html

複数のコンテナ間で共有したい永続的なデータを扱う場合、データボリュームコンテナと呼ばれるコンテナを作成し、各コンテナにマウントして利用することが推奨されています。

次の内容でDockerfileを作成し、appフォルダに格納してください。appコンテナでは、WordPressの最新データを取得しnginxのドキュメントルートに配置し、所有者権限の変更を行います。

FROM debian:jessie

# 必要なツールをインストールする
RUN apt-get update && apt-get -y install wget

# 最新版のWordPressをダウンロードしドキュメントルートに配置、所有者の変更を行う
RUN cd /tmp/ && wget https://ja.wordpress.org/latest-ja.tar.gz && tar -xzvf latest-ja.tar.gz \
&& cd wordpress && mkdir -p /usr/local/nginx/html/ && mv * /usr/local/nginx/html/. \
&& chown -R www-data:www-data /usr/local/nginx/html

以上で、設定ファイルの作成は完了です。次のページでは起動コマンドを実行しサービスを立ち上げる手順を説明します。