之前有一篇文章介绍如何通过Docker搭建Laravel开发环境。项目能在Docker环境下运行主要是因为需要根据PHP项目的依赖做PHP镜像的Dockerfile。本文主要讲一下如何根据自己的需要制作一个PHPDocker镜像文件。1、要继承基础镜像,首先需要根据你的PHP项目对PHP的需求找到基础镜像,然后在基础镜像的基础上安装PHP扩展。使用Dockerfile中的FROM命令指定基础镜像。FromFROM指定用于构建图像的基础源图像。如果本地没有指定镜像,会自动从Docker的公共库中拉取镜像。FROM必须是Dockerfile中非注释行的第一条指令,即Dockerfile以FROM语句开头。这里我们打算做一个包含FPM的PHP7.2的自定义镜像,所以首先在Dockerfile中指定基础镜像:FROMphp:7.2-fpm2。安装PHP扩展自定义PHP镜像的主要任务是安装各种PHP扩展,在Dockerfile中有三种在PHP镜像中安装扩展的方法,每种方法都有其具体的使用场景,下面依次介绍。2.1在dockerhub中安装php官方提供的扩展。DockerHub中提供了一些官方的PHP扩展。您可以通过docker-php-ext-install脚本命令列出要在Dockerfile中安装的扩展。让我们的PHP镜像安装pdo、pdo_mysql、mcrypt等常用扩展。FROMphp:7.2-fpmRUNdocker-php-ext-installpdopdo_mysqlmcryptzipgdpcntlopcachebcmath如果需要为扩展指定一些自定义的编译参数,docker提供了另一个有用的脚本docker-php-ext-configure来传递编译参数(通常不使用)。从php:7.2-fpm运行docker-php-ext-installpdopdo_mysqlmcryptzippcntlopcachebcmath\&&docker-php-ext-install-j$(nproc)iconv\&&docker-php-ext-configuregd--with-freetype-dir=/usr/include/--with-jpeg-dir=/usr/include/\&&docker-php-ext-install-j$(nproc)gd2.2使用PECL安装扩展DockerHub仅a部分对于PHP扩展,PECL仍然需要安装这些以外的扩展。使用peclinstall在Docker镜像中下载、编译和安装扩展,然后使用docker-php-ext-enable使用PECL安装PHP的redis和grpc扩展。RUNpeclinstallgrpc\&&docker-php-ext-enablegrpc\&&peclinstall-o-fredis\&&docker-php-ext-enableredis\&&rm-rf/tmp/pear2.3源码安装扩展一些扩展是它不能使用docker-php-ext-install安装,也不能通过PECL安装。只能通过源码编译安装(PHP扩展框架Phalcon就是这种情况,但是设置比较复杂,后面会讲到),也可以在Docker中通过源码安装。PHP扩展RUNcurl-fsSL'https://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz'-oxcache.tar.gz\&&mkdir-p/tmp/xcache\&&tar-xfxcache.tar.gz-C/tmp/xcache--strip-components=1\&&rmxcache.tar.gz\&&docker-php-ext-configure/tmp/xcache--enable-xcache\&&docker-php-ext-install/tmp/xcache\&&rm-r/tmp/xcache上一篇文章重点介绍如何在Docker中安装PHP扩展。其实Docker相关的还有很多其他的概念需要了解才能创建自己需要的镜像文件,幸运的是在Docker官方教程中有详细的解释。有兴趣的一定要按照教程的步骤自己去实践。我现在服务的业务组织中的服务端开发语言主要使用Go,PHP多用于一些老系统、管理后台或者事件系统。我可以数一数这两个月我写了多少PHP代码,更多的时间还是在写Go代码。所以最近关于PHP写的技术文章很少,有空就写如何在Docker中安装配置Phalcon。