PHPとDockerを使った開発環境の構築方法について解説
PHPとDockerの組み合わせで、開発環境の構築がより手軽になります。
Dockerを使うと、アプリケーションの依存関係管理が容易になり、環境間の差異を減らすことが期待できます。
この記事では、Dockerfile
の基本設定や
Dockerfileの設定
PHP環境の基盤設定では、PHPのバージョン指定や必要な拡張モジュールの追加を行います。
Dockerfile内で適切な命令を使うことで、開発環境を簡単に再現できるように整えます。
PHP環境の基盤設定
PHPバージョンの指定
PHPのバージョンを固定することで、ローカル環境と本番環境で同一の動作を保証できます。
例えば、以下のようにFROM
命令を使ってphp:7.4-fpm
イメージを利用する方法があります。
# 使用するPHPのバージョンを指定
FROM php:7.4-fpm
# Dockerビルド実行時に、php:7.4-fpmイメージの取得が始まる
拡張モジュールの追加
PHPでは必要な拡張モジュールを追加することで、アプリケーションの機能を拡張できます。
docker-php-ext-install
を使用して、MySQLやGDなどの拡張をインストールする例です。
以下のサンプルコードは、MySQL接続用のpdo_mysql
拡張モジュールを追加する方法を示しています。
# PHP拡張モジュール(pdo_mysql)をインストール
RUN docker-php-ext-install pdo_mysql
# pdo_mysqlモジュールが有効化され、PHPに追加される
イメージのカスタマイズ
Dockerfile内で、ベースイメージの選定や環境変数の設定を行うことで、より柔軟に環境をカスタマイズできます。
ベースイメージの選定
利用するベースイメージは、プロジェクトで必要な機能やパフォーマンスに合わせて選択します。
例えば、FPM版を利用して高速なリクエスト処理を実現する場合、php:7.4-fpm
イメージが適しています。
必要に応じて、Alpine Linuxベースのコンパクトなイメージを選ぶこともできます。
# PHP FPM版のイメージを使用(Alpine版)
FROM php:7.4-fpm-alpine
# php:7.4-fpm-alpineイメージの取得が行われる
環境変数の設定
環境変数を設定することで、コンテナ内の動作を柔軟に調整可能です。
ENV
命令を使用し、設定値をコード上で扱いやすくすることができます。
以下は、アプリケーションの設定値やデバッグモードの切り替えに利用する例です。
# PHPの実行環境向けの環境変数を設定
ENV APP_ENV=development
ENV DISPLAY_ERRORS=On
# コンテナ起動後、APP_ENVとDISPLAY_ERRORSの値が環境変数として利用可能になる
docker-compose.ymlの設定
docker-compose.ymlでは、複数のコンテナの連携やリソースの同期など、サービス全体としての動作を管理しやすくなります。
ここではサービス定義とリソース同期の調整について説明します。
サービス定義の調整
docker-compose.ymlファイル内で個別サービスの設定を行うことで、PHPコンテナとその他のサービス間の連携を取ることができます。
PHPコンテナの設定
PHPコンテナの設定では、Dockerfileで作成したPHP環境をベースに、必要なポートの公開、ボリュームのマウント、環境変数の設定を行います。
以下は基本的な設定例です。
version: "3.8"
services:
php:
build: .
container_name: php_container
ports:
- "9000:9000"
volumes:
- ./src:/var/www/html
environment:
- APP_ENV=development # 環境変数を上書きできる
# php_containerが9000番ポートで起動し、ローカルのsrcディレクトリがコンテナ内の/var/www/htmlにマウントされる
他サービスとの連携
PHPアプリケーションは、データベースやキャッシュサービスと連携することが多いため、docker-compose.ymlでそれらのサービスの定義を追加します。
以下は、データベースコンテナと連携するサンプル設定です。
version: "3.8"
services:
php:
build: .
container_name: php_container
ports:
- "9000:9000"
volumes:
- ./src:/var/www/html
depends_on:
- db
db:
image: mysql:5.7
container_name: mysql_container
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: sample_db
# phpコンテナはdbコンテナ(MySQL)に依存し、連携して動作する
リソース同期の設定
リソース同期の設定では、ホストとコンテナ間でファイルやネットワークの設定を連携させる方法について説明します。
ボリュームの指定
ボリュームを設定することで、ホストのソースコードなどのリソースをコンテナに同期でき、変更がすぐに反映されます。
たとえば、以下の例のようにボリュームをマウントする設定が有効です。
services:
php:
volumes:
- ./src:/var/www/html # ホストのsrcディレクトリと同期
# ソースコードがコンテナ内の/var/www/htmlにマウントされ、編集内容がリアルタイムで反映される
ネットワーク構成の調整
ネットワーク設定は、複数コンテナ間の通信を管理しやすくするために重要です。
docker-compose.ymlでは、デフォルトネットワークが作成されますが、必要に応じて明示的に設定を行うことができます。
以下は、カスタムネットワークを設定する例です。
version: "3.8"
services:
php:
networks:
- app-network
db:
networks:
- app-network
networks:
app-network:
driver: bridge
# phpとdbの両コンテナがapp-networkというカスタムブリッジネットワーク上で動作する
PHPコンテナの管理
PHPコンテナの管理では、起動・停止の操作やコンテナ再構築、パフォーマンスの調整方法について記述します。
効率的な管理が開発をスムーズに進めるために役立ちます。
コンテナの起動・停止操作
コンテナの起動や停止は、docker-compose
コマンドを使用して行います。
基本動作を理解しておくことで、環境の管理が容易になります。
操作コマンド
基本的な起動・停止コマンドは以下の通りです。
# コンテナの起動
docker-compose up -d
# コンテナの停止
docker-compose down
# docker-compose up -d実行時に、バックグラウンドでコンテナが起動する
# docker-compose down実行時に、コンテナが停止される
再構築手順
Dockerfileやdocker-compose.ymlに変更があった場合、コンテナを再構築する必要があります。
以下のコマンドは、キャッシュを無視して再構築する手順です。
# キャッシュを無視して再構築
docker-compose build --no-cache
# 再構築後、コンテナを再起動
docker-compose up -d
# コマンド実行後、全サービスが最新の設定で再起動される
パフォーマンス調整
PHPコンテナのパフォーマンスを向上させるために、キャッシュ設定やログ出力の調整を行います。
適切な設定により、開発中の問題検出やレスポンス改善が期待できます。
キャッシュ設定の調整
PHPでは、Opcodeキャッシュなどを利用することでコードの実行速度が向上します。
以下は、opcache
の設定例を含むサンプルです。
設定ファイル内でキャッシュのサイズやタイミングを調整できます。
# opcache設定を追加するためのサンプル
RUN echo "opcache.memory_consumption=128" >> /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini && \
echo "opcache.validate_timestamps=1" >> /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini
# opcacheの設定がPHPの構成に反映され、パフォーマンスが向上する
ログ出力の取得
ログ出力の設定により、エラーや挙動を確認しやすくなります。
php.ini
でエラー表示やログファイルのパスを指定する方法を紹介します。
# エラー表示およびログ出力設定の追加
RUN echo "display_errors=On" >> /usr/local/etc/php/conf.d/error.ini && \
echo "error_log=/var/log/php_error.log" >> /usr/local/etc/php/conf.d/error.ini
# エラーがコンソールと指定ファイルに記録され、トラブルシューティングが容易になる
まとめ
この記事では、Dockerfileおよびdocker-compose.ymlを用いたPHP環境構築とコンテナ管理の手法を整理・説明しました。
各設定項目や操作コマンド、パフォーマンス調整のポイントが簡潔に整理され、全体の流れが把握できる内容となっています。
ぜひ、この記事を参考に実プロジェクトに導入し、開発環境の改善へ積極的に取り組んでください。