那些比你走得远的人,并不比你聪慧,只是每天多走了一点。坚持,是最强大的力量。

Windows 10 WSL2 安装使用及Docker安装

1. WSL2 子系统安装使用

WLS2 需要 Windows 10 Version 2004 Build 19041 或更高版本,使用 Windows Update 自动更新到2004版本。如果没有检测到更新,可以去微软官网下载 易升 工具并安装运行。工具会检测到更新并安装。

如果需要使用 Docker for Windows,需要下载 WLS Updata 补丁并安装。

1.1 启用Linux子系统

打开 控制面板 -> 程序 -> 启用或关闭Windows功能。找到 适用于Linux的Windows子系统虚拟机平台,勾选这两项之后确定,并重新启动计算机。

也可以通过命令行启用,以管理员身份打开 PowerShell,输入如下命令,并 重启电脑

1
2
3
4
# 开启 虚拟机平台 可选组件
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
# 开启 适用于Linux的Windows子系统 可选组件
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

1.2 安装Ubuntu 20.04

打开 Microsoft Store搜索 Linux,选择 Ubuntu 20.04 并点击 安装

安装过程中,请设置用户名及密码,如果需要使用root用户,则需要执行以下命令

1
2
3
4
$sudo passwd root
New password:
Retype new password:
passwd: password updated successfully

为了更方便的使用子系统,推荐安装 Terminal

1.3 安装Windows Terminal

打开 Microsoft Store, 搜索 Windows Terminal,选择 安装.

1.4 WSL常用命令

1.4.1 查看现有的WSL
1
2
3
4
5
wsl -l -v # 或 wsl --list --verbose 
# 输出结果
NAME STATE VERSION
* docker-desktop Stopped 2
Ubuntu-20.04 Stopped 2
1.4.2 WSL1转化为WSL2
1
2
3
4
5
wsl --set-version $已经使用的WSL的名字 2
# 输出结果
正在进行转换,这可能需要几分钟时间...
有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
转换完成。
1.4.3 将WSL2设置为默认
1
2
3
wsl --set-default-version 2
# 输出结果
有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
1.4.4 立即终止所有正在运行的发行版和WSL2虚拟机
1
wsl --shutdown
1.4.5 获取宿主Windows的IP
1
2
3
# WSL2使用的是虚拟机技术和WSL第一版本不一样,和宿主windows不在同一个网络内
# 获取宿主windows的ip
export windows_host=`ipconfig.exe | grep -n4 WSL | tail -n 1 | awk -F":" '{ print $2 }' | sed 's/^[ \r\n\t]*//;s/[ \r\n\t]*$//'`
1.4.6 全面设置WSL内的代理

假设你的宿主Windows代理端口是1080

1
2
3
4
5
export ALL_PROXY=socks5://$windows_host:1080
export HTTP_PROXY=$ALL_PROXY
export http_proxy=$ALL_PROXY
export HTTPS_PROXY=$ALL_PROXY
export https_proxy=$ALL_PROXY
1.4.7 设置git的代理
1
2
3
if [ "`git config --global --get proxy.https`" != "socks5://$windows_host:1080" ]; then
git config --global proxy.https socks5://$windows_host:1080
fi
1.4.8 设置docker内的代理

在/etc/default/docker有

1
2
3
export http_proxy="socks5://[windows_host]:1080"
export https_proxy="socks5://[windows_host]:1080"
sudo sed -i -E "s#socks5.*?1080#socks5://$windows_host:1080#" /etc/default/docker
1.4.9 设置WSL内的DNS, 默认是系统自己创建的
1
sudo bash -c 'echo -e "nameserver 114.114.114.114\nnameserver 8.8.8.8\nnameserver 8.8.4.4" > /etc/resolv.conf'
1.4.10 打通Window与Ubuntu网络

管理员身份 打开 PowerShell

1
2
# x.x.x.x 为 Ubuntu IP,请替换
netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=80 connectaddress=x.x.x.x
1.4.11 WSL、WSL2 导出迁移

WSL2虚拟机长时间使用占用空间过大导致C盘爆满,把他迁移到E盘

1
2
3
4
5
6
# EXPORT 导出
wsl --export Alpine ./Alpine.tar
# IMPORT 导入
mkdir e:\newAlpine
wsl --import Alpine e:\newAlpine Alpine.tar
explorer.exe e:\newAlpine

2. Docker 安装

2.1 更新操作系统

1
2
3
sudo apt-get update
sudo apt-get upgrade -y
sudo apt autoremove

2.2 安装常用软件

1
sudo apt-get -y install git curl wget unzip lrzsz net-tools

2.2 安装Docker前准备

2.2.1 卸载旧版本
1
sudo apt-get remove docker docker-engine docker.io containerd runc
2.2.2 安装依赖使apt能够使用基于https的仓库
1
2
3
4
5
6
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common -y
2.2.3 添加docker的离线 gpg key
1
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
2.2.4 验证key的信息
1
2
3
4
5
6
sudo apt-key fingerprint 0EBFCD88

pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <docker@docker.com>
sub rsa4096 2017-02-22 [S]
2.2.5 设置docker各版本的安装源(此处是 stable 版本)

To add the nightly or test repository, add the word nightly or test (or both) after the word stable in the commands below.

1
2
3
4
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

2.3 开始安装 docker

2.3.1 更新软件目录
1
sudo apt-get update
2.3.2 安装最新版本的 docker
1
sudo apt-get install docker-ce docker-ce-cli containerd.io -y
2.3.3 启动测试
1
2
3
4
# 启动 docker 守护进程
sudo service docker start
# 运行测试
sudo docker run hello-world

2.4 免sudo使用docker命令

如果在一台新机器上面安装docker时候发现在安装完成之后爆出类似于下面的错误

1
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/images/json: dial unix /var/run/docker.sock: connect: permission denied

报错显示权限不够、那么如何解决这个问题呢?

官方文档给出了解决方案,那就是将你的用户添加到 docker 这个用户组里面即可

2.4.1 添加docker group组
1
sudo groupadd docker

##### 2.4.2 将用户加入该group内

退出并重新登录就生效啦。

1
sudo gpasswd -a ${USER} docker
2.4.3 重启docker服务
1
sudo service docker restart
2.4.4 切换当前会话到新group或者重启会话
1
newgrp - docker

现在配置就完成了、可以免 sudo 使用,docker 命令了。