在沒有Docker桌面的Windows上使用Docker(WSL2)開始

在Windows 10和11上安裝Docker容器化平台有兩種方法。可以將其安裝為Windows的Docker桌面應用程序(使用內置的Hyper-V + Windows容器功能)或作為完整的Docker引擎安裝在Linux Windows子系統中的Linux發行版中(WSL2)。本指南將使您在不使用Docker桌面的情況下,在WSL環境中瀏覽Docker引擎的安裝和基本配置。

在WSL中使用Docker Engine的優勢:

  • Docker桌面需要Windows 10/11的Pro或Enterprise Edition。 WSL中的Docker引擎甚至可以在Windows Home Editions上運行
  • Windows的Docker桌面需要其他RAM和磁盤空間來運行Hyper-V虛擬機和其他Windows容器
  • Docker Desktop適用於小型企業(最多250名員工),個人和非商業項目。在其他情況下,您需要購買付費訂閱。

假設您已經在Windows計算機上安裝了WSL2(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的警告。

將您的用戶添加到Docker組。這使您可以運行Docker命令,而無需提高特權sudo或輸入密碼。

$ sudo usermod -aG docker $USER

驗證Docker Engine和Compose已成功安裝:

$ docker --version
$ docker compose version

現在,配置Docker守護程序以在WSL中自動啟動。 WSL目前完全支持Systemd(許多流行的Linux發行版使用的初始系統和服務經理)。檢查WSL Linux圖像中是否啟用了它:

$ cat /etc/wsl.conf

另請閱讀:

[boot]
systemd=true

然後檢查SystemD用作Linux Init System:

$ stat /sbin/init

在這種情況下,SystemD用於初始化(因為/sbin/init是指向/lib/systemd/systemd)。

運行Docker Engine Service並啟用AutoStart:

$ sudo systemctl enable --now docker.service
$ systemctl status docker.service

如果由於某種原因未使用SystemD,則可以將其添加到WSL啟動中:

$ nano /etc/wsl.conf

[boot]
command = "/usr/sbin/service docker start"

默認情況下,WSL2可以使用以下主機計算機資源:

  • RAM的50%
  • 交換文件的25%
  • 100%CPU資源

如果要限制WSL2子系統對主機資源的使用,請創建一個文本文件%UserProfile%.wslconfig在當前用戶的個人資料中。該文件可用於為所有WSL發行版設置全局限制。例如,添加以下內容:

[wsl2]
memory=8GB
processors=4
swap=2GB

從Windows命令提示重新啟動WSL映像:

wsl --shutdown

在WSL中運行一個測試碼頭容器:

$ docker run hello-world

Docker Engine將下載並運行hello-worldDocker Hub的演示容器。

要從WSL2獲得最佳性能,請將所有Docker容器文件存儲在WSL中,而不是從Windows主機重定向的目錄中(例如 /MNT /C)。

現代Linux版本(Ubuntu 22.04,Debian 10+)使用Nftables而不是用於管理內置防火牆的iptables。 Linux內核5.8或更高版本WSL中的本機Nftables支持所需。要使網絡與舊內核正常工作,請啟用與iPtables的兼容性:

$ sudo update-alternatives --config iptables


1選擇iptables-segacy模式。

現在,您可以通過Windows命令提示符在WSL中運行Docker命令。

在任何Docker命令之前,您必須指定WSL。例如,列出可用的Docker映像:

wsl docker images

現在,您可以在Windows機器上開發並運行Docker容器。