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