因为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的环境.

在docker hub上PHP官方提供的docker image系列有单独的php, 和apache打包的php, 以及提供fpm服务的php, 因为本机已经安装了nginx, 所以只需要用docker提供fpm服务就可以.

下载并运行

# 下载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配置

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

原先的配置

        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 这两行, 修改为

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

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

安装必要的工具和扩展

默认的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来访问.

用Docker启动php-5.6 fpm服务配合宿主机nginx运行php测试环境的更多相关文章

  1. Centos7下,宿主机nginx配合docker环境的php-fpm

    一.安装docker并启动 yum install docker systemctl start docker 二.安装nginxCentOS 7默认不能从yum中安装nginx,原因可以自己搜索一下 ...

  2. Docker 安装mysql容器数据卷挂载到宿主机

    环境 Centos:7 Docker: 17.05-ce Mysql: 5.7 1. Mysql外部数据和配置文件路径 msyql配置文件路径:/etc/mysql mysql数据卷路径:/var/l ...

  3. Jenkins服务使用 宿主机的docker、docker-compose (Jenkins 执行sudo命令时出现“sudo: no tty present and no askpass program specified”,以及 docker-compose command not found解决办法)

    若要转载本文,请务必声明出处:https://www.cnblogs.com/zhongyuanzhao000/p/11681474.html 原因: 本人最近正在尝试CI/CD,所以就使用了 Jen ...

  4. docker启动centos容器后如何用putty连接

    在前面的文章中,我提到过,win10 docker启动容器时,只有配置了宿主机和docker容器的端口映射,外部应用才能访问到容器中的服务,比如映射到Nginx的80端口.现在我将宿主机的某个端口映射 ...

  5. 在win10 docker启动的centos容器中安装nginx

    我是在win10机器上搭建了一个docker,在docker启动了centos容器,在centos中安装nginx. 安装配置docker 直接在官网下载docker for windows:http ...

  6. 测试环境docker化—容器集群编排实践

    本文来自网易云社区 作者:孙婷婷 背景 在前文<测试环境docker化-基于ndp部署模式的docker基础镜像制作>中已经详述了docker镜像制作及模块部署的过程,按照上述做法已可以搭 ...

  7. Jenkins(Docker容器内)使用宿主机的docker命令

    1.Jenkins镜像 Docker容器内的Jenkins使用容器外宿主机的Docker(即DooD,还有另外的情况就是DioD),google一下有几种说法,但是都没试成功(试过一种就是修改宿主机/ ...

  8. 【jvm】java查看内存使用jmap,jstat和jstack使用 ,docker启动服务下查看jvm使用情况

    [声明,如果是docker启动的服务,可以在进入容器内后,再使用如下命令操作] [docker exec -it 容器ID  /bin/bash     即可进入容器内] [如果不是docker启动的 ...

  9. PHP-7的FPM服务的启动

    1.PHP 7的FPM服务位置:/ect/init.d/php7.0-fpm 2.启动:sudo service php7.0-fpm reload

随机推荐

  1. 设置JAVA环境变量

    export JAVA_HOME=/usr/local/jdkexport JRE_HOME=/usr/local/jdk/jreexport CLASSPATH=.:$JAVA_HOME/lib/d ...

  2. 【前端基础系列】理解GET与POST请求区别

    语义区别 GET请求用于获取数据 POST请求用于提交数据 缓存 GET请求能被缓存,以相同的URL再去GET请求会返回304 POST请求不能缓存 数据长度 HTTP协议从未规定过GET/POST请 ...

  3. Webservice返回json数据格式

    问题: 我将结果内容用字符串拼接成Json数据并返回的时候,会在结果前面添加xml头部,结果如下. <span ><string xmlns="http://tempuri ...

  4. Error: The INF file contains Unicode characters that could not be converted correctly

    昨天第一次为自己的windows mobile程序制作CAB安装包,但是在生成过程中,却出现了这样一个问题: 编译完成 -- 0 个错误,0 个警告time -> G:\WindowsMobil ...

  5. SVN提交,提示“remains in conflict”错误

    SVN commit时,提示"remains in conflict"错误: 1.error出现原因: 在本地项目删除了一个目录,又通过SVN的"Repo-browser ...

  6. Educational Codeforces Round 26 E - Vasya's Function

    数论题还是好恶心啊. 题目大意:给你两个不超过1e12的数 x,y,定义一个f ( x, y ) 如果y==0 返回 0 否则返回1+ f ( x , y - gcd( x , y ) ); 思路:我 ...

  7. Mysql 账号过期问题

    1.ALTER USER 'root'@'localhost' PASSWORD EXPIRE; 一旦某个用户的这个选项设置为”Y”,那么这个用户还是可以登陆到MySQL服务器,但是在用户未设置新密码 ...

  8. 6-3 二叉树的重建 uva536

    已知先序和中序  求后序 可以有两种方式输出 一种是建好树按照树输出 一种是不建树  在遍历的过程中存入vector  再倒叙输出 #include<bits/stdc++.h> usin ...

  9. threeSum问题

    三数之和等于0的问题: 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中 ...

  10. 解决linux下“XX不在 sudoers 文件中。此事将被报告"的问题

    在使用sudo命令时,经常性会提示出“不在 sudoers 文件中.此事将被报告”的错误信息. 这是因为当前登录的账号不在sudo权限里面. sudo命令可以让你以root身份执行命令,来完成一些我们 ...