windows10 下 docker 搭建 nginx + php7.2 + mysql5.7 + redis 并挂载

1.docker for windows 下载

1.1 windows 家庭版(专业版跳过此步骤)

windows家庭版没有Hyper-V的,于是搞一个Hyper-V并伪装成专业版,以便后续不踩坑。
新建hyperv.cmd文件,内容如下:

pushd "%~dp0"

dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt

for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"

del hyper-v.txt

Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL

以管理员身份执行hyperv.cmd文件。

1.2 开启Hyper-V

在windows控制面板中开启hyper-V。
如果是家庭版需要伪装成专业版,cmd中运行如下命令。

REG ADD "HKEY_LOCAL_MACHINE\software\Microsoft\Windows NT\CurrentVersion" /v EditionId /T REG_EXPAND_SZ /d Professional /F

1.3 下载docker for windows

链接:https://store.docker.com/editions/community/docker-ce-desktop-windows
遇到证书问题请把那四个环境变量删掉(此电脑->属性->高级设置->环境变量),以管理员身份执行cmd命令

docker-machine rm default
@FOR /f "tokens=*" %i IN ('docker-machine env -u') DO @%i

根据安装步骤走,看到可爱的小鲸鱼图标表示安装完成了。
随便打开一个cmd/power shell,输入 docker version,不出意外能看到版本号。

1.4 设置共享盘

右键任务栏的小鲸鱼,找到setting -> share drives,勾上要共享的盘,apply之后 reset -> restart 就好了。
有时会遇到打上勾apply之后会出现选中失败的情况,常见的问题是防火墙,网上一大堆解决方法,这里不赘述了,这里要说的是权限问题。
打开gpedit.msc,找到“本地账户的共享和安全模型”,设置为“经典”即可。

关于windows 10 家庭版不能打开gpedit.msc解决方法如下:
新建文本文档插入下面代码并改后缀为cmd,管理员运行即可。

@echo off
pushd "%~dp0"
dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txt
dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum >>List.txt
for /f %%i in ('findstr /i . List.txt 2^>nul') do dism /online /norestart /add-package:"C:\Windows\servicing\Packages\%%i"
pause

2 php7.2

docker pull php:7.2-fpm
---
docker run -p 9000:9000 -d --name php-server \
-v (XXX/wwwroot):/usr/share/nginx/html \
php:7.2-fpm
---
docker exec -it php-server /bin/bash
:docker-php-ext-install mysqli    添加一些扩展
:exit

3 mysql5.7

docker pull mysql:5.7
---
docker run --name mysql-server \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

4 redis

docker pull redis:latest
---
docker run --name redis-server \
-p 6379:6379 \
-d redis

接着需要给php安上扩展

docker exec -it php-server /bin/bash
pecl install igbinary && docker-php-ext-enable igbinary
pecl install redis && docker-php-ext-enable redis    官方文档推荐
此时会出现两个提示,第一个yes第二个no
exit
docker restart php-server
docker restart nginx-server

查看phpinfo,发现redis扩展已经安装上了

5 nginx

docker pull nginx
---
docker run -p 80:80 -d --name nginx-server \
-v (XXX/conf/nginx.conf):/etc/nginx/nginx.conf \
-v (XXX/conf.d):/etc/nginx/conf.d \
-v (XXX/log):/var/log/nginx \
-v (XXX/wwwroot):/usr/share/nginx/html \
--link php-server:php \				在设置了php容器后再加上
--link mysql-server:mysql \			在设置了mysql容器后再加上
--link redis-server:redis \ 		在设置了redis容器后再加上
nginx
---
docker ps -a  (查看容器状态)

"()"处是根据你自己的路径或配置来搞的。
值得一提的是,nginx.conf这里挂载的时候windows机器上如果报“Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.”这个错误的话,解决方法就是步骤1,当时我查了好久才终于特么搞定了。
配置nginx,打开conf.d的default.conf,添加

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

docker-compose链接

你可能感兴趣的:(工具,配置)