Docker環境でApacheとPHPを連携する設定方法【完全ガイド】

DockerでApacheとPHPを連携させてWebサーバー環境を構築する方法は、効率的な開発環境を整える上で非常に有用です。Dockerを活用することで、従来のローカル環境構築の煩雑さを排除し、必要な設定がコンテナ内で完結します。これにより、開発から本番環境への移行がスムーズになり、一貫性のある環境を維持できます。

本記事では、Dockerを用いてApacheとPHPを連携させる手順を初心者にも分かりやすく解説します。Docker Composeを使用してApacheサーバーとPHPを同時に立ち上げる構成を作成し、簡単にWebサーバー環境を構築できる方法を具体例と共に紹介します。

実際の設定例やファイル作成の手順を詳しく解説するので、この記事を読めばDocker環境でApacheとPHPを連携し、動作確認まで行えるスキルが身につくでしょう。

Docker環境でApacheとPHPを連携する理由とメリット


Dockerを使ってApacheとPHPを連携させることには、開発効率を向上させる多くのメリットがあります。従来の方法では、ローカル環境へのApacheやPHPのインストールに手間がかかり、設定のミスや環境依存の問題が発生しやすいですが、Dockerを活用することでこれらの課題を解決できます。

Dockerで環境を構築するメリット

  • 環境の一貫性
    Dockerコンテナを使用することで、開発環境と本番環境の差異がなくなり、一貫性を保てます。これにより、「開発環境では動作するが本番環境ではエラーが出る」といった問題が解消されます。
  • セットアップの簡易化
    Docker Composeを使えば、複数のコンテナ(ApacheとPHPなど)を一度に立ち上げることができ、手動で個別に設定する必要がありません。必要な設定を記述したファイル(docker-compose.yml)を共有することで、誰でも同じ環境を瞬時に再現できます。
  • スケーラビリティ
    Dockerはリソースを効率的に活用できるため、複数のプロジェクトやアプリケーションを同時に管理する際にも有効です。また、ApacheやPHPのバージョンを容易に切り替えることが可能です。

ApacheとPHPをDockerで連携させる利点


Apacheは世界中で利用されているWebサーバーであり、PHPは動的なWebアプリケーションの開発に欠かせません。この2つをDockerで連携させることにより、次の利点が得られます。

  • 開発と本番環境の差異を排除
    PHPのバージョンやApacheの設定を同一のコンテナで管理できるため、本番環境へのデプロイがスムーズになります。
  • 迅速なテストとデバッグ
    Docker環境でPHPのコードをテストし、即座に反映できるため、開発サイクルが短縮されます。
  • セキュリティの向上
    コンテナが独立しているため、環境が汚染される心配が少なく、不要なサービスが起動しないためセキュリティリスクも軽減されます。

Dockerを使ったApacheとPHPの連携は、現代のWeb開発において必須ともいえる技術です。本記事では、具体的な構築方法を次章から詳しく解説していきます。

Docker Composeの概要とインストール方法


Docker Composeは、複数のDockerコンテナを簡単に管理・構築できるツールです。ApacheやPHPなどのサービスをそれぞれ独立したコンテナとして動かし、それらを連携させることで柔軟なWebサーバー環境を構築できます。

Docker Composeの特徴

  • マルチコンテナ管理
    1つのコマンドで複数のコンテナを立ち上げ、連携させることが可能です。Apache、PHP、MySQLなどを一度に起動できるため、複雑な環境構築が容易になります。
  • 設定の簡易化
    docker-compose.ymlという1つの設定ファイルにすべてのコンテナ情報を記述するだけで、環境構築が完了します。
  • 環境の再現性
    どの環境でも同じYAMLファイルを使えば、同一のサーバー環境を再現できます。チームでの開発やデプロイ作業がスムーズになります。

Docker Composeのインストール方法


Docker Composeをインストールするには、以下の手順を実行します。

1. Dockerがインストールされているか確認


