先说说基础情况,项目是用drupal框架,php版本要使用php7.3,本机是php7.2使用了sock方式,又是一个多版本共存的情况,所以就使用docker来跑php7.3使用9000端口,运行环境如下:

nginx都是在本机安装的,mysql5.7、php7.2本机都有安装了版本,同时也使用了docker方式搞了mysql5.7、php7.3两个镜像,使用端口方式与本机实现通信。

原环境:nginx1.8 + php7.2(sock方式) + docker-mysql5.7(3307端口)

兼容环境 :nginx1.8 +  docker-php7.3(9000端口绑定到本机) + mysql(3306)

因原环境是正常的,所以要搞一下新的兼容环境运行drupal,相关的操作如下:

一、兼容环境构建

#拉取php7.3镜像
docker pull php:7.3-fpm

第一步:找到镜像里面的php配置项,复制到本机环境,
#run一个testphp容器
docker run --name=testphp -d php:7.3-fpm
#进入testphp容器,
docker exec -it testphp /bin/bash
#whereis php,找到php配置项
root@806dd7f6baa8:/var/www/html# whereis php
php: /usr/local/bin/php /usr/local/etc/php /usr/local/lib/php /usr/local/php
root@806dd7f6baa8:/var/www/html# exit
exit

#复制配置文件到本机目录
docker cp testphp:/usr/local/etc ./testphp73

#删除临时用的testphp容器
docker stop testphp && docker rm testphp

#重装构建运行环境,指定端口以及volume卷信息,并设置为开机启动
docker run -p 9000:9000  --name=php73 --restart=always -v /var/www/html/drupal:/var/www/html/drupal -v /var/www/html/etc/php73:/usr/local/etc -d php:7.3-fpm

兼容环境配置完成

环境配置完成后,进入网站,结果如下:

缺失关键php扩展,无法进行框架安装

二、docker环境安装php扩展

在常规方式里面,docker都是通过compose来执行,有一个yml配置文件指定所需要的php扩展库,但我的运行方式不一样,我是run了容器之后,才知道所需php扩展还未安装,而且我是直接run的,并没有采用yml配置文件的方式,所以就只能docker exec方式进入php容器,再进行安装,如下:

#进入容器
docker exec -it php73 /bin/bash
#更新linux
root@7c0db9ad79b1:~# apt update

#安装php-gd必须的libpng-dev库,要不然会报configure: error: png.h not found.
root@7c0db9ad79b1:~# apt install libpng-dev
#安装gd扩展
root@7c0db9ad79b1:~# docker-php-ext-install gd
#安装opcache扩展
root@7c0db9ad79b1:~# docker-php-ext-install opcache
root@7c0db9ad79b1:~# exit
#重启docker-php73
sna-local$ docker restart php73

#commit修改的记录
sna-local$ docker commit -p php73

#将容器生成新的镜像
docker commit php73 php:7.3-fpm-drupal