Win10下的WSL2和docker安装及利用vscode的Go环境配置全流程

  • 1.安装Hyper-V
  • 2.将WSL版本升级为WSL2
  • 3.把子系统搬到非系统盘
  • 4.安装 Docker Desktop for Windows
  • 5.子系统使用
  • 6.子系统Golang安装及环境配置
  • 7.进行开发


如果使用的是家庭版win10,先win+R输入winver看看操作系统版本号是不是

  • Windows 10 64-bit: 家庭版 or 专业版 21H1 (build 19043)及以上, or 企业版 or 教育版 20H2 (build 19042)及以上.

不是的话本篇文章无效

1.安装Hyper-V

这个是Windows10内置的,不用去特地下载安装,这是 Docker Desktop for Windows 所使用的虚拟机。
但是这个虚拟机一旦启用,QEMU、VirtualBox 或 VMWare Workstation 15 及以下版本将无法使用!(所以更新到VMWare Workstation 16就万事大吉了)

首先右键开始菜单,选择应用与功能

vscode调试 k8s容器_vscode调试 k8s容器

然后点击程序与功能

vscode调试 k8s容器_docker_02

选择启用或关闭Windows功能

vscode调试 k8s容器_vscode调试 k8s容器_03

这是第一种情况

vscode调试 k8s容器_容器_04

如果你的界面是这样的,且没有下列选项中的Hyper-V,则先选中打钩的下面三个,然后确定,再参考win10没有Hyper-v的解决方法

vscode调试 k8s容器_linux_05

2.将WSL版本升级为WSL2

首先看看版本号是否为2

wsl -l -v

若已有发行版且版本为1,使用命令

wsl --set-default-version 2

发现版本还没改过来

管理员权限打开终端,输入命令:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

然后下载Linux的内核更新包并安装
x64:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

仍然是管理员权限下打开终端,先查看更新前的WSL版本:

wsl -l -v

输入更新的命令:

wsl.exe --set-version Ubuntu 2

更新命令有的用的:wsl --set-version Ubuntu 2,但是在我的电脑上报错:不存在具有提供的名称的分布。 解决方法就是把wsl改成wsl.exe.

如果未安装Linux发行版,也可以上Microsoft Store上直接安装

最后看看版本号是否为2

wsl -l -v

3.把子系统搬到非系统盘

一个Ubuntu占在本来空间就不够的C盘,后患无穷,因此把子系统路径搬到其他盘
假设我们要安装的路径为F:\Ubuntu,首先设置目录权限,user_name输入自己电脑的用户名

icacls F:\Ubuntu /grant "user_name:(OI)(CI)(F)"

下载 LxRunOffline Releases · DDoSolitary/LxRunOffline (github.com) 作者使用3.5.0 msvc版,具体区别参考该项目README.md

下载后解压,cmd进入解压后目录,lxrunoffline list命令查看可迁移子系统,

lxrunoffline list

直接用windows Powershell输入命令的话要在前面加.\

.\lxrunoffline list

输入下面的命令开始迁移,这个过程视情况不同可能要持续几分钟,期间出现WARNING不用担心,什么都没出现也不用担心,耐心等待程序执行完毕即可。

lxrunoffline move -n Ubuntu -d F:\Ubuntu

-n后面是子系统名称,-d后面是目标迁移路径

如果你在确认子系统关闭后依然报错:[ERROR] The distro “Ubuntu-18.04” has running processes and can’t be operated.

需要重启服务:LxssManager
图形化操作:
在桌面上同时按 Win + x,再按 g打开计算机管理 → 服务与应用程序 → 服务 → 找到LxssManager -> 右键该服务然后重新启动
命令行操作(管理员模式打开cmd):

net stop LxssManager

net start LxssManager

可以查询系统目录,查看是否成功迁移

lxrunoffline get-dir -n Ubuntu

4.安装 Docker Desktop for Windows

很简单,去https://hub.docker.com/editions/community/docker-ce-desktop-windows下载,一路安装同意(没啥选项毕竟),安装之后,可以打开 PowerShell 并运行以下命令检测是否运行成功:

docker run hello-world

刚开始弹

Unable to find image 'hello-world:latest' locally

的时候别惊慌,等一会如果显示以下信息则安装成功

