Docker Compose での Web/DB 環境構築例(PHPイメージ使用パターン)

スポンサーリンク

概要

Docker Compose を使って、Web+DB の環境を作成する例です。
Web サーバは、DockerHub の PHP イメージ (https://hub.docker.com/_/php/)、 DB は MySQL を使います。

結局ボツにしたのですが、せっかくなので構築したところまでをメモにしておきます。
最後まで構築したパターンは PHPイメージではなく CentOS7イメージを使用しましたのでご参考まで。
Docker Compose での Web/DB 環境構築例

設定

下記は、docker-compose.yml の Web サーバ部分です。
内容については、Docker Compose での Web/DB 環境構築例 とかぶるので省略。

  apache-php:
    container_name: memo_apache_php
    build: ./apache-php
    image: memo_apache_php
    restart: always
    ports:
      - "8080:80"
    volumes:
      - ./html:/var/www/html
    depends_on:
      - mysql

DB は、Docker Compose で MySQLを構築 とほぼ同じ。

下記は、apache-php/Dockerfile の内容です。

FROM php:7.3-apache
RUN apt-get update \
  && apt-get upgrade -y sendmail \
  && a2enmod rewrite \
  && docker-php-ext-install pdo_mysql mysqli mbstring


COPY conf/php.ini-production "$PHP_INI_DIR/php.ini"
COPY mail_config.sh /tmp
RUN chmod +x /tmp/mail_config.sh
CMD /tmp/mail_config.sh && apache2-foreground

以下、解説です。

 FROM php:7.3-apache

PHP7.3 が使いたかったのでこうしました。
Apache をチョイスしましたが、Apache 以外の Web サーバもあるので、好みの構成をチョイスできます。

 RUN apt-get update \
  && apt-get upgrade -y sendmail \
  && a2enmod rewrite \
  && docker-php-ext-install pdo_mysql mysqli mbstring

まず、パッケージのアップデートを行います。
メール送信したいので、sendmail をインストールします。
mod_rewrite を使いたいため、a2enmod rewrite を実行します。Debian 系ではこうやるらしい。。。
docker-php-ext-install を使って、必要な PHP モジュールをインストールしています。

 COPY conf/php.ini-production "$PHP_INI_DIR/php.ini"

PHP の設定ファイルをイメージに配置します。
conf/php.ini-production をあらかじめ作成しておく必要があります。
ひな形は、https://hub.docker.com/_/php/ に development と production のパターンが置いてあるので使うことができます。

 COPY mail_config.sh /tmp
 RUN chmod +x /tmp/mail_config.sh
 CMD /tmp/mail_config.sh && apache2-foreground

sendmail の設定です。
下記のような mail_config.sh を作成し、イメージ作成時に実行します。
mail_config.sh は https://qiita.com/toshi-click/items/196781f4cd163ec83a94 を参考にしました。

#!/bin/sh
host=$(hostname)
line=$(cat /etc/hosts |grep [1]27.0.0.1)
echo "$line localhost localhost.localdomain $host" >> /etc/hosts
echo "$host" >> /etc/mail/relay-domains
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
sendmail -bd

最後は、apache2-foreground を実行して終わるようにします。

ボツにした理由

ボツにした理由は、、、、DockerHub の PHP イメージは Debian をベースにして作られており、カスタマイズする際に Debian の知識が必要だったためです。
自分は Debian はあまり使ってこなかったので(/_\*) 
WordPress を単に動かすだけならこれで十分だったのですが、その他いろいろとカスタマイズしようとすると、Debian の知識が必要になってきてしまって面倒なので、CentOS7 で作り直しました(/_\*) 
ちなみに、DockerHub の PHP イメージの中では CentOS 系のものは無さそうだったのと、公式イメージ以外で良さげな PHP イメージを探してみたのですがなかなか見つからず、探すのに時間がかかるくらいならいっそのこと CentOS7 のイメージでいいじゃないか、、、、ということで構築したのが下記になります(^_^;)
Docker Compose での Web/DB 環境構築例

コメント

タイトルとURLをコピーしました