在宿主机上使用容器部署 PHP,以实现多版本 PHP 共存,并实现高度环境隔离。
宿主机上安装的是 PHP 7,而某项目因编写时间过久,使用的是 PHP 5,在宿主中安装多版本并不复杂,但考虑到仅此一个项目使用且考虑到环境隔离于是尝试在容器内部署,以便实现多版本共存。
镜像相关
# docker pull php:5-fpm-alpine
小贴士:若想指定具体小版本请直接写完整版本号即可,如:php:5.6.31-fpm-alpine
运行容器
# docker run -d --name php5-fpm -p 9000:9000 -v /data/projects:/var/www/html php:5-fpm-alpine
进入容器
# docker exec -it php5-fpm /bin/sh
小贴士:基于 Alpine 容器镜内无内置 bash 解析器,因此请使用 sh 或其他命令解析器。
安装扩展
# 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
发现报错:
If configure fails try --with-webp-dir=<DIR>
If configure fails try --with-jpeg-dir=<DIR>
configure: error: png.h not found.
这是因为缺失扩展所需的依赖导致的,执行以下命令安装依赖:
# apk add --no-cache libpng-dev
注意:Alpine 使用的包管理器为 apk 。
Tips:安装完毕后重新执行即可,若是中国大陆机器可能出现速度不理想或无速度的问题,可使用清华源或者其他的国内源进行更新。
如果安装 pecl 扩展,可以直接运行 pecl 命令,注意版本问题, 以免和当前PHP版本不兼容。
部署相关
查看实际分配的IP地址
# docker network inspect bridge
测试服务端口状态
# telnet 172.17.0.2 9000
修改 NGINX 配置
以样板配置为例
...
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
地址修改为容器地址及端口即可。
小贴士:宿主机的 NGINX 配置应指向容器内的项目目录位置,必须注意!本文例子则修改为 /var/www/html
。
附录
参考链接
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2019-01-30 15:05 PM