実務で、Dockerfileを色々いじっていたんのでそこで得た気づきなどを。
Contents
基本的な構成の考え
以前はCentOSを入れてその中にphp、MySQL、nodeなどを入れていましたが、これらは当然別々にします。そもそもプロセスごとに色々な環境を組み合わせられるのがメリットだと思うので。
本当はphpとapacheも別にすべきのようですが、さわりの部分では一緒に進めます。
やり始めは例えばなんらかのフレームワークを入れるとしても
- PHP+Apache(アプリ相当部分)
- MySQL
- node(npm)
ぐらいでいいと思います。
アプリに関して
CentOS入れても問題はないんですけど、単純に重いことが多く、たくさんの環境を作っているとおそらくディスク容量が一杯になってしまうと思います。
一般的にはubuntuやalpineなどを使うと比較的軽量にすむことが多いため、これらが使うことが一般的なようです。
ただし難点もありまして、当然yumは使えませんし、最小構成だとvimすら使えません。
自分が書いたDockerfileは以下のようなものです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
FROM php:7.3-apache RUN apt-get update \ && apt-get install -y zlib1g-dev libpq-dev unzip re2c \ && php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer ENV APACHE_DOCUMENT_ROOT=/var/www/html/public RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf RUN a2enmod rewrite headers RUN docker-php-ext-install \ pdo_mysql \ && pecl install mailparse \ && docker-php-ext-enable mailparse WORKDIR /var/www/html |
注意点(かつ色々つまづいた点)としては下記のような点です。
- htaccessでのmod_rewriteを使うにはapacheじゃないとだめ(nginxだと使えません。)
-
123ENV APACHE_DOCUMENT_ROOT=/var/www/html/publicRUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.confRUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
の部分でDocumentRootを修正 - RUN a2enmod rewrite headers しないと mod_rewrite が有効になりません。
- PHPの拡張ライブラリは docker-php-ext-install pdo (コア部分)などで入れる
- peclのものは pecl install mailparse && docker-php-ext-enable mailparse