在 WSL 2 上開始使用 Docker 遠端容器

本逐步指南將協助您藉由 設定適用于 Windows 的 Docker Desktop (具有 WSL 2 (Windows 子系統 Linux 版第2版) )來開始開發遠端容器。

適用于 Windows 的 Docker Desktop 免費提供,並提供建立、交付和執行 docker 化應用程式的開發環境。 藉由啟用以 WSL 2 為基礎的引擎,您可以在相同電腦上的 Docker Desktop 中執行 Linux 和 Windows 容器。

Docker 容器概觀

Docker 是一種工具,可用來建立、部署及執行使用容器的應用程式。 容器可讓開發人員封裝含有其所需全部元件 (程式庫、架構、相依性等) 的應用程式,且全部以一個套件的形式出貨。 使用容器可確保應用程式會以相同的方式執行,而不管任何自訂的設定或先前在執行該應用程式的電腦 (可能與用來撰寫和測試應用程式程式碼的電腦不同) 上安裝的程式庫。 這可讓開發人員專注於撰寫程式碼,而不需擔心程式碼將在其上執行的系統。

Docker 容器類似於虛擬機器,但不會建立整個虛擬作業系統。 然而,Docker 可讓應用程式使用與系統執行所在的相同 Linux 核心。 這可讓應用程式套件只需要主機電腦上尚未存在的元件,以減少套件大小並提升效能。

使用 Docker 容器搭配 Kubernetes 之類工具的持續可用性,是容器廣受歡迎的另一個原因。 這可讓您在不同時間建立多個版本的應用程式容器。 每個容器 (及其特定微服務) 都可以隨時被取代,而不需要關閉整個系統以便進行更新或維護。 您可以準備包含所有更新的新容器、設定用於生產的容器,並在準備就緒後直接指向新容器。 您也可使用容器來封存不同版本的應用程式,並視需要使其以安全後援的形式執行。

若要深入瞭解,請參閱 Microsoft Learn 上的 Docker 容器簡介

必要條件

注意

WSL 可以在 WSL 第1版或 WSL 2 模式中執行散發。 您可以藉由開啟 PowerShell 並輸入:來檢查此項 wsl -l -v 。 輸入下列內容,確定您的散發已設定為使用 WSL 2: wsl --set-version <distro> 2<distro>以發行版本名稱取代 (例如 Ubuntu 18.04) 。

在 WSL 第1版中,由於 Windows 和 Linux 之間的基本差異,Docker 引擎無法直接在 WSL 內執行,因此 Docker 團隊會使用 Hyper-v Vm 和 LinuxKit 開發替代解決方案。 不過,因為 WSL 2 現在是在具有完整系統呼叫容量的 Linux 核心上執行,所以 Docker 可以在 WSL 2 中完整執行。 這表示 Linux 容器可以原生執行而不需要模擬,因此可讓您的 Windows 和 Linux 工具產生更佳的效能和互通性。

安裝 Docker Desktop

使用適用于 Windows 的 Docker Desktop 中支援的 WSL 2 後端,您可以在以 Linux 為基礎的開發環境中工作,並建立以 Linux 為基礎的容器,同時使用 Visual Studio Code 進行程式碼編輯和偵測,並在 Windows 上的 Microsoft Edge 瀏覽器中執行您的容器。