“`bash
docker –version

Dockerがインストールされていない場合は、[公式サイト](https://docs.docker.com/get-docker/)からDockerをインストールしてください。  

<h4>2. Docker Composeのインストール</h4>  
次に、Docker Composeをインストールします。  
**Linux**  

bash
sudo curl -L “https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

**MacOS**と**Windows**ではDocker Desktopをインストールすれば、Composeが付属しています。  

<h4>3. インストールの確認</h4>  
インストールが完了したら、以下のコマンドで確認します。  

bash
docker-compose –version

正しくバージョンが表示されれば、インストール完了です。  

<h3>インストール後の準備</h3>  
Docker Composeの基本的な使い方を習得するために、次のセクションでは実際にApacheとPHPをDocker Composeで構築する手順を解説します。
<h2>Docker ComposeでApache+PHP環境を構築するファイルの作成</h2>  
Docker Composeを使えば、ApacheとPHPを簡単に連携させた環境を構築できます。ここでは、`docker-compose.yml`ファイルを作成し、ApacheとPHPが連携して動作する環境を構築する方法を解説します。  

<h3>docker-compose.ymlの基本構成</h3>  
以下は、ApacheとPHPを連携させるための基本的な`docker-compose.yml`ファイルの例です。  

yaml
version: ‘3.8’
services:
web:
image: httpd:latest
container_name: apache
ports:
– “8080:80”
volumes:
– ./html:/usr/local/apache2/htdocs
php:
image: php:latest
container_name: php
volumes:
– ./html:/var/www/html

<h3>構成のポイント解説</h3>  
- **バージョン指定**:`version`ではDocker Composeのバージョンを指定します。`3.8`は安定版の一例です。  
- **サービス(services)**:`web`と`php`という2つのサービスを定義しています。  
- **イメージ(image)**:Apacheは`httpd:latest`、PHPは`php:latest`という公式イメージを使用します。  
- **ポートマッピング**:`8080:80`で、ホストの8080ポートからコンテナ内のApacheの80番ポートへアクセスできるようにしています。  
- **ボリュームマウント(volumes)**:ホストの`html`ディレクトリをコンテナ内のWebサーバールートにマウントし、PHPとApacheが同じファイルを参照できるようにします。  

<h3>ディレクトリ構成例</h3>  


project/

├── docker-compose.yml
└── html/
└── index.php

`html`フォルダ内にPHPファイルを設置し、ApacheとPHPの両方で参照します。  

<h3>index.phpのサンプル</h3>  

php

このファイルはPHPが正しく動作しているか確認するためのシンプルなコードです。  

<h3>次のステップ</h3>  
次はPHP用のDockerfileを作成し、より細かい設定を行います。これにより、ApacheとPHPがより密接に連携し、動的なWebサイトを構築できる環境が整います。
<h2>PHP用Dockerfileの作成と設定</h2>  
Docker ComposeでApacheとPHPを連携させる際、PHPの環境を細かくカスタマイズするためにはDockerfileを作成する必要があります。Dockerfileを使うことで、必要なPHPモジュールをインストールし、独自の設定を施したPHPコンテナを構築できます。  

<h3>Dockerfileの作成</h3>  
まず、PHP用のDockerfileを`php`ディレクトリ内に作成します。ディレクトリ構成は以下の通りです。  


project/

├── docker-compose.yml
├── html/
│ └── index.php
└── php/
└── Dockerfile

<h3>Dockerfileの記述例</h3>  
以下は、PHP 8.xの環境を構築し、必要な拡張モジュールをインストールするDockerfileのサンプルです。  

dockerfile

ベースイメージの指定

FROM php:8.1-apache

必要なパッケージをインストール

RUN apt-get update && apt-get install -y \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
&& docker-php-ext-configure gd \
–with-freetype –with-jpeg \
&& docker-php-ext-install gd

Apacheのmod_rewriteを有効化

RUN a2enmod rewrite

PHPの設定ファイルをコピー

COPY php.ini /usr/local/etc/php/

<h3>構成のポイント解説</h3>  
- **FROM php:8.1-apache**:PHP 8.1とApacheがセットになった公式イメージを利用します。  
- **RUN apt-get update**:コンテナ内のパッケージリストを更新し、必要なライブラリをインストールします。  
- **docker-php-ext-configure**:`gd`などの拡張モジュールを設定し、インストールします。  
- **a2enmod rewrite**:ApacheでURLの書き換えができる`mod_rewrite`を有効にします。  
- **php.iniのコピー**:独自の`php.ini`を作成し、コンテナに配置します。これによりPHPの動作をカスタマイズできます。  

<h3>php.iniの例</h3>  
`php.ini`を`php`ディレクトリに作成し、以下のように記述します。  

ini
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 300

これにより、PHPのアップロードファイルサイズやメモリ制限を調整できます。  

<h3>docker-compose.ymlの修正</h3>  
作成したDockerfileを使用するように`docker-compose.yml`を修正します。  

yaml
php:
build: ./php
container_name: php
volumes:
– ./html:/var/www/html

これで、PHPコンテナはDockerfileを元にビルドされ、Apacheと連携して動作します。次のステップでは、Apacheの設定ファイルを作成し、Webサーバーの設定を行います。
<h2>Apacheの設定ファイル作成と構成</h2>  
ApacheがPHPと適切に連携し、Webサイトを正しく動作させるためには、Apacheの設定ファイル(`httpd.conf`や`.htaccess`)を作成・編集する必要があります。ここでは、Apacheの設定をDocker環境で行う手順を解説します。  

<h3>Apache設定ファイルの作成</h3>  
`php`ディレクトリ内にApacheの設定ファイル`httpd.conf`を作成します。ディレクトリ構成は以下の通りです。  


project/

├── docker-compose.yml
├── html/
│ └── index.php
└── php/
├── Dockerfile
└── httpd.conf

<h3>httpd.confの記述例</h3>  
基本的な`httpd.conf`の内容は以下の通りです。PHPを処理できるように設定し、必要なディレクティブを追加します。  

apache
ServerRoot “/etc/apache2”
Listen 80

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
LoadModule php_module modules/libphp.so
LoadModule rewrite_module modules/mod_rewrite.so

ServerAdmin webmaster@example.com
DocumentRoot “/var/www/html”
Options Indexes FollowSymLinks AllowOverride All Require all granted

ErrorLog /proc/self/fd/2
CustomLog /proc/self/fd/1 common

<h3>構成のポイント解説</h3>  
- **DocumentRoot**:Apacheが公開するドキュメントのルートディレクトリを指定しています。ここでは`/var/www/html`がWebサイトのルートになります。  
- **AllowOverride All**:`.htaccess`を利用可能にする設定です。これにより、ディレクトリ単位で設定変更が可能になります。  
- **mod_rewriteの有効化**:`LoadModule rewrite_module`でURLのリライト機能を有効化します。これによりSEOや動的URLの作成が容易になります。  
- **エラーログの出力**:Dockerコンテナ内の標準出力/エラー出力にログを記録するように設定し、Dockerの`docker logs`コマンドで参照できるようにしています。  

<h3>.htaccessファイルの作成</h3>  
必要に応じて、`html`ディレクトリ内に`.htaccess`を作成し、URLリライトなどの設定を追加します。  


project/

├── docker-compose.yml
├── html/
│ ├── .htaccess
│ └── index.php
└── php/
├── Dockerfile
└── httpd.conf

<h4>.htaccessの例</h4>  

apache
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

この設定は、存在しないファイルやディレクトリへのアクセスを`index.php`にリダイレクトする、シンプルなルーティングルールです。  

<h3>docker-compose.ymlの修正</h3>  
作成したApacheの設定ファイルを使うように`docker-compose.yml`を修正します。  

yaml
web:
image: httpd:latest
container_name: apache
ports:
– “8080:80”
volumes:
– ./html:/usr/local/apache2/htdocs
– ./php/httpd.conf:/usr/local/apache2/conf/httpd.conf

<h3>次のステップ</h3>  
次は、Dockerコンテナをビルドして起動し、Apache+PHP環境が正しく動作することを確認します。これにより、WebサイトをDocker環境で運用できるようになります。
<h2>Dockerコンテナのビルドと起動方法</h2>  
ApacheとPHPの環境設定が完了したら、次はDockerコンテナをビルドして起動します。ここでは、Docker Composeを使ってコンテナを構築し、Webサーバーを動かす手順を解説します。  

<h3>Dockerコンテナのビルド</h3>  
以下のコマンドで、PHPとApacheのコンテナをビルドします。  

bash
docker-compose build

このコマンドは、`docker-compose.yml`内の`build`セクションを元にDockerfileをビルドし、カスタマイズされたPHPコンテナを作成します。  

<h3>Dockerコンテナの起動</h3>  
ビルドが完了したら、次のコマンドでコンテナを起動します。  

bash
docker-compose up -d

- **`-d`オプション**:バックグラウンドでコンテナを起動します。  
- コンテナが起動すると、ApacheとPHPが連携したWebサーバーが`http://localhost:8080`でアクセス可能になります。  

