本文nginx 运行在主机上(不在docker容器中),而php-fpm 配置在docker容器中。
最终效果就是在电脑浏览器中访问 本机的nginx ,只要是php请求都转发到 3个容器中。
而且容器启动带上了环境变量,每个容器的应用都可以获取到属于自己的应用标识。
1.安装docker 和 开启3个php-fpm 容器。
windows docker 安装过程就略了。不会的自行百度。
docker 安装好了
先设置 获取 docker镜像服务器地址。
这里可以加速。
设置好了以后 开一个windows 的cmd 程序 执行指令:
docker pull registry.cn-hangzhou.aliyuncs.com/1221/huangweigang:huang7
这个是我自己制作的镜像 。相对网上通用的php8-fpm的镜像。我的镜像做了如下新增操作。
1.新增了 apt-get update 指定的更新数据源 从阿里云获取,这样装软件更快
2.装上了vim 工具命令 (拉取的 别人的php8-fpm 容器 是不支持vim 命令的,当然别人是为了让镜像更小)
3. php-fpm 的位置文件www.conf 里面 listen = unix:/tmp/php-cgi.sock; 改成了listen:127.0.0.7:9000 ,因为不是在容器内调用php-fpm 是在容器外,所以得改。我的容器只做个php解析器。
当然网友也可以不用我的镜像,直接去网上找 php8-fpm的镜像。然后自己设置。
拉取镜像后 用 命令:
docker images
查看 镜像的id ,然后用命令 开启3个docker容器
docker run -d --name php8-1 -p 9011:9000 -v C:/Users/Administrator/Documents/Kitematic/php72/var/www/html1:/mydata -e hid=3 e77f01937c11
docker run -d --name php8-2 -p 9012:9000 -v C:/Users/Administrator/Documents/Kitematic/php72/var/www/html2:/mydata -e hid=3 e77f01937c11
docker run -d --name php8-3 -p 9013:9000 -v C:/Users/Administrator/Documents/Kitematic/php72/var/www/html3:/mydata -e hid=3 e77f01937c11
启动容器。
这个命令我解释下
参数-d ,--name就不解释了 都知道。
-p 9012:9000 ,9012是 主机端口(本机的nginx 负载均衡访问的就是这个端口),就是windows电脑的端口,等于 docker 容器暴露出来端口,9000 指的是容器内部的端口。
-v C:/Users/Administrator/Documents/Kitematic/php72/var/www/html1:/mydata 表示将本地电脑的 C:/Users/Administrator/Documents/Kitematic/php72/var/www/html1 目录映射到容器里面的目录/mydata ,这样你修改脚本在windows 直接修改即可,不用进入容器内用linux命令操作。方便。
-e hid=3 传入环境变量,等于是应用id ,php 可以通过函数getenv(‘hid’) ,获取。方便应用根据这个应用id 获取属于应用自己的应用配置。
最后一个 e77f01937c11 就是镜像id 了 每个人不一样。你拉取的镜像是什么id 就是这个。
2,下载nginx 配置 。 如何下载就省略了。现在主要讲配置。我这里是用phpstudy做的集成环境一部到位。
我在php_study 里面创建了一个网站。www.huangse.com (当然要修改windows 的host文件才能访问)
修改nginx.conf文件
在 server上面加上
upstream upstream_name{
server 127.0.0.1:9011;#这个就是docker容器1
server 127.0.0.1:9012;#这个就是docker容器2
server 127.0.0.1:9013;#这个就是docker容器3
}
我开了3个容器。 里面都运行着 php-fpm
修改 网站的 nginx配置文件,注意红色字体。
server { listen 80; server_name www.huangse.com; location / { index index.php index.html error/index.html; error_page 400 /error/400.html; error_page 403 /error/403.html; error_page 404 /error/404.html; error_page 500 /error/500.html; error_page 501 /error/501.html; error_page 502 /error/502.html; error_page 503 /error/503.html; error_page 504 /error/504.html; error_page 505 /error/505.html; error_page 506 /error/506.html; error_page 507 /error/507.html; error_page 509 /error/509.html; error_page 510 /error/510.html; autoindex off; } location ~ \.php(.*)$ { root "/mydata/"; #fastcgi_pass 127.0.0.1:9011; fastcgi_pass upstream_name; fastcgi_index index.php; fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME /mydata/$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; } error_log C:/phpstudy_pro/Extensions/Nginx1.15.11/logs/www.huangse.com_error.log crit; access_log C:/phpstudy_pro/Extensions/Nginx1.15.11/logs/www.huangse.com_acess.log; }
然后分别在 路径 C:/Users/Administrator/Documents/Kitematic/php72/var/www/html1,C:/Users/Administrator/Documents/Kitematic/php72/var/www/html2,C:/Users/Administrator/Documents/Kitematic/php72/var/www/html3,里面放入文件a.php,a.php代码就写这个,打印出应用id。
使用浏览器访问。可以看到 这个数字 从 1 2 3 反复,每次刷新都不一样。
推荐一个docker 可视化管理软件,Kitematic.
下载后安装到windows ,是个客户端软件。效果如下,可以看到管理的容器数量,还有容器配置的参数,非常方便。