用Docker启动php-5.6 fpm服务配合宿主机nginx运行php测试环境

由于Ubuntu18.04默认的openssl版本就是1.1.0, 而PHP5.6没法在openssl 1.1下编译 "PHP 5.6 is receiving only security fixes and OpenSSL 1.1 is not supported. Please use PHP 7.x if you want to use OpenSSL 1.1", 因此在Ubuntu18.04下须要经过docker配合宿主机配置php5.6的环境.php

在docker hub上PHP官方提供的docker image系列有单独的php, 和apache打包的php, 以及提供fpm服务的php, 由于本机已经安装了nginx, 因此只须要用docker提供fpm服务就能够. html

下载并运行mysql

# 下载docker image
docker pull php:5-fpm

# 建立容器, 由于这里是本机开发环境, 使用默认的网络
docker run -d --name phpfpm -v /home/milton/somewhere/wwwroot:/var/www/html php:5-fpm

# 查看一下实际分配的IP地址
docker network inspect bridge

# 测试一下服务端口是否打开
telnet 172.17.0.2 9000

修改本地nginx配置nginx

由于php-fpm的服务要修改成docker提供, 并且在docker中php文件的目录是 /var/www/html, 而本地原先使用的是/home/milton/somewhere/wwwroot 须要修改一下配置文件.redis

原先的配置sql

        location ~ \.php$ {
            root           /home/milton/somewhere/wwwroot;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /$document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

        location / {
            root   /home/milton/somewhere/wwwroot;
            index  index.html index.htm index.php;
        }
    }

须要修改的是 fastcgi_pass 和 fastcgi_param 这两行, 修改成docker

fastcgi_pass   172.17.0.2:9000;
fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;

.写一个phpinfo, 重启nginx后, 看看是否能正确被解析.apache

安装必要的工具和扩展bash

默认的php:5-fpm不带ifconfig, ping等工具, 也缺一些经常使用的扩展, 须要自行安装网络

# 进入docker命令行
docker exec -it phpfpm /bin/bash

# 安装 ifconfig, ping
apt update
apt install net-tools iputils-ping

# 安装依赖(安装gd扩展等必需要先安装系统依赖)
apt install libfreetype6-dev libmcrypt-dev libpng-dev libjpeg-dev libpng-dev sendmail zlib1g-dev

用 docker-php-ext-install 安装扩展, 这个脚本会自动编译并配置指定的扩展

docker-php-ext-install mysql
docker-php-ext-install gd
docker-php-ext-install zip
docker-php-ext-install mbstring
docker-php-ext-install pdo_mysql

重启docker后, 刷新phpinfo页面查看是否生效.

若是是安装pecl扩展, 这个image已经带了pecl, 直接运行pecl命令, 注意要指定版本, 以避免和当前php版本不兼容

pecl install redis-4.0.1
# 中途提示选no, 由于须要额外的.h文件支持, 没安装而选yes的话会设置失败
enable igbinary serializer support? [no] : 
enable lzf compression support? [no] : 
# 启用
docker-php-ext-enable redis

.

docker的网络

由于docker所处于的默认bridge, IP:172.17.0.x 是能够直接访问宿主机以及外网的, 后续的使用中, 宿主机的服务就要经过宿主机的外部IP而不是127.0.0.1来访问.

相关文章
相关标签/搜索