<h3>動作確認</h3>  
ブラウザで以下のURLにアクセスし、PHPが動作しているか確認します。  


http://localhost:8080

`index.php`に`phpinfo()`が記述されていれば、PHPの情報が表示されます。  

<h3>コンテナの状態確認</h3>  
コンテナが正常に起動しているか確認するには、以下のコマンドを使用します。  

bash
docker-compose ps

出力例:  

Name Command State Ports

apache httpd-foreground Up 0.0.0.0:8080->80/tcp
php docker-php-entrypoint Up 9000/tcp

<h3>ログの確認</h3>  
コンテナのログを確認して、エラーがないかチェックします。  

bash
docker-compose logs

リアルタイムでログを確認する場合は以下のようにします。  

bash
docker-compose logs -f

<h3>コンテナの停止</h3>  
作業が完了したら、以下のコマンドでコンテナを停止します。  

bash
docker-compose down

これにより、すべてのコンテナが停止し、ネットワークやボリュームも削除されます。  

<h3>次のステップ</h3>  
次は、PHPファイルの配置や動作確認を行い、ApacheとPHPの連携が正しく動作するかを確認します。また、動作しない場合はトラブルシューティングを行い、環境を整えます。
<h2>PHP動作確認とApacheサーバーへの接続確認</h2>  
Dockerコンテナが起動したら、PHPとApacheが正しく動作しているか確認します。このセクションでは、PHPスクリプトを実行してサーバーが正常に動作しているかを確認する手順を解説します。  