Pulling repository hello-world
 91c95931e552: Download complete
 a8219747be10: Download complete
 Status: Downloaded newer image for hello-world:latest
 Hello from Docker.
 This message shows that your installation appears to be working correctly.

 To generate this message, Docker took the following steps:
  1. The Docker Engine CLI client contacted the Docker Engine daemon.
  2. The Docker Engine daemon pulled the "hello-world" image from the Docker Hub.
     (Assuming it was not already locally available.)
  3. The Docker Engine daemon created a new container from that image which runs the
     executable that produces the output you are currently reading.
  4. The Docker Engine daemon streamed that output to the Docker Engine CLI client, which sent it
     to your terminal.

 To try something more ambitious, you can run an Ubuntu container with:
  $ docker run -it ubuntu bash

 For more examples and ideas, visit:
  https://docs.docker.com/userguide/

5.子系统使用

首先你要能够复制粘贴命令

win10复制到Ubuntu中

1、在win10中进行复制 ctrl + c或者右键复制
2、把在ubuntu中利用vim指令打开一个文件,把光标放在ubuntu内部,点击鼠标右键。即完成复制

ubuntu复制到win10中

1、在ubuntu中选中需要复制的内容,点击右键,即复制完成。
2、打开win10中需要粘贴的文件,ctrl + v

1.打开cmd,输入如下代码进入根目录

wsl -u root

2.更新密码

passwd 你的名称 # 例如我的ubuntu名称被我命名为hunger,那么我该输入passwd hunger

3.系统将提示你输入新的密码,然后确认该密码。 使用exit命令在cmd内关闭 WSL

exit

6.子系统Golang安装及环境配置

不要直接sudo apt install安装,因为Golang在ubuntu的软件源当中最新版也只有1.13,因此只能用下述方法:

#进入临时目录
$ cd /tmp

#wget 后面的下载链接去golang官网(https://golang.google.cn/dl/)获取你想下载的对应go版本,这里只是示例版本
sudo wget https://golang.google.cn/dl/go1.17.6.linux-amd64.tar.gz

解压到 `/usr/local` 目录:
$ sudo tar -C /usr/local -xzf go1.17.6.linux-amd64.tar.gz

打开:

sudo vim /etc/profile

将以下内容追加到文件末尾(开启大写模式,按G跳到文件末尾,然后关闭大写模式按o在下一行插入,复制粘贴一下内容后esc,vi编辑器的使用参考本人总结的【Linux】vi编辑器入门 - 掘金)

export GOROOT=/usr/local/go
export GOPATH=$HOME/gowork
export GOBIN=$GOPATH/bin
export PATH=$GOPATH:$GOBIN:$GOROOT/bin:$PATH

输入以下命令保存

:wq

使环境变量生效

source /etc/profile

如果只是这样做,在关闭终端后,重新打开环境变量又会失效,除了重新启动系统之外,可以在用户根目录的.bashrc

cd ~
sudo vim .bashrc

在文件末尾加入如下命令

source /etc/profile
go env

vscode调试 k8s容器_vscode调试 k8s容器_06

开启GO111MOUDLE和更改GOPROXY

go env -w GOPROXY="https://goproxy.cn"
go env -w GO111MODULE=on

如果你跟着上面的步骤做,启动wsl时产生了一些奇怪的在windows环境变量的报错

-bash: /home/tyxx/.profile: line 28: `export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/d/Program Files (x86)/VMware/VMware Workstation/bin/:/mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath:/mnt/c/Program

原因是 wsl的环境变量里面,包含了windows的环境变量,有些字符不对,linux shell 不识别
echo $PATH 可以看到上述信息

可以用

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

以上命令会只保留Linux的系统环境变量
然后重新使.bashrc中配置的环境变量生效

source /etc/profile

7.进行开发

项目克隆在子系统当中,不知道放哪就

cd ~

以该参考项目快速开始 | CloudWeGo作为示例
docker编译项目时,报错没有安装docker先别急,在docker desktop上的设置,WSL Integration打钩并打开相关系统的集成,如果已打开就再关闭打开一次

打开vscode,安装Remote - WSL扩展

打开vscode内终端,输入wsl启动子系统,然后输入code就会弹出新的窗口,文件系统编译环境都为子系统

本文参考文献:
Windows Docker 安装 | 菜鸟教程 (runoob.com)安装 WSL | Microsoft Docs在 WSL |上开始使用 Docker 容器微软文档 (microsoft.com)Docker Desktop WSL 2 后端|Docker 文档   快速开始 | CloudWeGo     Win10 Ubuntu子系统密码忘记如何修改 - 简书Ubuntu安装go/升级go版本【转载】 - 知乎Ubuntu 20.04 LTS 下载编译安装最新版 Golang 教程-主机之家