本文為 Docker 進階介紹 系列文,第 1 篇:
- 初學者指南:深入了解 WSL 2(Windows Subsystem for Linux 2) 👈進度
- 虛擬機器(VM)是什麼?完整入門指南
- 什麼是核心(Kernel)?初學者完整指南
- Docker vs. 虛擬機器(VM):初學者完整比較指南
- 如何在 WSL 2 + Docker 環境中開發 Django:安裝順序與最佳實踐
- 初學者指南:什麼是 Dockerfile?—— 以實際範例解析
- Docker Compose 初學者指南:使用範例解析
- Docker Compose:up vs up -d 的差異與應用
- Linux 常見指令入門:從 sudo 到日常操作
- Linux 解決方案:VSCode 無法儲存檔案權限問題
閱讀本文前,建議先理解 Docker 基本介紹系列文 相關概念。
對於開發者來說,Linux 環境提供了強大的工具和靈活性,而 Windows 系統則擁有廣泛的應用程式支援和使用者友善的界面。
許多開發人員希望能夠在 Windows 系統中無縫地使用 Linux 命令和工具,而 Windows Subsystem for Linux (WSL) 正是微軟針對這一需求推出的解決方案。
WSL 2(Windows Subsystem for Linux 2)是 WSL 的改進版本,帶來了更高效能的文件系統、完整的 Linux 核心支援,以及更好的與 Windows 系統的整合。
在本篇文章中,我們將詳細介紹 WSL 2 的特性、安裝步驟、常見應用場景及其與 WSL 1 的比較,讓初學者能夠快速上手,充分發揮其強大功能。
什麼是 WSL 2?
WSL 2 是微軟於 Windows 10(2004 版本及以上)和 Windows 11 中提供的 Linux 相容層,允許用戶在 Windows 環境中運行 Linux 應用程式,而無需安裝虛擬機或雙系統。與 WSL 1 相比,WSL 2 採用了 真正的 Linux 核心,並使用虛擬機技術來提升性能,使其更接近於原生 Linux 環境。
WSL 2 的核心特性
- 完整的 Linux 核心支援:WSL 2 使用微軟自訂的 Linux Kernel,與 Windows 更新同步,確保最佳效能與相容性。
- 更快的檔案存取速度:相較於 WSL 1,WSL 2 提供更高效的檔案系統存取速度,特別是在處理大型專案時效果顯著。
- 支援 Docker 和容器技術:WSL 2 可以直接運行 Docker,使開發人員能夠更方便地使用容器技術,而無需額外的虛擬機環境。
- 完整的 Linux 應用程式支援:可以在 WSL 2 上運行大多數 Linux 軟體,包括開發工具、伺服器、命令列工具等。
graph TD;
A[Windows 主機] -->|Hyper-V 虛擬機| B[WSL 2 核心]
B -->|完整的 Linux Kernel| C[Linux 應用程式]
B -->|與 Windows 互動| D[Windows 檔案系統]
C -->|可運行 Docker| E[Docker 容器]
C -->|使用開發工具| F[Linux CLI & 軟體]
D -->|存取 Windows 檔案| G[NTFS/FAT 檔案系統]
WSL 1 vs. WSL 2:核心特性與差異分析
WSL(Windows Subsystem for Linux)最早於 2016 年推出,當時的版本被稱為 WSL 1,其主要功能是讓開發者可以在 Windows 環境中執行 Linux 命令列工具,而不需要真正安裝 Linux。
然而,WSL 1 並不具備完整的 Linux 核心(Kernel),而是透過 系統轉譯(System Call Translation) 的方式來模擬 Linux 行為。
這意味著當 Linux 應用程式執行系統呼叫時,WSL 1 會將其轉換為 Windows API,然後由 Windows 來執行相對應的功能。
這種方法雖然讓 Linux 應用能夠在 Windows 上運行,但由於轉譯過程的效能損耗,某些應用程式(特別是 Docker 和低階系統工具)無法正常運作。
WSL 2 則在 2019 年發布,作為 WSL 1 的重大升級,最重要的變化是它使用了 完整的 Linux 核心,並運行在 輕量級虛擬機(Virtual Machine, VM) 上。
這不僅提升了效能,也大幅改善了與 Linux 應用程式的相容性。
WSL 2 的核心不再依賴「系統轉譯」,而是直接透過虛擬機執行 Linux 核心,讓應用程式可以像在原生 Linux 環境下一樣運行,並且支援 Docker 等需要低階核心功能的應用。
補充:「核心」(Kernel) 的意思
在電腦科學中,核心(Kernel) 是作業系統(Operating System, OS)的 最核心部分,負責管理硬體資源(如 CPU、記憶體、磁碟、網路)並與應用程式進行交互。
它是作業系統的「大腦」,負責:
- 處理程序管理:決定哪些程式可以運行,以及如何分配 CPU 時間。
- 記憶體管理:分配和釋放記憶體,確保不同應用程式不會影響彼此。
- 檔案系統管理:控制如何讀寫硬碟上的資料。
- 裝置驅動管理:與硬體設備(鍵盤、滑鼠、顯示器、網路卡等)溝通。
在 WSL 1 中,Windows 沒有真正執行 Linux 核心,而是透過系統轉譯的方式來模擬 Linux 的行為。
但在 WSL 2,微軟直接內建了一個真正的 Linux 核心,使其具備完整的 Linux 相容性。
補充:「虛擬機」(Virtual Machine, VM) 是什麼意思?
虛擬機(Virtual Machine, VM) 是一種技術,允許在一台電腦上模擬另一台電腦的運行環境。它的作用類似於「在一個系統內部創建另一個獨立的系統」,使得不同的作業系統可以共存於同一台電腦上。
虛擬機的工作原理:
- 在主機作業系統(如 Windows)內部執行一個模擬的環境,這個環境就像是一台獨立的電腦。
- 虛擬機內可以安裝另一個作業系統(如 Linux 或 macOS),並在其中執行應用程式。
- 透過虛擬機技術(如 Hyper-V、VMware、VirtualBox) 來管理 CPU、記憶體、磁碟等資源,使其獨立於主機系統運作。
在 WSL 2 中,微軟使用了一種輕量級虛擬機(Lightweight VM),這種虛擬機比傳統的 VM(如 VMware 或 VirtualBox)更加高效,啟動速度快,佔用資源少,因此 WSL 2 在執行 Linux 核心時,幾乎不會影響 Windows 的性能。
WSL 1 vs. WSL 2 差異比較表
| 特性 | WSL 1 | WSL 2 |
|---|---|---|
| 核心架構 | 透過 Windows 兼容層 轉譯 Linux 系統呼叫 | 使用 完整的 Linux 核心,透過 輕量級虛擬機(VM) 運行 |
| 檔案系統性能 | 直接存取 Windows NTFS 檔案系統,讀寫速度較慢 | 提供更快的 Linux 檔案存取,適合大規模開發專案 |
| 網路支援 | Windows 和 Linux 共用同一個 IP | Linux 環境運行於虛擬機內,與 Windows 使用不同的 IP |
| Docker 支援 | 不完全支援,需額外設定才能運行 | 原生支援 Docker,可直接運行 Linux 容器 |
| 啟動速度 | 啟動速度快,幾乎與原生應用相同 | 啟動稍微較慢,但相較於傳統 VM 仍然更快 |
| 記憶體管理 | 共享 Windows 記憶體,使用較少資源 | 會依據需求動態分配記憶體,但長時間運行可能會占用較多資源 |
| 相容性 | 可運行大部分 Linux CLI 工具,但不支援某些低階系統功能 | 幾乎可運行所有 Linux 應用,包括 Systemd 和 iptables |
| 適用場景 | 適合執行基本的 Linux 命令、輕量級應用 | 適合需要完整 Linux 環境的開發者,如 Docker、機器學習、伺服器開發 |
WSL 1 的系統轉譯與適用場景
WSL 1 的運作方式 不使用真正的 Linux 核心,而是透過 系統轉譯,將 Linux 應用程式的 系統呼叫(Syscalls) 轉換成 Windows API,再由 Windows 來執行。
這種方法的優勢是:
- 啟動速度快,不需要額外的虛擬機技術。
- 佔用資源較少,因為所有應用程式都直接與 Windows 互動,不需要額外的虛擬層。
適合的使用場景:
- 需要快速存取 Windows 檔案系統的開發者(如
.NET開發者)。 - 只需要執行基本 Linux 命令列工具,如
grep、awk、sed。 - 主要使用 Windows 環境,但偶爾需要使用 Linux 工具的開發人員。
然而,由於 系統轉譯的限制,WSL 1 存在:
- 檔案存取速度慢,特別是在操作大量小檔案時。
- 不支援 Docker 和某些 Linux 內建工具,因為它缺少真正的 Linux 核心。
WSL 2 的虛擬機與適用場景
WSL 2 拋棄了系統轉譯的做法,改為使用 真正的 Linux 核心,並透過 輕量級虛擬機(VM) 來運行。
這種虛擬機與傳統的 VM(如 VMware、VirtualBox)不同:
- 更輕量,不需要手動開啟虛擬機,也不需要分配固定的 CPU 和記憶體。
- 更快,在 Linux 檔案系統存取方面比 WSL 1 快 5 倍以上。
- 更相容,可以運行所有 Linux 應用程式,包括 Docker 和 Kubernetes。
適合的使用場景:
- 需要完整的 Linux 環境,例如 Web 開發、後端開發、機器學習。
- 需要使用 Docker 容器技術,因為 WSL 2 原生支援 Docker。
- 需要 更快的 Linux 檔案系統存取(如 Node.js、Python、Go 開發者)。
如何安裝與設定 WSL 2?
安裝 WSL 2
微軟已簡化了 WSL 2 的安裝過程,現在用戶可以透過以下步驟快速安裝:
步驟 1:開啟 WSL 功能
開啟 命令提示字元 (cmd) 或 PowerShell,並執行以下命令:
wsl --install這將會安裝最新版本的 WSL 並設定 WSL 2 作為預設版本。
安裝完成後,系統將提示你重新啟動電腦。
步驟 2:選擇 Linux 發行版
安裝完成後,你可以選擇適合自己的 Linux 發行版。例如,要安裝 Ubuntu,可以執行:
wsl --install -d Ubuntu你可以使用 wsl --list --online 來查看可用的 Linux 發行版。
確認並切換至 WSL 2
如果你已經安裝了 WSL 1,並希望升級到 WSL 2,可以使用以下命令:
wsl --set-version Ubuntu 2你也可以將 WSL 2 設定為預設版本,這樣未來安裝的新發行版都會自動使用 WSL 2:
wsl --set-default-version 2WSL 2 的實際應用場景
WSL 2 為開發人員提供了許多便利,以下是一些常見的應用場景:
開發與測試 Linux 應用
WSL 2 提供完整的 Linux 環境,使開發人員能夠在 Windows 上開發、測試和運行 Linux 應用程式,而無需使用虛擬機或雙系統。
使用 Docker 容器
許多開發人員使用 Docker 來管理開發環境,而 WSL 2 提供了對 Docker 的完整支援,使 Windows 用戶能夠輕鬆使用容器技術。
運行 Linux 命令與工具
你可以直接在 Windows 上運行 Linux 命令,如 grep、sed、awk、curl 等,並與 Windows 應用程式無縫整合。
開發 Web 伺服器
許多 Web 開發框架,如 Node.js、Django、Ruby on Rails,都依賴 Linux 環境。WSL 2 讓 Windows 開發者可以無縫開發、測試和部署 Web 伺服器。
WSL 2 進階設定與最佳化
共享 Windows 檔案
你可以在 WSL 2 中訪問 Windows 檔案系統:
cd /mnt/c這樣,你可以直接在 Linux 環境中存取 Windows 的檔案。
設定預設發行版
如果你安裝了多個 Linux 發行版,可以使用以下命令來設定預設版本:
wsl --set-default Ubuntu調整 WSL 2 記憶體與 CPU 使用
如果你希望手動設定 WSL 2 的資源使用,可以建立 .wslconfig 檔案(位於 C:\Users\你的用戶名\.wslconfig)並加入以下內容:
[wsl2]
memory=4GB
processors=2
結語
WSL 2 是一個強大且靈活的工具,能夠讓 Windows 用戶輕鬆使用 Linux 環境。
無論是開發、測試、運行 Docker,還是使用 Linux 命令行工具,WSL 2 都能提供近乎原生的 Linux 體驗。
如果你是開發者或對 Linux 感興趣,WSL 2 絕對值得你深入學習與應用。
希望這篇指南能夠幫助你順利上手 WSL 2,開啟更高效的開發之旅! 🚀