├── index.php ├── daocloud.yml ├── start.sh ├── Dockerfile └── README.md /index.php: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /daocloud.yml: -------------------------------------------------------------------------------- 1 | image: daocloud/ci-php:5.6 2 | script: 3 | - echo "Hello World!" -------------------------------------------------------------------------------- /start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | source /etc/apache2/envvars 4 | tail -F /var/log/apache2/* & 5 | exec apache2 -D FOREGROUND 6 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # Ubuntu 14.04,Trusty Tahr(可靠的塔尔羊)发行版 2 | FROM daocloud.io/ubuntu:trusty 3 | 4 | # 道客船长荣誉出品 5 | MAINTAINER Captain Dao 6 | 7 | # APT 自动安装 PHP 相关的依赖包,如需其他依赖包在此添加 8 | RUN apt-get update \ 9 | && apt-get -y install \ 10 | curl \ 11 | wget \ 12 | apache2 \ 13 | libapache2-mod-php5 \ 14 | php5-mysql \ 15 | php5-sqlite \ 16 | php5-gd \ 17 | php5-curl \ 18 | php-pear \ 19 | php-apc \ 20 | 21 | # 用完包管理器后安排打扫卫生可以显著的减少镜像大小 22 | && apt-get clean \ 23 | && apt-get autoclean \ 24 | && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \ 25 | 26 | # 安装 Composer,此物是 PHP 用来管理依赖关系的工具 27 | # Laravel Symfony 等时髦的框架会依赖它 28 | && curl -sS https://getcomposer.org/installer \ 29 | | php -- --install-dir=/usr/local/bin --filename=composer 30 | 31 | # Apache 2 配置文件:/etc/apache2/apache2.conf 32 | # 给 Apache 2 设置一个默认服务名,避免启动时给个提示让人紧张. 33 | RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf \ 34 | 35 | # PHP 配置文件:/etc/php5/apache2/php.ini 36 | # 调整 PHP 处理 Request 里变量提交值的顺序,解析顺序从左到右,后解析新值覆盖旧值 37 | # 默认设定为 EGPCS(ENV/GET/POST/COOKIE/SERVER) 38 | && sed -i 's/variables_order.*/variables_order = "EGPCS"/g' \ 39 | /etc/php5/apache2/php.ini 40 | 41 | # 配置默认放置 App 的目录 42 | RUN mkdir -p /app && rm -rf /var/www/html && ln -s /app /var/www/html 43 | COPY . /app 44 | WORKDIR /app 45 | RUN chmod 755 ./start.sh 46 | 47 | EXPOSE 80 48 | CMD ["./start.sh"] 49 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 如何制作一个定制的 PHP 基础 Docker 镜像 2 | 3 | > 目标:准备一个定制的 PHP 基础镜像。基础镜像,通常为含最小功能的系统镜像,之后的应用镜像都以此为基础。 4 | 5 | > 本项目代码维护在 **[DaoCloud/php-apache-image](https://github.com/DaoCloud/php-apache-image)** 项目中。 6 | 7 | ### 制作基础镜像 8 | 9 | 选择 Ubuntu 官方的 14.04 版本为我们依赖的系统镜像。 10 | 11 | ```dockerfile 12 | FROM ubuntu:trusty 13 | ``` 14 | 15 | > 因所有官方镜像均位于境外服务器,为了确保所有示例能正常运行,DaoCloud 提供了一套境内镜像源,并与官方源保持同步。如果使用 DaoCloud 的镜像源,则指向:`FROM daocloud.io/ubuntu:trusty` 16 | 17 | 设置镜像的维护者,相当于镜像的作者或发行方。 18 | 19 | ```dockerfile 20 | MAINTAINER Captain Dao 21 | ``` 22 | 23 | 用 RUN 命令调用 apt-get 包管理器安装 PHP 环境所依赖的程序包。 24 | 25 | > 安装依赖包相对比较固定,因此该动作应该尽量提前,这样做有助于提高镜像层的复用率。 26 | 27 | ```dockerfile 28 | RUN apt-get update \ 29 | && apt-get -y install \ 30 | curl \ 31 | wget \ 32 | apache2 \ 33 | libapache2-mod-php5 \ 34 | php5-mysql \ 35 | php5-sqlite \ 36 | php5-gd \ 37 | php5-curl \ 38 | php-pear \ 39 | php-apc \ 40 | ``` 41 | 42 | 用 RUN 命令调用 Linux 命令对 Apache 服务和 PHP 参数进行配置。 43 | 44 | ```dockerfile 45 | RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf \ 46 | ``` 47 | 48 | 用 RUN 命令调用 mkdir 来准备一个干净的放置代码的目录。 49 | 50 | ```dockerfile 51 | RUN mkdir -p /app && rm -rf /var/www/html && ln -s /app /var/www/html 52 | ``` 53 | 54 | 将本地的代码添加到目录,并指定其为当前的工作目录。 55 | 56 | ```dockerfile 57 | COPY . /app 58 | WORKDIR /app 59 | ``` 60 | 61 | 设置启动脚本的权限,指定暴露的容器内端口地址。 62 | 63 | 最后指定容器启动的进程。 64 | 65 | ```dockerfile 66 | RUN chmod 755 ./start.sh 67 | EXPOSE 80 68 | CMD ["./start.sh"] 69 | ``` 70 | 71 | 至此一个 PHP 的基础镜像制作完毕,你可以在本地运行 `docker build -t my-php-base .` 来构建出这个镜像并命名为 `my-php-base`。 72 | 73 | > 由于网络环境的特殊情况,在本地运行 `docker build` 的时间会很长,并且有可能失败。推荐使用 **[DaoCloud 加速器](http://help.daocloud.io/intro/accelerator.html)** 和 DaoCloud 的云端 **[代码构建](http://help.daocloud.io/features/build-flows.html)** 功能。 74 | 75 | ### 完整 Dockerfile 76 | 77 | ```dockerfile 78 | # Ubuntu 14.04,Trusty Tahr(可靠的塔尔羊)发行版 79 | FROM ubuntu:trusty 80 | 81 | # 道客船长荣誉出品 82 | MAINTAINER Captain Dao 83 | 84 | # APT 自动安装 PHP 相关的依赖包,如需其他依赖包在此添加 85 | RUN apt-get update \ 86 | && apt-get -y install \ 87 | curl \ 88 | wget \ 89 | apache2 \ 90 | libapache2-mod-php5 \ 91 | php5-mysql \ 92 | php5-sqlite \ 93 | php5-gd \ 94 | php5-curl \ 95 | php-pear \ 96 | php-apc \ 97 | 98 | # 用完包管理器后安排打扫卫生可以显著的减少镜像大小 99 | && apt-get clean \ 100 | && apt-get autoclean \ 101 | && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \ 102 | 103 | # 安装 Composer,此物是 PHP 用来管理依赖关系的工具 104 | # Laravel Symfony 等时髦的框架会依赖它 105 | && curl -sS https://getcomposer.org/installer \ 106 | | php -- --install-dir=/usr/local/bin --filename=composer 107 | 108 | # Apache 2 配置文件:/etc/apache2/apache2.conf 109 | # 给 Apache 2 设置一个默认服务名,避免启动时给个提示让人紧张. 110 | RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf \ 111 | 112 | # PHP 配置文件:/etc/php5/apache2/php.ini 113 | # 调整 PHP 处理 Request 里变量提交值的顺序,解析顺序从左到右,后解析新值覆盖旧值 114 | # 默认设定为 EGPCS(ENV/GET/POST/COOKIE/SERVER) 115 | && sed -i 's/variables_order.*/variables_order = "EGPCS"/g' \ 116 | /etc/php5/apache2/php.ini 117 | 118 | # 配置默认放置 App 的目录 119 | RUN mkdir -p /app && rm -rf /var/www/html && ln -s /app /var/www/html 120 | COPY . /app 121 | WORKDIR /app 122 | RUN chmod 755 ./start.sh 123 | 124 | EXPOSE 80 125 | CMD ["./start.sh"] 126 | ``` 127 | --------------------------------------------------------------------------------