4

利用docker在服务器运行多个版本php

 3 years ago
source link: https://blog.star7th.com/2019/04/2348.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

利用docker在服务器运行多个版本php

php7已经出来好一段时间了,众所周知它对性能的提升很大。现在假设我们有台比较老的服务器,系统是centos6,上面运行着一些老旧项目,其默认自带的php版本是5.3 。虽然说,我们可以升级到php7版本,但是,老旧不兼容php7,我们不能一刀切。最好的方式是php5.3和php7共存。所以,我们可以考虑利用docker来安装其他版本的php,既能保证环境独立,又极少造成性能损耗。下面以安装php7版本为例,介绍下具体做法。

centos6安装docker :

 yum install -y https://get.docker.com/rpm/1.7.1/centos-6/RPMS/x86_64/docker-engine-1.7.1-1.el6.x86_64.rpm
 service docker start
 chkconfig docker on 

拉取php7.2镜像

docker pull php:7.2-fpm

新建目录以及文件/usr/local/docker-php7/zz-docker.conf ,保存以下内容:

[global]
daemonize = no

[www]
listen = 9001

;修改php.ini里面的变量就修改php_value数组相应的属性就好
php_value[session.save_handler] = redis
php_value[session.save_path] = tcp://127.0.0.1:6379
php_value[post_max_size] = 20M
php_value[upload_max_filesize] = 20M
php_value[date.timezone] = Asia/Shanghai
php_value[opcache.enable] = 1
php_value[opcache.enable_cli] = 1

运行容器,使用host模式跟宿主机通讯

docker run -d -v /var/www/html:/var/www/html  -v /usr/local/docker-php7/zz-docker.conf:/usr/local/etc/php-fpm.d/zz-docker.conf --net=host --name php7.2 php:7.2-fpm

安装各种常用php扩展

docker exec php7.2 apt-get update -y
docker exec php7.2 apt-get install -y libfreetype6-dev
docker exec php7.2 apt-get install -y libjpeg62-turbo-dev
docker exec php7.2 apt-get install -y libpng-dev
docker exec php7.2 docker-php-ext-install pdo_mysql
docker exec php7.2 docker-php-ext-install mysqli
docker exec php7.2 docker-php-ext-install iconv 
docker exec php7.2 docker-php-ext-install gd
docker exec php7.2 docker-php-ext-install mbstring
docker exec php7.2 docker-php-ext-install opcache
docker exec php7.2 docker-php-ext-install zip

#顺便改下配置
docker exec php7.2 mv /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini

由于无法通过 docker-php-ext-install 安装redis扩展,所以需要手动安装下

#进入容器里的命令行
docker exec -it php7.2 sh 
docker-php-source extract
curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/4.2.0.tar.gz
tar -zxvf /tmp/redis.tar.gz -C /usr/src/php/ext
mv /usr/src/php/ext/phpredis-* /usr/src/php/ext/phpredis
docker-php-ext-install phpredis
#到这里按ctr+p  和 ctrl+q 以退出容器
docker restart php7.2

以上命令已经成功在9001端口运行了php7.2。接下来只要在nginx的配置里php脚本指向到9001端口即可(原来是指向9000端口)。需要注意的是,使用这种方法后,程序中连接数据库时,填地址不要是localhost,而是127.0.0.1


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK