又是老朋友,Docker的搭建项目,还是并发问题,我们都知道,PHP有一款很好用的扩展,swoole,swoole可以集成到PHP开发环境中,我们只需要安装到PHP扩展里就行,详细步骤看我之前的文章Docker下php容器安装swoole扩展。
好了,那我们这次需要用到2个容器,一个普通的Nginx容器,另一个则是已经集成好Swoole的PHP-fpm容器,由于时间关系,我已经把集成好Swoole扩展的PHP容器再打包生成好一个镜像(ekko/swoole)了,可以直接创建一个swoole容器。
创建2个新容器:
docker run -it -d --name swoole-nginx -v /root/docker/swoole/code:/usr/share/nginx/html -v /root/docker/swoole-nginx.conf:/etc/nginx/conf.d/default.conf --network my-net -p 9000:80 nginx
docker run -it -d --name swool -v /root/docker/swoole/code:/usr/share/nginx/html --network my-net -p 8999:8888 ekko/swoole
nginx.conf的配置如下
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
proxy_http_version 1.1;
proxy_set_header Connection "keep-alive";
proxy_set_header X-Real-IP $remote_addr;
if (!-e $request_filename) {
proxy_pass http://swoole:8888;
}
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
swoole中server.php代码如下
<?php
$http = new swoole_http_server("0.0.0.0", 8888);
$http->on("start", function ($server) {
echo "Swoole http server is started at http://wrsndm:8999\n";
});
$http->on("request", function ($request, $response) {
$response->header("Content-Type", "text/plain");
echo "swoole already response";
$response->end("Hello World\n");
});
$http->start();
因为Swoole是不支持fpm的,只支持cli启动,所以去到server.php的目录下,把服务启动
php server.php
接着外网访问http://wrsndm.online:9000/index.html,因为9000是映射到swoole-nginx的80端口,所以实际是经过了nginx,然后反向代理给swoole的8888端口处理了,所以输出了HelloWorld。