PHP
Apache
開発環境
PHP5.3
docker

Dockerを利用してPHP5.3 / Apache2 のローカル環境を構築する方法

More than 1 year has passed since last update.

はじめに

PHP 7.2がそろそろリリースされようとする昨今ですが、まだPHP5.3を利用しているシステムも少なくないと思います。今回はDockerを利用してPHP5.3/Apacheのローカル環境を構築する方法をまとめます。

なぜ Docker を利用するのか

Docker を利用するメリットは以下です

  • 起動が高速
  • 他開発者と環境と共有・統一できる
  • 調整が簡単

前提

構築手順

方針を簡単にまとめると、Docker で PHP5.3/Apacheのイメージを作成し、それをdocker-composeで起動して利用する方針です。手順は以下にまとめます。

Docker Image を準備

Ubuntu 12.04 は初期状態で PHP 5.3.10 がインストール可能なのでそれを利用します。以下ファイルを用意します。

Dockerfile
FROM ubuntu:12.04
MAINTAINER Your Name <your@email.com>

VOLUME ["/var/www"]

# PHP 5.3 + Apache で必要なパッケージをインストール
RUN apt-get -qq update \
    && apt-get install -y -qq --no-install-recommends \
      apache2 \
      libapache2-mod-php5 \
      php5

COPY run /usr/local/bin/run
RUN chmod +x /usr/local/bin/run

EXPOSE 80
CMD ["/usr/local/bin/run"]
run
#!/bin/bash
set -e

# Apacheの環境変数を読み込み、Apache2をフォアグランドで起動。これによりコンテナ起動時にApacheが常時起動になる
source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND

イメージをビルドします。タグ名は好きな名前をつけてください。

$ docker build ./ -t hypermkt/php53-apache

Docker Hub にイメージを push

docker コマンドを利用して先ほど作成したタグ名を指定して、イメージをpushします。

$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: hypermkt
Password:
Login Succeeded

$ docker push hypermkt/php53-apache:latest

成功すると以下のようにリポジトリが作成されます。

image.png

docker-compose で コンテナを起動

docker-compose.yml ファイルを用意します。ポイントとしては

  • Docker Hub に pushしたイメージを利用する
  • 80ポートにアクセスできるようにする
  • ホストの直下とコンテナ側のドキュメントルートをマウント

を設定します。

docker-compose.yml
version: '2'
services:
  web:
    image: hypermkt/php53-apache
    volumes:
      - ./:/var/www
    ports:
      - "80:80"

コンテナを起動します。

$ docker-compose up

動作確認

確認用にホスト側にphpinfoファイルを用意しておきます。

phpinfo.php
<?php
phpinfo();

ブラウザからアクセスすると、phpinfoが確認できました。

image.png

これで PHP 5.3 + Apache2 環境の構築完了です。

おわりに

今回は最低限の環境を構築したのみでした。WebサービスとなるとさらにPHPの拡張モジュールが必要だったり、Apahceで設定変更も必要になると思いますので、必要に応じて拡張していくと良いと思います。

参考