Set up PHP enviroment with Docker
Set up PHP develop eviroment with docker.
docker image
I created my image based on offical 5.5-apache image, with following:
FROM php:5.5-apache
# install wget and unzip in order to install php extensions from github
RUN apt-get update && apt-get install -y wget unzip
# enable mbstirng as we can't controll the compilation flag of php
RUN docker-php-ext-install mbstring
# install mcrypt and pdo
RUN apt-get update && apt-get install -y libmcrypt-dev \
&& docker-php-ext-install mcrypt \
&& docker-php-ext-install mysql
# install redis extension
WORKDIR /root
RUN wget https://github.com/nicolasff/phpredis/archive/2.2.5.zip \
&& unzip 2.2.5.zip \
&& mv phpredis-2.2.5 /usr/src/php/ext/phpredis \
&& docker-php-ext-install phpredis
#RUN cp /usr/local/etc/php/conf.d/ext-phpredis-2.2.5.ini /etc/php5/mods-available/redis.ini
# install timecop
RUN wget https://github.com/hnw/php-timecop/archive/master.zip \
&& unzip master.zip \
&& mv php-timecop-master /usr/src/php/ext/php-timecop \
&& docker-php-ext-install php-timecop
RUN mkdir /var/log/httpd/
RUN mkdir -p /var/log/ci && chmod 777 /var/log/ci
COPY load.conf /etc/apache2/mods-enabled/
COPY klab.conf /etc/apache2/sites-enabled/
COPY klab_mainte.conf /etc/apache2/sites-enabled/
COPY php.ini /usr/local/etc/php/
mbstring, mcrypt, mysql, redis, timecop is the php extension needed by my project. Note that they should be installed through offically provided docker-php-ext-install command. load.conf contains configure that enables apache module needed by my project, like mod_rewrite.
klab.conf is the directory configure for my site.
klab_mainte.conf contains the rewrite rules for my site.
php.ini is for php configuration, here I only edited the error level, enabled short tags, set timezone.
docker composer
As I need redis container, so I used docker composer with:
web:
build: .
ports:
- "8080:80"
volumes:
- klab-php:/klab
links:
- redis
redis:
image: redis
I used volumes to share my source code with container. The strange thing is that, when I used docker1.4, volumes won’t work with docker-composer, it just won’t mount. But start container directly with -v will work. It is solved as I upgrade my docker to 1.5.
Start
docker-composer up -d
, here we go!