AI编程生活评测

不使用 Docker Desktop 在 WSL2 上运行 Docker

编程笔记 / 2024-10-14 / 3 min

Docker Desktop 是一个畸形的产品,在某些情况下需要付费,最新的版本中一些功能需要登录,这对于墙内的人来说体验不好,避免出现新的限制,还是抛弃 Docker Desktop 直接使用 Docker CE 吧。

你会得到什么

  • WSL2 上完整的 Docker 体验
  • Docker Daemon 自动启动,不需要什么黑科技
  • 大幅降低 WSL 进程 VmmemWSL 的内存占用,文章最后有对比

要求

已经正常安装了 WSL2 并已安装 Ubuntu 发行版。

环境配置:

OS 相关

# windows 版本
版本:Windows 11 家庭中文版
版本号:23H2
操作系统版本:22631.4317

# WSL 版本
wsl -v
WSL 版本: 2.3.24.0
内核版本: 5.15.153.1-2
WSLg 版本: 1.0.65
MSRDC 版本: 1.2.5620
Direct3D 版本: 1.611.1-81528511
DXCore 版本: 10.0.26100.1-240331-1435.ge-release
Windows 版本: 10.0.22631.4317

# Ubuntu 版本
lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.5 LTS
Release:        22.04
Codename:       jammy

WSL2 配置

配置文件 .wslconfig 内容:

[wsl2]
networkingMode=mirrored
autoProxy=true
dnsTunneling=true
firewall=true
memory=2GB
processors=4
swap=2GB
[experimental]
hostAddressLoopback=true

指南

安装 Docker CE

# 确保无旧软件包
$ 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 apt key
$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 添加 docker apt 库
$ 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

# 更新 apt
$ sudo apt-get update

# 安装 Docker CE
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

如果这里从 docker 官方安装比较慢,可以参考文章:在ubuntu22.04中使用阿里云镜像站安装docker(官方安装太慢)

安装完成后,执行后续操作:

# 确保 docker 组存在
$ sudo groupadd docker

# 当前用户添加到组中
$ sudo usermod -aG docker $USER

# 刷新权限组
newgrp docker

守护程序

实际上在最新版的 WSL2 中已经默认支持 systemd 了,Docker CE 安装完成后就已经自动添加到服务中了,不需要做什么修改。

附加

安装 Docker Compose

# 确认最新版本
$ switch_version=$(curl -fsSL -o /dev/null -w "%{url_effective}" https://github.com/docker/compose-switch/releases/latest | xargs basename)

# 下载二进制文件
$ sudo curl -fL -o /usr/local/bin/docker-compose \
    "https://github.com/docker/compose-switch/releases/download/${switch_version}/docker-compose-linux-$(dpkg --print-architecture)"

# 赋予执行权限
$ sudo chmod +x /usr/local/bin/docker-compose

至此,你的 WSL2 就拥有了一个完整版的 Docker 而完全不需要 Docker Desktop,在我这里,它还顺便帮我解决了,windows 11 主机无法访问 WSL2 中 Docker 中的服务的问题。

内存占用

更重要的,对于 VmmemWSL 内存占用可谓是天壤之别,在所有环境一样的情况下启动两个相同的容器的情况下,在使用 Docker Desktop 时,VmmemWSL占用内存超过 2G,而卸载 Docker Desktop 后直接在 WSL 中使用 Docker CE 时,占用内存在 200MB 左右,差距10倍,非常夸张。

点击刷新