<h3>PHPファイルの配置</h3>  
`html`ディレクトリにPHPのテストファイルを作成します。これにより、ApacheがPHPファイルを正しく処理できるかを確認します。  


project/

├── docker-compose.yml
├── html/
│ └── index.php
└── php/
├── Dockerfile
└── httpd.conf

<h4>index.phpの記述例</h4>  
`html/index.php`に以下のコードを記述します。  

php

このスクリプトは、PHPが動作している環境の詳細情報を表示します。  

<h3>Webブラウザでの動作確認</h3>  
Dockerコンテナが起動している状態で、Webブラウザから以下のURLにアクセスします。  


http://localhost:8080

以下のようにPHPの情報が表示されれば、ApacheとPHPの連携が成功しています。  
- PHPのバージョン  
- 設定済みの拡張モジュール一覧  
- 環境変数  

<h3>動作しない場合の確認事項</h3>  
アクセスしてもページが表示されない、またはエラーが出る場合は以下を確認してください。  

<h4>1. コンテナが起動しているか確認</h4>  

bash
docker-compose ps

状態が`Up`になっていない場合は以下のコマンドで再起動します。  

bash
docker-compose restart

<h4>2. ログの確認</h4>  

bash
docker-compose logs

ApacheのエラーログやPHPのログにエラーが出力されていないか確認します。  

