[DockerでLAMP開発環境] Dockerfileでアプリケーションやライブラリを追加してみる

例えば、php:7.2-apacheのデフォルトイメージはvimは入ってないし、PHPの環境としてはPDOもGDも入ってないし、Apacheの環境としてはmod_rewriteも有効になっていません。
またphp.iniも編集したいときがあるでしょう。

そんなときはDockerfileを書いてビルドしてやることにより元のイメージにアプリケーションやライブラリを追加したり設定を変更したりすることができます。
上記の問題をまとめて解決しましょう。
・php.ini修正
・vimのインストール
・PHP拡張モジュールpdo_mysqlとgdを追加
・mod_rewrite有効化

※ベースはDebian系のLinuxなのでaptコマンドで!
※PHP拡張モジュールはdocker-php-ext-installコマンドが用意されてる!

[プロジェクト]
  ┣ conf/
  ┃ ┗ php/
  ┃    ┗ php.ini
  ┣ docker-compose.yml
  ┗ Dockerfile

conf/php/pnp.ini

[Date]
date.timezone = "Asia/Tokyo"

[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"

※起動後に変更したら再起動だね。

Dockerfile

FROM php:7.2-apache

# aptライブラリのインデックス更新
RUN apt-get update

# Vimインストール
RUN apt-get install -y vim

# GDに必要なライブラリのインストール
RUN apt-get install -y libfreetype6-dev
RUN apt-get install -y libjpeg62-turbo-dev
RUN apt-get install -y libpng-dev

# PHP拡張モジュールのインストール
RUN docker-php-ext-install pdo_mysql gd

# Apacheのmod_rewrite有効化
RUN a2enmod rewrite

# php.iniを読み込ませる
COPY ./conf/php/php.ini /usr/local/etc/php

docker-compose.yml

version: '3'
services:
  mysql:
    image: mysql:5.7
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: mypass
    volumes:
      - ./mysql:/var/lib/mysql
    command: --innodb-use-native-aio=0 // 2019.09 この行は不要になっています

  web:
    # image:->build:に変更してDockerfileの場所を指定
    build: .
    ports:
      - "80:80"
    volumes:
      - ./html:/var/www/html
    depends_on:
      - mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=mysql
      - PMA_USER=root
      - PMA_PASSWORD=mypass
    links:
      - mysql
    ports:
      - 8080:80
    volumes:
      - /sessions

buildオプションをつけて起動する!

$ docker-compose up -d --build