簡體   English   中英

wsl2 上的 docker 非常慢

[英]docker on wsl2 very slow

看了wsl2上運行Docker的性能提升后,一直在等待支持wsl2的Windows 10正式發布。 我更新了 Windows 和 Docker 並打開 Docker 標志以使用 wsl2,並希望我的 Oracle 數據庫在 Docker 容器中運行時有一些性能提升,但不幸的是,這種變化顯着降低了容器和我的筆記本電腦的速度。 容器的性能大約慢了 10 倍,我的筆記本電腦在啟動容器時幾乎卡住了。 似乎 memory 消耗會完全用完我的 8GB 和大量 memory 交換開始發生。 我可以做些什么來提高 wsl2 上 Docker 的性能,或者至少更好地了解我的設置有什么問題?

我的環境:

  • 處理器 Intel(R) Core(TM) i7-2620M CPU @ 2.70GHz,2 核
  • 安裝物理 Memory (RAM) 8.00 GB
  • 微軟 Windows 10 專業版 10.0.19041 內部版本 19041
  • Docker 版本 19.03.8,構建 afacb8b

這來自“vmmem”,它消耗盡可能多的資源。 要解決問題只需 go 到您的用戶文件中

C:\用戶\用戶名

在此目錄中創建一個名為“ .wslconfig ”的文件,您將在其中配置可以消耗 WSL2 的資源數量:

[wsl2] 
memory=900MB    #Limits VM memory in WSL 2 to 900MB 
processors=1    #Makes the WSL 2 VM use one virtual processors

現在關閉您的 docker 並等待“vmmem”在任務管理器中關閉。

然后您可以重新啟動 docker 並且通常“vmmem”不會超過您設置的限制(此處為 900MB)如果不起作用,請重新啟動您的計算機。

希望對您有所幫助。

您可能將您的代碼存儲在 Windows 機器上類似於此的文件夾中......

C:\\Users\YourName\projects\blahfu

但是您在 WSL 2 上使用 Docker,這是一個不同的 (Linux) 文件系統。 因此,當您執行 Docker 構建時,所有代碼/上下文都會從 Windows 文件系統復制到 Linux 文件系統,然后從那里復制到 Docker 容器。 這是最耗時的,而且速度非常慢。

嘗試將您的項目放入這樣的文件夾中......

/home/YouName/projects/blahfu

你應該得到相當大的性能提升。

wsl 容器具有與 windows 文件系統隔離的適當文件系統。 基本思想是將源代碼從 windows 文件系統復制到 wsl 文件系統。

從 window 您可以訪問 wsl 容器並將您的項目復制到 wslcontainer:

使用資源管理器導航到\\wsl$

從這個位置重建容器,這樣就可以了!

如果實際 docker 容器的數據存儲在 windows 文件系統(即 NTFS)上,而不是存儲在本機 linux 文件系統上(不管 docker 容器內容是什么,很可能已經基於 linux),那么我認為你是將看到性能下降,因為您正在運行 WSL 並使用已安裝的 WINDOWS 文件系統(即 /c/mnt/...)中的 docker 容器。

如果您將 docker 容器復制到 WSL 上的 /usr/local 或 /home//docker 之類的位置,那么您可能會看到 10 倍的性能提升。 嘗試一下,看看它是否有效?

您需要編輯“vmmem”資源,只需在路徑中添加 file.wslconfig

C:\Users<您的用戶名>.wslconfig

使用 .wslconfig 配置全局選項

Available in Windows Build 19041 and later

您可以通過將 .wslconfig 文件放入用戶文件夾的根目錄來配置全局 WSL 選項:C:\Users<yourUserName>.wslconfig。 其中許多文件與 WSL 2 相關,請記住您可能需要運行

wsl--關機

關閉 WSL 2 VM,然后重新啟動 WSL 實例以使這些更改生效。

這是一個 sample.wslconfig 文件:

安慰

Copy
[wsl2]
kernel=C:\\temp\\myCustomKernel
memory=4GB # Limits VM memory in WSL 2 to 4 GB
processors=2 # Makes the WSL 2 VM use two virtual processors

看到這個https://learn.microsoft.com/en-us/windows/wsl/wsl-config

如果您使用的是 VS Code,則有一個名為“遠程容器:容器卷中的克隆存儲庫...”的命令可確保您擁有全速文件訪問權限。

形成文檔

存儲庫容器使用隔離的本地 Docker 卷,而不是綁定到本地文件系統。 除了不會污染您的文件樹之外,本地卷還具有提高 Windows 和 macOS 性能的額外好處。

打開您的 wsl2 發行版(例如 Ubuntu)並設置 ~/.docker/config.json 文件。
只有你需要改變:

{
  "credsStore": "docker.exe"
}

“credsStore”:“desktop.exe”:超慢(超過 2 分鍾)
“credsStore”:“wincred.exe”:快
“credsStore”:“”:快

它工作得很好。

在閱讀了有關在 wsl2 上運行 Docker 時的性能改進后,我一直在等待支持 wsl2 的 Windows 10 的正式發布。 I updated Windows and Docker and switched on the Docker flag to use wsl2 and was hoping for some performance boost for my Oracle Database running in a Docker container but unfortunately the change slowed down the container and my laptop dramatically. 容器的性能大約慢了 10 倍,我的筆記本電腦在啟動容器時幾乎卡住了。 似乎 memory 消耗將完全用完我的 8GB,並且開始進行大量的 memory 交換。 我可以做些什么來提高 wsl2 上 Docker 的性能,或者至少更好地了解我的設置有什么問題?

我的環境:

  • 處理器 Intel(R) Core(TM) i7-2620M CPU @ 2.70GHz, 2 Core(s)
  • 安裝物理 Memory (RAM) 8.00 GB
  • 微軟 Windows 10 專業版 10.0.19041 Build 19041
  • Docker 版本 19.03.8,構建 afacb8b

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM