易游网-易游模拟器

 找回密码
 立即注册
查看: 1989|回复: 0

[php] win10利用docker配置lnmp环境全攻略

[复制链接]

1412

主题

1669

帖子

1万

积分

管理员

夏墨独周

Rank: 9Rank: 9Rank: 9

积分
10094

论坛元老技术达人

QQ
发表于 2020-12-2 10:40:55 | 显示全部楼层 |阅读模式
1、首先到官网下载docker for windows,一路安装好。

2、安装好docker后就可以在powershell中使用docker命令了
介绍下docker的基础命令
(1)查看镜像
docker images
(2)查看正在运行的容器
docker ps
(3)宿主机器拷贝文件到容器
docker cp 宿主机器文件路径 容器id:容器里面的路径
(4)拉取安装mysql5.6镜像
docker pull mysql:5.6
(5)重启某容器以nginx为例子
docker restart nginx
(6)创建并启动容器
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mysql密码 --name mysql56 mysql:5.6
-d 让容器在后台运行
-v 添加目录映射
-p 添加宿主机到容器的端口映射(宿主机端口:容器端口)
--link 与另外一个容器建立起联系
–name 容器的名字
(7)进入容器交互式命令行
docker exec -ti mysql56 /bin/bash

3、在容器内可以和ubuntu中执行命令一样
apt update 更新软件源
apt-get install vim 安装vim编辑器

4、安装lnmp环境
(1)windows上找一个目录放lnmp的配置文件。比如我放在E:/php下面
里面建立mysql文件夹,nginx-conf文件夹,php-conf文件夹,www文件夹

(2)安装php镜像,5.6和7.4都可以,选择一个。
docker pull php:5.6-fpm或docker pull php:7.4-fpm
以php7.4为例子。
[1]使用php:7.4-fpm镜像创建运行php容器
docker run --name php -d php:7.4-fpm
[2]拷贝容器里php配置文件,到本地php配置文件映射目录
docker cp php:/usr/local/etc/php-fpm.d/www.conf E:/php/php-conf/www.conf
docker cp php:/usr/local/etc/php/php.ini-production E:/php/php-conf/php.ini
[3]重新运行php镜像,并添加目录和配置文件映射
docker kill php
docker rm php
docker run --name php -v /e/php/www:/var/www/html -v /e/php/php-conf/www.conf:/usr/local/etc/php-fpm.d/www.conf -v /e/php/php-conf/php.ini:/usr/local/etc/php/php.ini -d php:7.4-fpm

(3)安装nginx,拉取最小nginx
docker pull nginx
[1]运行nginx容器,映射目录和端口
docker run --name nginx -p 80:80 -d -v /e/php/www:/var/www/html -d nginx
[2]#复制配置文件到本地,并重启nginx容器,添加目录和配置映射
docker cp nginx:/etc/nginx/conf.d E:/php/nginx-conf/conf.d
docker kill nginx
docker rm nginx
docker run --name nginx -p 80:80 -v /e/php/www:/var/www/html -v  /e/php/nginx-conf/conf.d:/etc/nginx/conf.d/ --link php:php -d nginx
[3]修改本地nginx配置,对照下面修改
    #修改/e/php/nginx-conf/conf.d/default.conf
    server {
        listen       80;
        listen  [::]:80;
        server_name  localhost;
        root   /var/www/html;   //修改根目录

        #charset koi8-r;
        access_log  /var/log/nginx/host.access.log  main;   //打开访问日志
        error_log  /var/log/nginx/host.error.log  warn;     //打开错误日志

        location / {        
            index  index.html index.htm index.php;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            fastcgi_pass   php:9000;        //指向端口9000上的主机名php
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
            deny  all;
        }
    }

    修改完重启nginx容器  docker restart nginx
    或在nginx容器  service nginx reload

(3)安装mysql
[1]拉取最新mysql
docker pull mysql
[2]创建运行mysql容器实例
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /e/php/mysql/data:/var/lib/mysql -v /e/php/mysql/conf:/etc/mysql/conf.d -d  --privileged=true mysql
#mysql安装到c盘会报错,启动不了,放到了e:/php/mysql/data下

(4)本地测试php环境
[1]打开/e/php/www创建index.php文件(phpinfo)
[2]访问地址:127.0.0.1/index.php
    看到phpinfo页面,大功告成!!!

5、报错问题列表
(1)运行discuz,提示mysqli没有,执行如下命令
安装pdo_mysql及mysqli扩展
docker-php-ext-install pdo_mysql
docker-php-ext-install mysqli

(2)WIN10下 docker报错Error response from daemon: invalid mode
解决办法:docker挂载目录不能使用D:/docker这种写法,正确写法:/d/docker

(3)访问报错
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "localhost"
解决方法:1、nginx配置文件
fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
改为
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

或2、查看php并入到nginx里,即配置nginx时是否使用 --link php:php(当初这个问题找了一天才发现)

(4)访问报错
upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.33.1, server: waiter-host.chuchujie.com, request: "GET /admin.php?s=/Index/test HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "waiter-host.chuchujie.com"
解决办法:nginx配置文件,
fastcgi_pass   127.0.0.1:9000;
改为
fastcgi_pass   php:9000;


来源:易游模拟器(QQ:207621422),转载请注明出处!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|易游网-易游模拟器 Copyright @2015-2021 ( 浙ICP备15028007号-1 )

GMT+8, 2024-11-27 09:47 , Processed in 0.019130 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表