Windows官方攻略推荐在Windows下安装docker,比较麻烦。这边尝试在WSL2中直接通过docker搭建lnmp环境。
安装WSL
官方文档
官方文档中介绍了两种方式安装WSL,一种是简化安装,输入一行命令即可。另一种是手动安装,有6个步骤。
使用简化安装需要加入 Windows 预览体验计划,我选用的是手动安装。以下是安装方法:
- 组合键win+x,以管理员身份打开 PowerShell 并运行:
> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
- 重新启动 计算机,以完成 WSL 安装并更新到 WSL 2。
- 下载 并安装Linux 内核更新包。(官方下载地址)
- 将wsl2设为默认:
> wsl --set-default-version 2
- 打开 Microsoft Store,并选择你偏好的 Linux 分发版。(我选的Ubuntu20.4)
- 验证安装:
> wsl --list --verbose
NAME STATE VERSION
* Ubuntu-20.04 Running 2
打开下好的Ubuntu20.4,第一次进入需要设置账号密码,输入即可。
至此,WSL2已安装完成。
可选:安装 Windows 终端
新版windows多窗口终端界面好看,可以使用ctrl+c和ctrl+v,推荐使用。
安装文档
下载地址
安装docker
安装方法参考:官方文档
进入Ubuntu20.4,输入
$ sudo apt-get remove docker docker-engine docker.io containerd runc
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
验证安装:
$ sudo docker version
启动服务
$ sudo service docker start
安装docker-composer(可选)
$ sudo apt install python3
$ sudo apt install python3-pip
$ sudo python3 -m pip install --upgrade pip
$ pip3 install docker-compose
验证docker-composer
docker-compose version
现在可以去github找一个docker-lnmp跑起来就行了。
常见问题
- 文件共享:在WSL中,访问/mnt目录,即可访问windows下的硬盘。在Windows中的资源管理中输入\\wsl$即可访问WSL中的文件系统。
- 文件权限:Windows下挂载的文件,全部是777,应该不存在无法访问的问题。
- IP地址:重启后,通过ip addr发现,WSL的IP地址也会改变。固化方法:将以下文件保存为bat,每次需要wsl时执行一下:(需要使用管理员权限执行)
@echo off
setlocal enabledelayedexpansion
wsl -u root service docker start | findstr "Starting Docker" > nul
if !errorlevel! equ 0 (
echo docker start success
:: set wsl2 ip
wsl -u root ip addr | findstr "192.168.169.2" > nul
if !errorlevel! equ 0 (
echo wsl ip has set
) else (
wsl -u root ip addr add 192.168.169.2/28 broadcast 192.168.169.15 dev eth0 label eth0:1
echo set wsl ip success: 192.168.169.2
)
:: set windows ip
ipconfig | findstr "192.168.169.1" > nul
if !errorlevel! equ 0 (
echo windows ip has set
) else (
netsh interface ip add address "vEthernet (WSL)" 192.168.169.1 255.255.255.240
echo set windows ip success: 192.168.169.1
)
)
pause
执行后,会给WSL新增一个固定ip:192.168.169.2