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

来源:互联网 发布:知乎怎么私信匿名用户 编辑:程序博客网 时间:2024/06/05 11:50

标题很长,但其实问题只是『如何在一个干净的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:latestRUN apt-get update \    && apt-get install -y apache2 php5 php5-dev php5-gd php5-mysql php5-curl --no-install-recommendsENV PHP_INI_DIR /usr/local/etc/phpRUN 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/htmlRUN apt-get install -y autoconf gcc make --no-install-recommendsRUN 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.loadCOPY mongo-1.6.13.tgz /tmp/mongo-1.6.13.tgzRUN 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 cleanCOPY redis-2.2.7.tgz /tmp/redis-2.2.7.tgzRUN 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 cleanCOPY mongo.ini /etc/php5/apache2/conf.d/mongo.iniCOPY redis.ini /etc/php5/apache2/conf.d/redis.iniRUN mv /etc/apache2/apache2.conf /etc/apache2/apache2.conf.distCOPY apache2.conf /etc/apache2/apache2.confVOLUME ["/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/htmlEXPOSE 80CMD ["apache2-foreground"]

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

0 0