在不使用 Docker Desktop 的情况下开始在 Windows 上使用 Docker (WSL2)
在Windows 10和11上安装Docker容器化平台有两种方法。可以安装为适用于 Windows 的 Docker 桌面应用程序(使用内置的 Hyper-V + Windows 容器功能),或作为完整的Docker引擎安装在 Windows Subsystem for Linux (WSL2) 中运行的 Linux 发行版中。本指南将引导您在 WSL 环境中完成 Docker Engine 的安装和基本配置,而无需使用 Docker Desktop。
在 WSL 中使用 Docker Engine 的优点:
- Docker Desktop 需要 Windows 10/11 专业版或企业版。 WSL 中的 Docker 引擎甚至可以在 Windows Home 版本上运行
- 适用于 Windows 的 Docker Desktop 需要额外的 RAM 和磁盘空间来运行 Hyper-V 虚拟机和额外的 Windows 容器
- Docker Desktop 对于小型企业(最多 250 名员工)、个人和非商业项目免费。在其他情况下,您需要购买付费订阅。
假设您已在 Windows 计算机上安装了 WSL2(适用于 Linux 的 Windows 子系统)环境,并使用可用的 Linux 映像之一(Ubuntu:22.04在此示例中)。列出可用的 WSL 发行版:
wsl --list
要设置默认 WSL 映像,请运行以下命令:
wsl --setdefault Ubuntu-24.04

确保您使用的是 WSL2:
wsl --version


如果没有,请运行:
wsl --set-default-version 2
连接到 WSL 环境中的 Linux 映像:
wsl.exe
更新 Linux 发行版(本例中为 Ubuntu)中的软件包:
$ sudo apt-get update && sudo apt-get upgrade -y
然后使用官方脚本在Linux上安装Docker Engine:
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
忽略有关在 WSL 环境中安装 Docker 的警告。
另请阅读:如何在不激活 Windows 的情况下从桌面删除回收站


将您的用户添加到 docker 组。这允许您运行 Docker 命令,而无需使用以下命令提升权限sudo或输入密码。
$ sudo usermod -aG docker $USER
验证 Docker Engine 和 Compose 是否已成功安装:
$ docker --version
$ docker compose version


现在将 Docker 守护进程配置为在 WSL 中自动启动。 WSL目前完全支持系统(许多流行的 Linux 发行版使用的 init 系统和服务管理器)。检查它是否在您的 WSL Linux 映像中启用:
$ cat /etc/wsl.conf
[boot] systemd=true


然后检查systemd是否被用作Linux init系统:
$ stat /sbin/init
在这种情况下,systemd 用于 init(因为/sbin/初始化是一个符号链接/lib/systemd/systemd)。


运行 Docker Engine 服务并启用自动启动:
$ sudo systemctl enable --now docker.service
$ systemctl status docker.service


如果由于某种原因未使用 systemd,您可以将其添加到 WSL 启动中:
$ nano /etc/wsl.conf
[boot] command = "/usr/sbin/service docker start"
默认情况下,WSL2 可以使用以下主机资源:
- 50% 内存
- 交换文件的 25%
- 100% 的 CPU 资源
如果要限制 WSL2 子系统对主机资源的使用,请创建一个文本文件%UserProfile%.wslconfig在当前用户的个人资料中。该文件可用于设置所有 WSL 发行版的全局限制。例如,添加以下内容:
[wsl2] memory=8GB processors=4 swap=2GB
从 Windows 命令提示符重新启动 WSL 映像:
wsl --shutdown
在 WSL 中运行测试 Docker 容器:
$ docker run hello-world
Docker Engine 将下载并运行hello-world来自 Docker Hub 的演示容器。
为了从 WSL2 获得最佳性能,请将所有 Docker 容器文件存储在 WSL 中,而不是存储在从 Windows 主机重定向的目录中(例如 /mnt/c)。
现代 Linux 版本(Ubuntu 22.04、Debian 10+)使用nftables而不是 iptables 来管理内置防火墙。 WSL 中的本机 nftables 支持需要 Linux 内核 5.8 或更高版本。为了使网络在旧内核上正常工作,请启用与 iptables 的兼容性:
$ sudo update-alternatives --config iptables


按1选择 iptables-legacy 模式。
现在,您可以从 Windows 命令提示符在 WSL 中运行 Docker 命令。
在任何 Docker 命令之前,您必须指定瓦斯尔。例如,列出可用的 Docker 镜像:
wsl docker images


现在您可以在 Windows 计算机上开发和运行 Docker 容器。
