Dockerでphpの開発環境整備など(開発報告)

かねてからやらないとやらないと、とおもっていた、あいこんくらぶ ( https://iconclub.jp ) ・ぴこぴよ ( https://picopiyo.iconclub.jp ) の開発環境整備(改善)をいい加減やらねばなーと思っていたので、週末をつかってガッとやってしまったのでした。(これやらないといろいろと捨てられなかったりするので、、、)

そのときの作業のメモを残しておきます。

phpのDocker ImageをつかってDockerfileをつくる

まずはphpのDocker Imageをとってきます。公式のイメージ がありますが、利用バージョンや目的に応じていくつかの種類があります。今回は開発環境ウェブサーバ用としたいので、 Apacheとセットのものを使います。

最終的なアプリサーバのDockerfileはこんな感じ。

FROM php:7.0-apache
RUN docker-php-ext-install pdo_mysql
RUN a2enmod headers
RUN a2enmod rewrite
COPY config/php.ini /usr/local/etc/php/

MySQLをデータベースとして使いたいので pdo_mysql をインストールします。pdo_mysql が入っていないことに気づかずにずいぶん時間をつかってしまった...。 (こちらの記事を参考にしました: PDO MySQL driver not found · Issue #62 · docker-library/php · GitHub

さらにさらに、Apacheで有効になっていないモジュールは有効にしてあげる必要があるので、a2enmod をつかって有効にしたいモジュールを設定します。これをやらないと mod_rewrite 等が使えないのでした。

データベース周りと接続する

データベースにはMySQLを使いますが、MySQLまわりも公式イメージをつかいます。このイメージは各種環境変数を設定することで、ルートユーザーのパスワードを設定したり、ユーザーを作成したりすることができます。

MYSQL_USER, MYSQL_PASSWORD でユーザー名とパスワードを、 MYSQL_DATABASE でデータベース名を設定しておくと、ユーザーとデータベースが1つずつ作成され、作成されたデータベースに対して GRANT ALL 権限でアクセスすることができます。開発環境として簡単にDBアカウントを用意できて便利。

最終的な docker-compose.yml は概ねこんな感じ。これで docker-compose up で開発環境が起動できるようになりました。

version: '3'
services:
  app:
    build: .
    hostname: hoge.local
    container_name: app
    ports:
      - '8000:80'
    volumes:
      - ./app/:/var/www/html/
    links:
      - db

  db:
    image: mysql:5.7
    container_name: db
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: piyo
      MYSQL_USER: user
      MYSQL_PASSWORD: piyo
      MYSQL_DATABASE: foo

もうちょっと様子を見て、これでよさそうならよしとしたいぞ。ではではー。