Docker系列五~docker安装php-fpm
Docker系列四docker安装php-fpm访问PHP镜像库地址: https://hub.docker.com/_/php?tab=tags选择合适的版本php-fpm镜像主要是提供php-fpm服务,需要挂载项目目录到容器里面,就是需要映射项目文件件到容器,以及修改部分配置,可以映射php.ini配置文件也可以不映射,因为修改不多。随意就不做映射了,只映射项目目录即www目录常用版本php
·
Docker系列五
docker安装php-fpm
访问PHP镜像库地址: https://hub.docker.com/_/php?tab=tags
选择合适的版本
php-fpm镜像主要是提供php-fpm服务,需要挂载项目目录到容器里面,就是需要映射项目文件件到容器,以及修改部分配置,可以映射php.ini配置文件也可以不映射,因为修改不多。随意就不做映射了,只映射项目目录即www目录
常用版本
php:5.6-fpm
php:7.2-fpm
php:fpm 默认tag是latest最新版本
docker pull php:7.2-fpm
docker images
docker inspect php72-fpm:latest
PHP版本为 7.4.6
本例使用php-fpm:7.2
下载php:7.2-fpm
docker pull php:7.2-fpm
安装以及查看安装容器的信息
docker ps -a
docker losg xxxxx
docker inspect php72-fpm:latest
创建本地项目目录
mkdir -p /data/nginx/html/
创建php-fpm容器,接入网桥等等
docker run -d --network nginx_bridge --restart always --privileged=true --name php72 -v /data/nginx/html:/var/www/html php:7.2-fpm
安装完成需要安装一些自己需要的扩展,包括一些比较核心的拓展,比如三个拓展gd(一般用于验证等)、mysql_pdo、redis客户端,可能是为了镜像大小问题,很多拓展没有被编译进去,需要自己安装
使用docker-php-ext-install安装工具安装扩展
find / -name docker-php-ext-install
#cd 到所在文件夹,安装一下扩展
./docker-php-ext-install pdo_mysql mysqli sockets gettext opcache
查看gd信息
php --ri gd
#查看扩展信息
php --ri gd
gd
GD Support => enabled
GD Version => bundled (2.1.0 compatible)
GIF Read Support => enabled
GIF Create Support => enabled
PNG Support => enabled
libPNG Version => 1.6.36
WBMP Support => enabled
XBM Support => enabled
Directive => Local Value => Master Value
gd.jpeg_ignore_warning => 1 => 1
#发现只有gif与png,没有jpeg也可以新建一个info.php 在文件中查看相关扩展信息
安装gd库
#进入容器
docker exec -it xxxx /bin/bash
#更新apt-get
apt-get update
#安装依赖
apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev
#配置参数
./docker-php-ext-configure gd --with-jpeg-dir=/usr/include/ --with-freetype-dir=/usr/include/
#如果php74-fpm镜像就报错:
configure: error: unrecognized options: --with-jpeg-dir, --with-freetype-dir
#查看帮助
./docker-php-ext-configure gd --help
#原来它的写法变了,修改后
./docker-php-ext-configure gd --with-jpeg=/usr/include/ --with-freetype=/usr/include/
#重新编译安装就可以了
./docker-php-ext-install gd
php --ri gd
#安装redis扩展
pecl install redis
##################################################################
#以下来源网络整理
pecl install redis
#出错的话pecl install igbinary
#configure: error: Please reinstall the libzstd distribution
#安装 libzstd
#然后php.ini中添加 extension=igbinary.so
docker-php-ext-enable redis // 修改php.ini文件
pecl install swoole
docker-php-ext-enable swoole
3、当然也可以自己下载安装包,采用和Linux一样的方式编译安装
在 /usr/local/bin 目录下有 phpize
然后使用 docker-php-ext-enable 工具修改php.ini
最后的最后,基本上每个扩展都有其对应的配置项,但是你会发现在php.ini中找不到它们,因为它们都内置了默认配置,使用 php --ri xxx
可以查看扩展的配置,如果要修改的话,可以改 php.ini 也可以改 /usr/local/etc/php/conf.d 下面对应的文件,比如我刚安装了 yac
扩展,并 enabled 了它,现在来修改配置:
cd /usr/local/etc/php/conf.d
vi docker-php-ext-yac.ini
增加 yac.enable_cli = 1
php --ri yac
安装vim程序,修改php.ini中的时区
vi /usr/local/etc/php/php.ini
date.timezone = Asia/Shanghai
操作完这一波之后有必要备份一下容器,已被后续使用。
docker commit -p php-fpm php-fpm-bak
docker tag php-fpm-bak:latest php-fpm-bak:v1
docker images
exit 退出容器
重启容器
docker restart php-fpm
当php去连接在本机同样使用host网络创建的mysql容器时,php代码中应该使用127.0.0.1连接mysql而不是localhost,否
则会报错 Connection failed: SQLSTATE[HY000] [2002] No such file or directory
关于目录的挂载
最近发现一个小问题,我设置的php72-fpm容器开机自动重启,并挂载了虚拟机的一个目录,而虚拟机挂载的是本机的一个目录;昨天难得重启一次电脑,然后就是开启虚拟机,php72-fpm已经自动启动了,但是开发的时候报 404 ,我就纳闷了,于是开始排查。
docker logs php72-fpm
发现是php72-fpm报404,而不是nginx
于是进入容器查看 /www 发现是空的。于是 docker restart php72-fpm 就好了。
可能的原因,我是用的vagrant启动的虚拟机,也是在vagrant配置的共享文件夹,所以,php72-fpm在虚拟机启动时就启动了,而此时虚拟机还没挂载好共享文件夹,因为虚拟机的挂载是由vagrant来完成的,所以设置容器开机自启动还是要看你的场景。
创建php-fpm容器,映射文件接入网桥
docker run -d --network nginx_bridge --restart always --privileged=true --name php72 -v /data/nginx/html:/var/www/html php:7.2-fpm
查看php-fpm容器
docker ps -a
更多推荐
所有评论(0)