若要在已 安裝 WSL 2) 之後安裝 Docker (:

  1. 下載 Docker Desktop ,並遵循安裝指示。

  2. 安裝之後,請從 Windows [開始] 功能表啟動 Docker Desktop,然後從工作列的隱藏圖示功能表中選取 Docker 圖示。 以滑鼠右鍵按一下圖示以顯示 [Docker 命令] 功能表,然後選取 [設定]。 Docker 桌面儀表板圖示

  3. 確定已在 [設定 一般] 中選取 [使用以 WSL 2 為基礎的引擎] > ****。 Docker Desktop 一般設定

  4. 從您要啟用 Docker 整合的已安裝 WSL 2 散發套件中,前往:設定 > 資源 > WSL 整合 來進行選取。 Docker Desktop 資源設定

  5. 若要確認已安裝 Docker,請開啟 WSL 散發 (例如 Ubuntu) ,然後輸入下列內容來顯示版本和組建編號: docker --version

  6. 使用下列方法執行簡單的內建 Docker 映射,測試您的安裝是否正常運作: docker run hello-world

提示

以下是一些實用的 Docker 命令來瞭解:

  • 輸入以下命令可列出 Docker CLI 中可用的命令:docker
  • 使用以下命令,列出特定命令的資訊:docker <COMMAND> --help
  • 使用以下命令,列出電腦上的 Docker 映像 (此時就是 hello-world 映像):docker image ls --all
  • 列出您電腦上的容器,其中包含: docker container ls --alldocker ps -a (沒有-a show all 旗標,只會顯示執行中的容器)
  • 列出有關 Docker 安裝的全系統資訊,包括您可以在 WSL 2 內容中使用的 (CPU & 記憶體) 的統計資料和資源,以及: docker info

使用 VS Code 在遠端容器中進行開發

若要使用 Docker 搭配 WSL 2 來開始開發應用程式,我們建議使用 VS Code,以及 WSL 擴充功能和 Docker 延伸模組。

  • 安裝 VS Code 遠端 WSL 延伸模組。 此延伸模組可讓您在 VS Code 中開啟您在 WSL 上執行的 Linux 專案, (不需要擔心路徑問題、二進位相容性,或是其他) 的跨作業系統挑戰。

  • 安裝 VS code Remote-Containers 擴充功能。 此延伸模組可讓您在容器內開啟您的專案資料夾或存放庫,利用 Visual Studio Code 的完整功能集,在容器內執行您的開發工作。

  • 安裝 VS Code Docker 延伸模組。 此延伸模組新增了從 VS Code 內建立、管理及部署容器化應用程式的功能。 (您需要 Remote-Container 擴充功能,才能實際使用容器做為開發環境。 )

讓我們使用 Docker 為現有的應用程式專案建立開發容器。

  1. 在此範例中,我將使用 Hello World 教學課程中的原始程式碼,在 Python 開發環境的設定檔中 進行 Django 。如果您想要使用自己的專案原始碼,可以略過此步驟。 若要從 GitHub 下載我的 HelloWorld-Django web 應用程式,請 (Ubuntu 開啟 WSL 終端機,例如) ,然後輸入: git clone https://github.com/mattwojo/helloworld-django.git

    注意

    一律將您的程式碼儲存在您要使用工具的相同檔案系統中。 這會導致檔案存取效能更快。 在此範例中,我們使用 Linux 發行版本 (Ubuntu) ,而且想要將專案檔案儲存在 WSL 檔案系統上 \\wsl\ 。 在 Windows 檔案系統上儲存專案檔,會在使用 WSL 中的 Linux 工具來存取這些檔案時,大幅降低效能。

  2. 從您的 WSL 終端機,將目錄變更為此專案的原始程式碼資料夾:

    cd helloworld-django
    
  3. 輸入下列內容,在本機遠端 WSL 延伸伺服器上執行的 VS Code 中開啟專案:

    code .
    

    檢查 VS Code 實例左下角的綠色遠端指標,確認您已連線至 WSL Linux 發行版本。

    VS Code WSL 遠端指示器

  4. 從 VS Code 命令面板 (Ctrl + Shift + P) ,輸入: 遠端容器:在容器中開啟資料夾 .。。如果您在開始輸入時未顯示此命令,請檢查以確定您已安裝上述連結的遠端容器擴充功能。

    VS Code 遠端容器命令

  5. 選取您要將的專案資料夾。 在我的案例中,這是 \\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\

    VS Code 遠端容器檔案夾

  6. 容器定義清單會隨即出現,因為專案資料夾 (存放庫) 尚未進行任何 DevContainer 設定。 出現的容器設定定義清單會根據您的專案類型進行篩選。 在我的 Django 專案中,我要選取 [Python 3]。

    VS Code 遠端容器設定定義

  7. VS Code 的新實例隨即開啟、開始建立新的映射,完成組建之後,就會啟動我們的容器。 您會看到新 .devcontainer 資料夾已在和檔案中顯示容器設定資訊 Dockerfile devcontainer.json

    VS Code. devcontainer 資料夾

  8. 若要確認您的專案仍同時連接至 WSL 和容器內,請開啟 VS Code 整合式終端機 (Ctrl + Shift + ~) 。 輸入下列內容來檢查作業系統: uname 和 Python 版本 python3 --version 。 您可以看到 uname 回傳為 "Linux",因此您仍然連線到 WSL 2 引擎,而 Python 版本號碼將會以容器設定為基礎,該設定可能與您在 WSL 發佈上安裝的 Python 版本不同。

  9. 若要使用 Visual Studio Code 在容器內執行和偵錯工具,請先開啟 [ 執行 ] 功能表 (Ctrl + Shift + D,或選取最左邊功能表列上的索引標籤) 。 然後選取 [ 執行和調試 程式],以選取 [偵錯工具],並在我的範例中選擇最適合您專案 (的設定,這會是 [Django] ) 。 這會 launch.json 在您的專案資料夾中建立檔案 .vscode ,以及如何執行應用程式的指示。

    VS Code 執行 debug configuration

  10. 從 VS Code 中,選取 [執行 > 開始調試 (],或直接按 F5 鍵) 。 這會開啟 VS Code 內的終端機,您應該會看到類似以下的結果:「在結束 http://127.0.0.1:8000/ 伺服器時,使用 C + + 啟動開發伺服器」。 按住 Ctrl 鍵並選取顯示的位址,以在預設網頁瀏覽器中開啟您的應用程式,並查看在其容器內執行的專案。

    執行 docker 容器 VS Code

您現在已成功設定遠端開發容器,並使用 WSL 2 後端所支援的 Docker Desktop,您可以使用 VS Code 來撰寫、建立、執行、部署或偵錯工具的程式碼!

疑難排解

WSL docker 內容已淘汰

如果您使用適用于 WSL 的 Docker 早期技術預覽,您可能會有一個稱為 "WSL" 的 Docker 內容,且該內容現在已淘汰且不再使用。 您可以使用下列命令來檢查: docker context ls 。 您可以移除此 "wsl" 內容,以避免命令發生錯誤: docker context rm wsl 因為您想要使用 Windows 和 WSL2 的預設內容。

您可能會在此已被取代的 wsl 內容中遇到的可能錯誤包括: docker wsl open //./pipe/docker_wsl: The system cannot find the file specified.error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_wsl/v1.40/images/json?all=1: open //./pipe/docker_wsl: The system cannot find the file specified.

如需此問題的詳細資訊,請參閱 Windows 10 上的如何在適用于 Linux 的 Windows 系統中設定 Docker (WSL2)

找不到 docker 映射儲存體資料夾的問題

Docker 會建立兩個發行版本資料夾來儲存資料:

  • \wsl $ \docker-desktop
  • \wsl $ \docker-desktop-data

您可以開啟 WSL Linux 散發套件,並輸入: explorer.exe . 在 Windows 檔案總管中查看資料夾,以找到這些資料夾。 輸入: \\wsl\<distro name>\mnt\wsl <distro name> 將取代為您的散發名稱 (ie。Ubuntu-20.04) 查看這些資料夾。

若要深入瞭解如何在 WSL 中尋找 docker 儲存位置,請參閱 WSL 存放庫中 的這個問題 或此 StackOverlow 文章

如需 WSL 中一般疑難排解問題的詳細說明,請參閱 疑難排解 檔。

其他資源