1 概述
作为一名使用 win10 的开发者,搭建开发环境往往是一件比较痛苦的事,需要从网上下载各种软件,在电脑上配置不同软件运行环境,对软件进行各种设置,不仅耗时,而且容易出现各种问题。搭建的环境还会存在下面一些问题:
- 安装大量程序造成路径污染。
- 安装和卸载比较麻烦。
- 开发环境不能迁移,重装系统或者换电脑需要重新搭建开发环境。
- 软件版本不好控制。
为了解决上面这些问题,我们可以使用 WSL+Docker+Scoop
搭建开发环境,取代通过图形界面安装软件和 VMware 安装 Linux 环境的传统方式。
WSL 是适用于 Linux 的 Windows 子系统, 可让开发人员按原样运行 GNU/Linux
环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器或 Windows 机器上。
Scoop 是 Windows 的命令行安装程序,可以让我们从命令行以最小的安装量安装程序, 它消除了安装界面和安装程序造成的路径污染,它安装和卸载软件只需一行命令就可以完成,它还可以随意切换软件的版本。
一个完整的开发环境组成:首先使用 WSL 搭建一个 Linux 环境,然后在 Linux 环境里安装 Docker 应用,使用 Docker 来安装一些常用软件,比如数据库、web 环境等,Scoop 则是在本机上安装一些开发用到的软件,比如 jdk
、maven
、idea
等。WSL 和 Scoop 都是比较容易备份和还原的,这两个搭建好了,我们利用备份还原可以快速在另一台机器上搭建同样的一套环境,下面是搭建环境的具体流程。
2 WSL
2.1 WSL 安装
-
使用 WINDOWS 键 + R,输入
winver
,检查 win10 版本,确保内部版本号是 18362.1049 以上,否则更新 win10 到最新版本。 -
以管理员身份打开
PowerShell
并运行下面命令:dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
-
重新启动计算机。
-
下载 Linux内核更新包,然后安装。
-
将
wsl2
设置为默认版本, 以管理员身份打开PowerShell
并运行下面命令:wsl --set-default-version 2
-
安装
Ubuntu 20.04 LTS
, 打开 Microsoft Store,搜索 Ubuntu 20.04 LTS 安装, 安装完成后打开Ubuntu 20.04 LTS
, 等候几分钟会提示设置用户名和密码,如果不设置用户名和密码直接关闭窗口则默认以root
登录,这里我们直接关闭窗口,不设置用户名和密码。 -
然后重新打开
Ubuntu 20.04 LTS
就会进入Ubuntu 20.04 LTS
了,我们也可以在powershell
使用wsl
这个命令进入Ubuntu 20.04 LTS
。
2.2 WSL 配置
WSL 每次启动后,windows 都会给它分配一个随机的 IP 地址,这样是不利于我们访问 docker 里的服务的,为了解决这个问题,我们可以创建一个脚本文件 wsl2-ip.bat
来给 wsl 分配一个固定的 IP,在每次启动 wsl 后用管理员权限运行这个脚本,文件内容如下:
@echo off
setlocal enabledelayedexpansion
:: 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 -d Ubuntu-20.04 -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