win10利用docker配置lnmp环境全攻略
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为例子。
使用php:7.4-fpm镜像创建运行php容器
docker run --name php -d php:7.4-fpm
拷贝容器里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
重新运行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
运行nginx容器,映射目录和端口
docker run --name nginx -p 80:80 -d -v /e/php/www:/var/www/html -d nginx
#复制配置文件到本地,并重启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
修改本地nginx配置,对照下面修改
#修改/e/php/nginx-conf/conf.d/default.conf
server {
listen 80;
listen[::]:80;
server_namelocalhost;
root /var/www/html; //修改根目录
#charset koi8-r;
access_log/var/log/nginx/host.access.logmain; //打开访问日志
error_log/var/log/nginx/host.error.logwarn; //打开错误日志
location / {
indexindex.html index.htm index.php;
}
#error_page404 /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_indexindex.php;
fastcgi_paramSCRIPT_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 {
denyall;
}
}
修改完重启nginx容器docker restart nginx
或在nginx容器service nginx reload
(3)安装mysql
拉取最新mysql
docker pull mysql
创建运行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环境
打开/e/php/www创建index.php文件(phpinfo)
访问地址: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_paramSCRIPT_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;
页:
[1]