在不使用 Docker Desktop 的情况下开始在 Windows 上使用 Docker (WSL2)

Jacki

在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 容器。