在 Windows WSL 安裝 Docker

在 Windows 的環境,要使用 Docker 除了 Docker Desktop  之外,也可以使用  WSL + Docker 來完成環境的搭建

通過 Windows Terminal 執行命令
https://apps.microsoft.com/detail/9n0dx20hk701?hl=zh-TW&gl=TW

開發環境

  • Windows 11 Home
  • PowerShell 7.4.6
  • WLS2

安裝 Windows Subsystem for Linux (WSL)

  • 以 Administrator 執行 Windows Terminal 。
  • 使用以下命令安裝 WSL和啟用虛擬化功能:
 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
 dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  • 完成後,重新啟動電腦。
  • 重啟後,執行以下命令 WSL 設定為版本 2
wsl --set-default-version 2

安裝 Ubuntu 24.04.1 LTS

方法一:Microsoft Store

https://apps.microsoft.com/detail/9nz3klhxdjp5?hl=zh-tw&gl=TW

方法二: WSL 命令行安装

列出可用的版本

wsl -l -o
╰─ wsl -l -o
以下是可安裝的有效發佈的清單。
使用 'wsl.exe --install <Distro>' 安裝。
NAME                            FRIENDLY NAME
Debian                          Debian GNU/Linux
SUSE-Linux-Enterprise-15-SP5    SUSE Linux Enterprise 15 SP5
SUSE-Linux-Enterprise-15-SP6    SUSE Linux Enterprise 15 SP6
Ubuntu                          Ubuntu
Ubuntu-24.04                    Ubuntu 24.04 LTS
kali-linux                      Kali Linux Rolling
openSUSE-Tumbleweed             openSUSE Tumbleweed
openSUSE-Leap-15.6              openSUSE Leap 15.6
Ubuntu-18.04                    Ubuntu 18.04 LTS
Ubuntu-20.04                    Ubuntu 20.04 LTS
Ubuntu-22.04                    Ubuntu 22.04 LTS
OracleLinux_7_9                 Oracle Linux 7.9
OracleLinux_8_7                 Oracle Linux 8.7
OracleLinux_9_1                 Oracle Linux 9.1

 

安裝 Ubuntu 24.04.1 LTS

wsl --install -d Ubuntu-24.04

 

配置 Ubuntu

 


安裝 Docker

 升級套件

  • 開啟 Windows Terminal
  • 選擇 Ubuntu 24.04.1 LTS
  • 執行以下命令
sudo apt update && sudo apt upgrade -y
sudo apt install -y --no-install-recommends apt-transport-https ca-certificates curl gnupg

 

安裝中,如下圖:


 安裝 Docker

. /etc/os-release
curl -fsSL https://download.docker.com/linux/${ID}/gpg | sudo tee /etc/apt/trusted.gpg.d/docker.asc
echo "deb [arch=amd64] https://download.docker.com/linux/${ID} ${VERSION_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io

 

安裝過程如下圖:

 

安裝完之後就可以使用 docker versio,查看目前 docker 的版本,但是出現授權的問題,如下圖:


配置 Docker 授權

將當前使用者加入 Docker 群組

sudo usermod -aG docker $USER

 

更新 Docker 群組設定

sudo sed -i -e 's/^\(docker:x\):[^:]\+/\1:36257/' /etc/group


重新初始化 WSL,離開當前頁簽,Ctrl+D,在 Powershell 輸入

wsl --shutdown

Note:WSL 沒有重啟的命令,只要 shutdown 之後,再進入 wsl 就會啟動了


檢測 Docker

這次再查看 docker version 時,就沒有出現問題了,如下圖:

 

用 docker 運行 ubuntu 試試看

docker run -it ubuntu bash

 

如下圖:

 

在 Windows 連接 WSL2 的 Docker Engine

參考保哥這篇:如何移除 Docker Desktop 並在 Windows 與 WSL 2 改安裝 Docker Engine | The Will Will Web

在 WSL 執行

# 透過 WSL 2 的 systemd 服務啟動 Docker Engine
if grep -q "\-WSL2" /proc/version > /dev/null 2>&1; then
   if service docker status 2>&1 | grep -q "is not running"; then
       wsl.exe --distribution "${WSL_DISTRO_NAME}" --user root \
           --exec /usr/sbin/service docker start > /dev/null 2>&1
   fi
fi

# 讓 dockerd 同時聽 Unix 與 TCP
sudo tee /etc/docker/daemon.json <<'EOF'
{
 "hosts": [
   "unix:///var/run/docker.sock",
   "tcp://127.0.0.1:2375"
 ]
}
EOF
# systemd 背景服務設定 (docker.service)
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/override.conf <<'EOF'
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock
EOF
# 套用變更
sudo systemctl daemon-reload
sudo systemctl restart docker
# 驗證
ss -lntp | grep 2375

 

設定環境變數

在 Windows 執行

設定 DOCKER_HOST 環境變數

  • PowerShell,僅在當前 session 有效

    $env:DOCKER_HOST='localhost:2375'
  • Command Prompt,僅在當前 session 有效

    set DOCKER_HOST=localhost:2375


用 Powershell 設定個人系統變數,也可以到控制台設定,永久有效

[System.Environment]::SetEnvironmentVariable('DOCKER_HOST', 'localhost:2375', [System.EnvironmentVariableTarget]::User)

 

安裝 docker cli

scoop install docker
scoop install docker-compose

 

測試是否連接到 WSL 的 docker engine

docker version

 

若出現以下錯誤,可能是 WSL 還沒有啟動,給他一點時間

error during connect: Get "http://localhost:2371/v1.51/version": dial tcp [::1]:235: connectex: No connection could be made because the target machine actively refused it.

 

啟動容器

docker run --rm -it hello-world

這樣就成功了


心得

這個方法就可以不需要在 Windows 上安裝 Docker Desktop,感覺更輕量些了,吧?

實作的過程如果要重來一遍,先取消註冊

wsl --unregister Ubuntu-24.04

安裝

wsl --install -d Ubuntu-24.04

在 Windows Terminal 再進入 Ubuntu-24.04,就可以拿到一個新的環境。

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo