(开包即用,不用看代码!)在 Docker 中用 nginx 和 PHP-fpm 运行来自 Windows 共享文件夹的路由模式网站

原创 2018年02月04日 21:24:10

准备

  • PowerShell
  • git
  • docker
  • 使用docker-machine命令可以找到一台可用的Docker主机

开包即用,不用看代码!

初始化

进入一个文件夹。

下载已经写好的开源项目

git clone https://github.com/huzhenghui/Docker-run-nginx-PHP-fpm-web-server-router-from-Windows-share-folder

进入开源项目文件夹

cd Docker-run-nginx-PHP-fpm-web-server-router-from-Windows-share-folder

更新子模块代码

git submodule update --init

使用管理员权限的PowerShell运行共享文件夹到Docker的脚本。

.\share-windows-folder-to-docker\share-windows-folder-to-docker.ps1 -workingDir . -volumeName nginx-PHP-fpm-web-server-router

查看文件夹是否共享成功

docker run --rm -v nginx-PHP-fpm-web-server-router:/share alpine ls /share

如果成功将看到开源项目的如下文件列表

LICENSE
docker-compose.yml
nginx
php
share-windows-folder-to-docker

使用PHP内建的Web Server的路由方式

启动PHP内建web server

docker run -it --rm -v nginx-PHP-fpm-web-server-router:/nginx-PHP-fpm-web-server-router -p 80:80 php -S 0.0.0.0:80 -t /nginx-PHP-fpm-web-server-router/php/public index.php

正确启动将看到如下信息

PHP 7.2.1 Development Server started at Sun Feb  4 12:34:23 2018
Listening on http://0.0.0.0:80
Document root is /nginx-PHP-fpm-web-server-router/php/public
Press Ctrl-C to quit.

打开新的PowerShell

访问首页,此处使用环境变量获取Docker主机的IP地址,也可以自行输入。

Start-Process -FilePath ($env:DOCKER_HOST -replace '^tc(p://[.\d]+):.*', 'htt$1/')

index.php中的内容为phpinfo,从phpinfo中可以看到这是PHP内建的web server

查看一个不存在的页面,此处使用环境变量获取Docker主机的IP地址,也可以自行输入。

Start-Process -FilePath ($env:DOCKER_HOST -replace '^tc(p://[.\d]+):.*', 'htt$1/404')

可以看到仍旧是phpinfo,区别在于其中的路径不同了,说明请求都被路由到index.php文件了。

使用nginxPHP-fpm的路由方式

使用docker-compose启动

docker-compose up

正确启动将看到如下信息

Starting dockerrunnginxphpfpmwebserverrouterfromwindowssharefolder_php_1 ... done
Starting dockerrunnginxphpfpmwebserverrouterfromwindowssharefolder_web_1 ... done
Attaching to dockerrunnginxphpfpmwebserverrouterfromwindowssharefolder_php_1, dockerrunnginxphpfpmwebserverrouterfromwindowssharefolder_web_1
php_1  | [04-Feb-2018 12:38:42] NOTICE: fpm is running, pid 1

打开新的PowerShell

访问首页,此处使用环境变量获取Docker主机的IP地址,也可以自行输入。

Start-Process -FilePath ($env:DOCKER_HOST -replace '^tc(p://[.\d]+):.*', 'htt$1/')

index.php中的内容为phpinfo,从phpinfo中可以看到这是nginx连接PHP-fpm

查看一个不存在的页面,此处使用环境变量获取Docker主机的IP地址,也可以自行输入。

Start-Process -FilePath ($env:DOCKER_HOST -replace '^tc(p://[.\d]+):.*', 'htt$1/404')

可以看到仍旧是phpinfo,区别在于其中的路径不同了,说明请求都被路由到index.php文件了。

如果想看再看代码

项目文件结构如下

  • docker-compose.yml
  • nginx\
    • conf.d\
    • default.conf
  • php\
    • public\
    • index.php
  • share-windows-folder-to-docker\
    • share-windows-folder-to-docker.ps1

share-windows-folder-to-docker.ps1是一个把Windows中的文件夹共享到Docker的脚本,具体工作原理见注释

index.php中包含phpinfo函数

docker-compose.yml是容器编排文件

web:
        image: nginx
        ports:
                - "80:80"
        volumes:
                - nginx-PHP-fpm-web-server-router:/nginx-PHP-fpm-web-server-router
        command: /bin/bash -c "cp /nginx-PHP-fpm-web-server-router/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
        links:
                - php
php:
        image: php:fpm
        volumes:
                - nginx-PHP-fpm-web-server-router:/nginx-PHP-fpm-web-server-router

其中包含两个服务webphp

web服务使用nginx镜像,端口从80映射到80,把前面使用脚本共享的nginx-PHP-fpm-web-server-router卷加载到/nginx-PHP-fpm-web-server-router路径,关联到php服务。

web服务没有使用默认的启动命令,而是包含两部分,首先复制nginx配置文件,配置文件的详细分析见下文。

cp /nginx-PHP-fpm-web-server-router/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf

然后启动nginx

nginx -g 'daemon off;'

php服务使用php:fpm镜像,把前面使用脚本共享的nginx-PHP-fpm-web-server-router卷加载到/nginx-PHP-fpm-web-server-router路径,此处注意,Docker中容器之间是隔离的,web服务和php服务都需要访问的卷需要在每个服务中都加载一遍,而且加载的路径应当相同,使得程序按照路径访问的是相同的文件。

default.confnginx配置文件

server {
    listen       80;
    server_name  localhost;
    root /nginx-PHP-fpm-web-server-router/php/public;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_pass php:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

设置监听80端口

listen       80;

设置服务器名

server_name  localhost;

设置路由

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

.php后缀的文件传输到php服务。

    location ~ \.php$ {
        fastcgi_pass php:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
版权声明:本文为博主(@胡争辉)原创文章,未经博主允许不得转载。 https://blog.csdn.net/hu_zhenghui/article/details/79255001

用百度AI的OCR文字识别结合PHP实现了图片的文字识别功能

如果报错了 : Fatal error: Call to undefined function getimagesizefromstring()
  • jankin6
  • jankin6
  • 2017-06-03 20:02:29
  • 5547

百度OCR文字识别PHP的Demo

原帖:http://tieba.baidu.com/p/3850888578 作者:syjsu if(isset( $_FILES['image'] )){ $ch = curl_init...
  • chenhao112358
  • chenhao112358
  • 2015-09-23 20:38:53
  • 3481

<em>php</em> <em>ocr</em> 库

用百度AI的OCR文字识别结合<em>PHP</em>实现了图片的文字识别功能 <em>php</em> ocr 库 立即下载 上传者: doujiajun 时间: 2013-05-08 综合评分: 4 积分/C币:3 <em>百度OCR</em>文字...
  • 2018年04月17日 00:00

百度人脸识别技术

参考该URL绝对可以实现人脸对比功能 https://ai.baidu.com/docs#/Face-Match/top
  • a639735331
  • a639735331
  • 2018-02-04 15:58:50
  • 483

(开包即用,不用看代码!)在 Docker 中用 nginx 和 PHP-fpm 运行来自 Windows 共享文件夹的网站

准备:PowerShell,git,docker。使用docker-machine命令可以找到一台可用的Docker主机。开包即用,不用看代码!初始化进入一个文件夹。下载已经写好的开源项目,进入开源项...
  • hu_zhenghui
  • hu_zhenghui
  • 2018-02-04 17:49:08
  • 157

docker搭建nginx+php-fpm开发环境

发私信流程目前现状:活动私信: new模块 根据条件得到用户uid-》获取私信配置-》调用发私信接口-》标记用户已发-》私信总数加+1 防流失私信私信流程: vip模块根据条件圈定用户-》获取私信配置...
  • lylclz
  • lylclz
  • 2017-12-16 22:31:20
  • 289

<em>OCR</em>图像识别技术源码内有说明

OCR图像识别技术源码内有说明由于jar中无法包含libs本地so,所分开了。直接导入...<em>百度OCR</em>文字识别<em>PHP</em>的Demo Java OCR tesseract 图像智能字符识别技术 Java代码实现...
  • 2018年04月18日 00:00

php图片识别

1、文字识别tesseract-ocr/tesseract下载:https://github.com/tesseract-ocr/tesseract/wiki/Downloads按照自己的系统进行选择...
  • zhezhebie
  • zhezhebie
  • 2018-01-04 09:38:36
  • 571

基于Docker的Nginx + PHP-FPM + Phalcon镜像(转载后修改)

转载学习用~ 转自:http://courages.us/archives/761 上一篇简单介绍了Docker的安装,运行,这一篇来构建一个基于Nginx和PHP-FPM的Phalcon镜像。...
  • ling811
  • ling811
  • 2017-01-10 17:57:09
  • 3646

【docker】使用docker快速搭建nginx+php开发环境

前面说了一下docker的简介以及在Windows中的安装过程,下面就开始简单说一下如何用docker搭建常用的开发环境,以便读者快速上手。事先准备 docker已经下载完毕并正确安装。 找一个适合自...
  • qq_28602957
  • qq_28602957
  • 2016-12-18 15:27:37
  • 19742
收藏助手
不良信息举报
您举报文章:(开包即用,不用看代码!)在 Docker 中用 nginx 和 PHP-fpm 运行来自 Windows 共享文件夹的路由模式网站
举报原因:
原因补充:

(最多只允许输入30个字)