# WSL 與 Windows 的完美雙結合 — 在 WSL 中安裝 Docker

不同於大部分的應用程式,Docker 是一個系統層面的應用程式。

這代表 Docker 需要更加底層的系統存取權限。然而 WSL 只是一個建基於 Windows 的 Subroutine。過往由於 Windows 對於 Docker 的支援不夠完善,WSL 並沒有辦法很好的使用 Docker,然而隨著微軟的 Hyper-V 的出現,在 WSL 中使用 Docker 成為可能。

# 手動開啟 Hyper-V

設定 -> 應用程式與功能 -> 程式與功能 -> 開啟或關閉 Windows 功能 -> 點選 Hyper-V

# 安裝 Windows 版 Docker

請到 Docker 官網下載 Windows 版的 Docker 安裝。

# 在 WSL 上安裝 Docker

使用以下指令

sudo apt update
sudo apt install docker.io
sudo usermod -aG docker $USER

正常情況下,我們若是執行 docker run hellow-world 會報錯

$ docker run hello-world
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?. See 'docker run --help'.

主因在開頭已經說明了,WSL 本身無法支援 docker engine。所以我們若希望在 WSL 中運行 docker ,我們需要將 docker client 連接到 Windows 的 docker engine (這也是為什麼要安裝 windows docker 的原因)。

  • 首先,開啟 Windows 上的 docker setting ,並且在 General 中選擇
Expose daemon on tcp://localhost:2375 without TLS

  • 之後,將以下指令添加到 ~/.profile
export DOCKER_HOST=127.0.0.1:2375

並使其更新

  • 最後在 WSL 嘗試使用 docker run hello-world 確認是否正常執行。

使用 docker version 查看

# 如此便大功告成了。

資料參考

  • How to set up Docker and Windows Subsystem for Linux: A Love Story.
  • Installing the Docker client on Windows Subsystem for Linux (Ubuntu)
  • WSL 中安装 Docker
  • Windows 10 及 WSL 上安装 docker
  • 在 Linux 的 Windows 子系统上 (WSL) 使用 Docker(Ubuntu)

Like z20240z's work