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文件。
在windows控制面板中开启hyper-V。
如果是家庭版需要伪装成专业版,cmd中运行如下命令。
REG ADD "HKEY_LOCAL_MACHINE\software\Microsoft\Windows NT\CurrentVersion" /v EditionId /T REG_EXPAND_SZ /d Professional /F
链接: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,不出意外能看到版本号。
右键任务栏的小鲸鱼,找到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
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
docker pull mysql:5.7
---
docker run --name mysql-server \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
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扩展已经安装上了
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链接