WSL 让 Windows 上使用 Linux 没有了传统虚机的那种切换压力。Docker 是一个简单的服务容器化解决方案,但是Windows 上的 Docker 桌面版只对个人和小公司免费,而且 Docker 桌面版太庞大,增加了启动 Windows 的时间,也增加了系统资源的消耗。
本文介绍如何在 WSL 2.0 系统里在不安装 Docker 桌面版的情况下直接安装 Docker。本文以 Ubuntu 20 为例,其他 Linux 版本也可以参考本系统的安装方法。
前提条件
要直接安装 Linux 版的 Docker需要系统满足以下条件。
- 系统已经安装了 WSL 2.0
用户可以执行下面的命令检查当前系统的 Linux 版本和 WSL 版本
wsl -l -v
下图显示当前的 Linux 版本是 Ubuntu 20.04, WSL 版本为 2。
NAME STATE VERSION
* Ubuntu-20.04 Running 2
- 系统安装的是 Ubuntu 20
用户可以从 Windows 商店搜索 Ubuntu 安装。安装完成以后进入 wsl 输入以下命令
cat /etc/os-release
应该可以看到类似下图的内容:
NAME="Ubuntu"
VERSION="20.04.5 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.5 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
安装 Docker
打开 WSL,根据下面的文档安装 Docker
大致步骤如下:
- 卸载老版本
sudo apt-get remove docker docker-engine docker.io containerd runc
- 配置软件仓库
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
- 给软件仓库加上 docker 的签名
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
- 设置好仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 安装 Docker 引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
- 启动 Docker 服务
sudo service docker start
- 验证安装是否成功
sudo docker run hello-world
给 Docker 加上代理
有时候因为网络原因,Docker 无法下载镜像文件,我们可以通过设置代理来解决。注意 Docker 官方的给 Docker Client 配置 proxy 的方法是给 docker 容器里的程序访问外网配置的代理。
另外 WSL 不使用 systemd,所以传统的 Linux 中给 docker 加代理的方法并不适用。
这里介绍的方法是如何使用代理下载 docker 镜像文件。具体步骤如下:
- 进入 WSL
- 使用 nano 编辑 /etc/default/docker
sudo vim /etc/default/docker
- 输入类似下面的内容然后保存
export HTTP_PROXY="http://172.26.198.222:10080"
export HTTPS_PROXY="http://172.26.198.222:10080"
export NO_PROXY="localhost,127.0.0.0/8,172.16.0.0/12,192.168.0.0/16,10.0.0.0/8,172.0.0.0/8"
- 重启 docker 服务
sudo service docker restart