原文来自于:http://open.daocloud.io/ru-he-zhi-zuo-yi-ge-ding-zhi-de-php-ji-chu-docker-jing-xiang/php
目标:准备一个定制的 PHP 基础镜像。基础镜像,一般为含最小功能的系统镜像,以后的应用镜像都以此为基础。html
本项目代码维护在 DaoCloud/php-apache-image 项目中。mysql
选择 Ubuntu 官方的 14.04 版本为咱们依赖的系统镜像。git
FROM ubuntu:trusty
因全部官方镜像均位于境外服务器,为了确保全部示例能正常运行,DaoCloud 提供了一套境内镜像源,并与官方源保持同步。若是使用 DaoCloud 的镜像源,则指向:
FROM daocloud.io/ubuntu:trusty
github
设置镜像的维护者,至关于镜像的做者或发行方。sql
MAINTAINER Captain Dao <support@daocloud.io>
用 RUN 命令调用 apt-get 包管理器安装 PHP 环境所依赖的程序包。docker
安装依赖包相对比较固定,所以该动做应该尽可能提早,这样作有助于提升镜像层的复用率。apache
RUN apt-get update \ && apt-get -y install \ curl \ wget \ apache2 \ libapache2-mod-php5 \ php5-mysql \ php5-sqlite \ php5-gd \ php5-curl \ php-pear \ php-apc \
用 RUN 命令调用 Linux 命令对 Apache 服务和 PHP 参数进行配置。ubuntu
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf \
用 RUN 命令调用 mkdir 来准备一个干净的放置代码的目录。bash
RUN mkdir -p /app && rm -rf /var/www/html && ln -s /app /var/www/html
将本地的代码添加到目录,并指定其为当前的工做目录。
COPY . /app WORKDIR /app
设置启动脚本的权限,指定暴露的容器内端口地址。
最后指定容器启动的进程。
RUN chmod 755 ./start.sh EXPOSE 80 CMD ["./start.sh"]
至此一个 PHP 的基础镜像制做完毕,你能够在本地运行 docker build -t my-php-base .
来构建出这个镜像并命名为 my-php-base
。
因为网络环境的特殊状况,在本地运行
docker build
的时间会很长,而且有可能失败。推荐使用 DaoCloud 加速器 和 DaoCloud 的云端 代码构建 功能。
# Ubuntu 14.04,Trusty Tahr(可靠的塔尔羊)发行版 FROM ubuntu:trusty # 道客船长荣誉出品 MAINTAINER Captain Dao <support@daocloud.io> # APT 自动安装 PHP 相关的依赖包,如需其余依赖包在此添加 RUN apt-get update \ && apt-get -y install \ curl \ wget \ apache2 \ libapache2-mod-php5 \ php5-mysql \ php5-sqlite \ php5-gd \ php5-curl \ php-pear \ php-apc \ # 用完包管理器后安排打扫卫生能够显著的减小镜像大小 && apt-get clean \ && apt-get autoclean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \ # 安装 Composer,此物是 PHP 用来管理依赖关系的工具 # Laravel Symfony 等时髦的框架会依赖它 && curl -sS https://getcomposer.org/installer \ | php -- --install-dir=/usr/local/bin --filename=composer # Apache 2 配置文件:/etc/apache2/apache2.conf # 给 Apache 2 设置一个默认服务名,避免启动时给个提示让人紧张. RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf \ # PHP 配置文件:/etc/php5/apache2/php.ini # 调整 PHP 处理 Request 里变量提交值的顺序,解析顺序从左到右,后解析新值覆盖旧值 # 默认设定为 EGPCS(ENV/GET/POST/COOKIE/SERVER) && sed -i 's/variables_order.*/variables_order = "EGPCS"/g' \ /etc/php5/apache2/php.ini # 配置默认放置 App 的目录 RUN mkdir -p /app && rm -rf /var/www/html && ln -s /app /var/www/html COPY . /app WORKDIR /app RUN chmod 755 ./start.sh EXPOSE 80 CMD ["./start.sh"]