Docker 制作Apache+PHP+GD+MongoDB+Redis镜像

标题很长,但其实问题只是『如何在一个干净的Debian系统上安装PHP的运行环境』,对于一个Javaer来说,这才是问题。

所以,我们首先采用了最笨拙的办法,先拉取一个Debian的镜像(debian:latest),然后启动它,并进入/bin/bash。

#docker run -it --name d0 -p 8801:80 -v /home/yancheng:/tmp debian:latest /bin/bash

之所以映射了80,是为了调试PHP方便,可以一边改一边调测。而挂载本地目录,只是为了上传文件(只须将文件放到本地的/home/yancheng下,就可以虚拟机中通过/tmp访问它,便于我方便的得到所需要的软件包)。

使用apt-get install 安装所需要的软件,包括 apache2,php5,php-gd 等等,甚至于vim,curl,gcc,make 等等。

对于像MongoDB和Redis的这一类安装,只能通过源码,可以用curl下载tgz,用tar解开,然后 phpize + configure + make 它们。

当然,中间少不了一些配置的修改,就用vi直接编辑即可。

边学习边研究,折腾好一阵子。直至能访问你的测试页phpinfo,并且看到想要的mod都已安装。

现在,我们可以将容器保存成镜像。

#docker commit 88f3b8b52f84 debian/apache-php:0.0.1

这样,我们就得到一个可用的镜像了,可以这样使用它。

#docker run -it --name web0 -p 8880:80 -v /home/myweb/htdocs:/var/www/html debian/apache-php:0.0.1

嗯,然后你进入了一个/bin/bash环境,需要手动去启动apache2,这样就可以通过8880访问到你的PHP网站了。之后,可以用Ctrl-P + Ctrl-Q 退出容器让它后台持续运行。

如果上面的操作都OK了,说明你也已掌握了制作PHP镜像的正确步骤,现在可以使用Dockerfile来制作一个能达到同样效果但是更精简更优秀的镜像了。

FROM debian:latest

RUN apt-get update \
    && apt-get install -y apache2 php5 php5-dev php5-gd php5-mysql php5-curl --no-install-recommends

ENV PHP_INI_DIR /usr/local/etc/php

RUN rm -rf /var/www/html \
    && mkdir -p /var/lock/apache2 /var/run/apache2 /var/log/apache2 /var/www/html \
    && chown -R www-data:www-data /var/lock/apache2 /var/run/apache2 /var/log/apache2 /var/www/html

RUN apt-get install -y autoconf gcc make --no-install-recommends

RUN cd /etc/apache2/mods-enabled \
    && ln -s ../mods-available/rewrite.load rewrite.load \
    && ln -s ../mods-available/authz_groupfile.load authz_groupfile.load \
    && ln -s ../mods-available/reqtimeout.load reqtimeout.load \
    && ln -s ../mods-available/reqtimeout.conf reqtimeout.conf \
    && ln -s ../mods-available/headers.load headers.load

COPY mongo-1.6.13.tgz /tmp/mongo-1.6.13.tgz
RUN cd /tmp \
    && tar zxvf mongo-1.6.13.tgz \
    && cd mongo-1.6.13 \
    && phpize \
    && ./configure \
    && make \
    && make install \
    && mv modules/mongo.so /usr/lib/php5/20131226/mongo.so \
    && make clean

COPY redis-2.2.7.tgz /tmp/redis-2.2.7.tgz
RUN cd /tmp \
    && tar zxvf redis-2.2.7.tgz \
    && cd redis-2.2.7 \
    && phpize \
    && ./configure \
    && make \
    && make install \
    && mv modules/redis.so /usr/lib/php5/20131226/redis.so \
    && make clean


COPY mongo.ini /etc/php5/apache2/conf.d/mongo.ini
COPY redis.ini /etc/php5/apache2/conf.d/redis.ini

RUN mv /etc/apache2/apache2.conf /etc/apache2/apache2.conf.dist
COPY apache2.conf /etc/apache2/apache2.conf


VOLUME ["/var/www/html"]

RUN rm -r -f /var/lib/apt/lists/* \
    && rm /etc/apache2/conf-enabled/* /etc/apache2/sites-enabled/*

COPY apache2-foreground /usr/local/bin/
WORKDIR /var/www/html

EXPOSE 80

CMD ["apache2-foreground"]

需要的软件包及配置文件,我放到GitHub上了,地址是:https://github.com/sharetop/docker-debian-apache-php

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页