原文来自于:http://open.daocloud.io/ru-he-zhi-zuo-yi-ge-ding-zhi-de-php-ji-chu-docker-jing-xiang/

目标:准备一个定制的 PHP 基础镜像。基础镜像,通常为含最小功能的系统镜像,之后的应用镜像都以此为基础。

本项目代码维护在 DaoCloud/php-apache-image 项目中。

制作基础镜像

选择 Ubuntu 官方的 14.04 版本为我们依赖的系统镜像。

FROM ubuntu:trusty

因所有官方镜像均位于境外服务器,为了确保所有示例能正常运行,DaoCloud 提供了一套境内镜像源,并与官方源保持同步。如果使用 DaoCloud 的镜像源,则指向:FROM daocloud.io/ubuntu:trusty

设置镜像的维护者,相当于镜像的作者或发行方。

MAINTAINER Captain Dao <support@daocloud.io>

用 RUN 命令调用 apt-get 包管理器安装 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 \

用 RUN 命令调用 Linux 命令对 Apache 服务和 PHP 参数进行配置。

RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf \

用 RUN 命令调用 mkdir 来准备一个干净的放置代码的目录。

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 的云端 代码构建 功能。

完整 Dockerfile

# 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"]

转:如何制作一个定制的 PHP 基础 Docker 镜像(一)的更多相关文章

  1. 制作JavaCV应用依赖的基础Docker镜像(CentOS7+JDK8+OpenCV4)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  2. 从零开始构建一个centos+jdk7+tomcat7的docker镜像文件

    从零开始构建一个centos+jdk7+tomcat7的镜像文件 centos7系统下docker运行环境的搭建 准备centos基础镜像 docker pull centos 或者直接下载我准备好的 ...

  3. 制作基于Buildbot的自动化测试系统Docker镜像

    Buildbot in Docker 前言 最近使用Buildbot做了一个自动测试的框架,为了部署方便,可以把测试框架做成Docker镜像,方便部署.这里记录下过程,供大家参考. 项目介绍 项目是一 ...

  4. 通过IDEA制作包含Java应程序的Docker镜像

    IDEA官网在IDEA中把Java App制作成Docker镜像并启动一个容器运行 在idea上使用docker作为java的开发环境[][] ubuntu+docker+docker-compose ...

  5. 【Docker】制作一个支持SSH终端登录的镜像

    首先从官方或者docker.cn的镜像库中pull下来ubuntu镜像: docker pull ubuntu 现在用命令查看一下pull下来的ubuntu镜像: docker images 关于如何 ...

  6. 构建一个拥有sshd服务的docker镜像

    不直接描述结果,通过一个过程探究如何写一个 Dockerfile 一.环境 虚拟机CentOS7.4,Docker1.13.1 二.尝试步骤 1.下载基础镜像 docker pull alpine:3 ...

  7. three.js 利用uv和ThreeBSP制作一个快递柜

    最近有three网友,问我要不要学习blender,其实我感觉学习一下也无妨,不过花大量时间精通,尚可不必,术业有专攻给别人留一条路吧,哈哈.那我我们就是用ThreeBSP和uv贴图的知识来制作一个定 ...

  8. Docker 镜像的制作和使用

    镜像 Layer(层) 镜像里的内容是按「层」来组织的,「层」可以复用,一个完整的镜像也可以看做是一个「层」.多个「层」叠加在一起就形成了一个新的镜像,这个镜像也可以作为别的镜像的基础「层」进行更加复 ...

  9. 制作ubuntu16.04的docker镜像

    来自http://www.jianshu.com/p/029a1ed4fd64 背景 因为笔者是在vagrant转移到docker的玩家,所以对系统镜像情有独钟.如果你是windows.mac用户,那 ...

随机推荐

  1. WSGI是一种编程接口,而uwsgi是一种传输协议

    http://uwsgi-docs.readthedocs.io/en/latest/Nginx.html http://sunxiunan.com/?p=1778 cgi---------fastc ...

  2. QVariant与自定义数据类型转换的方法

      在使用VC.Delphi编写用户界面程序的时候,经常会把对象与控件的data域进行绑定,便于程序运行中读写提高效率.然而在Qt编程中怎么实现这个功能呢?比如将一个用户自定义的结构体与QComboB ...

  3. Cocos2D-x培训课程

    1.1 Cocos2D-x 什么是cocos2d-x cocos2d-x在游戏开发中的运用 cocos2d-x的几个重要版本特点 iOS环境下搭建cocos2d开发环境 windows平台搭建coco ...

  4. Android(java)学习笔记140:SpannableString类的使用

    我们之前说过了我们想实现在TextView组件之中,可以显示URL.Email等特殊信息,这些信息点击可以实现跳转,真正意义上的超链接 要实现上面的需求就要SpannableString这个类. 因为 ...

  5. Linux common resources

    Useful Linux Web reources list Linux die manual Linux Man Pages Archive Linux RPM find Linux RPM Sea ...

  6. 图解I/O的五种模型

    1.1 五种I/O模型 1)阻塞I/O 2)非阻塞I/O 3)I/O复用 4)事件(信号)驱动I/O 5)异步I/O 1.2 为什么要发起系统调用? 因为进程想要获取磁盘中的数据,而能和磁盘打交道的只 ...

  7. C#读取Excel表中的数据时,为何有些行的字段内容读取不到

    转载:http://bbs.csdn.net/topics/360220285 1.当某列数据中含有混合类型时,在.NET中使用Microsoft.Jet.OLEDB.4.0来读取Excel文件造成数 ...

  8. ASP.NET问题处理---“数据请求超时错误“”

    数据请求超时,一般有2中解决方式: 1.页面AJAX处理数据时延长时间: 2.后台数据库连接取数据时延长时间. 由于我的后台数据库连接取数据为循环读取数据,所以不存在超时问题,这里具体说说如何修改AJ ...

  9. CentOS 6.4安装OpenOffice

    终端依次输入: (1)sudo yum install openoffice.org-writer (2) sudo  yum install openoffice.org-calc (3) sudo ...

  10. 利用Highcharts制作web图表学习(二)

        最近中海油的项目需要用到图表展示数据,最近还是一直边学习边开发,今天做了一个展示,炼化厂加热炉效率展示的柱状图,把代码贴出来,大家指点一下互相学习,我是通过数组给Highcharts绑定的值, ...