<h4>3. ポートの競合</h4>  
他のサービスがポート`8080`を使用している可能性があります。その場合は`docker-compose.yml`の`ports`セクションを修正します。  

yaml
ports:

  • “8081:80”
修正後、`http://localhost:8081`でアクセス可能になります。  

<h3>次のステップ</h3>  
動作確認が完了したら、PHPで簡単なWebアプリケーションを作成したり、データベースと連携させたりして、さらに高度な環境を構築します。次のセクションでは、トラブルシューティングや、よくあるエラーの解決方法について解説します。
<h2>トラブルシューティングとよくあるエラーの解決方法</h2>  
Docker環境でApacheとPHPを連携する際、予期せぬエラーが発生することがあります。このセクションでは、よくあるエラーとその解決方法について解説します。  

<h3>1. ページが表示されない (404エラー)</h3>  
**原因**: Apacheがリクエストされたファイルを見つけられない場合に発生します。  
**解決方法**:  
- `html`ディレクトリに`index.php`が存在するか確認します。  
- docker-compose.ymlでボリュームのパスが正しいか確認します。  

yaml
volumes:

  • ./html:/usr/local/apache2/htdocs
- `html`フォルダのパスがプロジェクト直下に存在しているか確認します。  

bash
ls project/html/

<h3>2. 403 Forbiddenエラー</h3>  
**原因**: Apacheのアクセス権限に問題があります。  
**解決方法**:  
- `html`ディレクトリの権限を確認し、必要に応じて修正します。  

bash
chmod -R 755 html

- Apacheの設定ファイル`httpd.conf`で、`Require all granted`が記述されているか確認します。  

apache
Options Indexes FollowSymLinks AllowOverride All Require all granted

- コンテナを再起動します。  

bash
docker-compose restart

<h3>3. PHPが実行されず、ソースコードが表示される</h3>  
**原因**: ApacheがPHPを処理できていない可能性があります。  
**解決方法**:  
- PHPモジュールが有効になっているか確認します。`Dockerfile`で`libphp`モジュールがロードされているかをチェックします。  

dockerfile
LoadModule php_module modules/libphp.so

- Apacheの`mod_php`が有効になっているか確認します。  

bash
docker exec -it apache a2enmod php
docker-compose restart

<h3>4. ポートがすでに使用されている (port already in use)</h3>  
**原因**: 他のサービスが`8080`ポートを使用しています。  
**解決方法**:  
- `docker-compose.yml`で別のポートを指定します。  

yaml
ports:

  • “8081:80”
- コンテナを再起動し、新しいポートでアクセスします。  

bash
docker-compose up -d

`http://localhost:8081`にアクセスして確認します。  

<h3>5. Dockerコンテナが起動しない</h3>  
**原因**: Dockerfileや`docker-compose.yml`の記述ミスが考えられます。  
**解決方法**:  
- 設定ファイルの記述にエラーがないか確認します。  

bash
docker-compose config

- エラーメッセージを確認し、記述ミスを修正します。  
- 修正後、再度ビルドと起動を行います。  

bash
docker-compose build
docker-compose up -d
“`

次のステップ


これらのトラブルシューティング方法を身につけることで、Docker環境でのApacheとPHPの連携がよりスムーズになります。最後に、構築した環境を振り返り、まとめに移ります。

まとめ


本記事では、Docker環境でApacheとPHPを連携させる方法を解説しました。Docker Composeを活用することで、複数のコンテナを一括で管理・起動し、開発環境の構築が効率的に行えます。

ApacheとPHPの連携環境を構築することで、ローカル環境の差異を排除し、本番環境と同一の環境を手軽に再現できるようになります。特に、Apacheの設定ファイルやPHPのDockerfileを用いることで、カスタマイズ性が高まり、柔軟なWebアプリケーションの開発が可能になります。

動作確認やエラー対応の方法についても詳しく解説したため、基本的なトラブルシューティングができる知識も身についたはずです。Docker環境を使った開発は今後のWebアプリケーション開発の標準となるため、この記事を参考にぜひ実践してみてください。

コメント

コメントする