win10 docker+WSL2 + LxRunOffline


參考M$官網文檔和

https://www.cnblogs.com/adameta/p/12179922.html

為什么要在win下用docker

1 某些不可描述的甲方指定要用windows客戶端和服務器。所以得開發偽windows專屬的桌面應用。

把各種后端 數據庫,web service都封裝成服務,不論部署在本地,還是內網的服務器,用linux開發這些后端服務特別方便。

 

2 便於部署。避免各種復雜依賴,端口等等等。

 

3 用docker開機自動運行,來代替多進程啟動,避免彈出一堆控制台"黑窗口"。

也便於開發調試。

 

為什么 要安裝 WSL2

因為windows下docker  區分為windows container(運行基於windows系統的docker image) 和 linux container(基於linux的鏡像),

我們用docker主要就是后端服務,誰沒事用win server啊? 所以大多需要 linux container。

而win下的docker運行 linux  container依賴的“backend”分2種:

wsl1 ( win10 封裝的一套類linux api ,背后還是轉義成win api 到windows kernel, 所以支持的linux命令並不完全)

VM (通過虛擬機運行linux。  基於hyper-V   WSL2 也屬於VM )

參考  Windows下想使用Linux環境,WSL、Docker、VM應該怎么選擇? - 木頭龍的回答 - 知乎 https://www.zhihu.com/question/339939686/answer/920731591

 

據說基於WSL2的比hyper-V的要快,本着節約生命的目的,當然要用。

 

WSL2模式下 docker是1個service, 而 WSL2的linux發行版 就是 docker的 backend。 管理了一切docker 的volume, images, container 

 

為什么要用 LxRunOffline 管理 WSL2

因為默認安裝的WSL2 以及后面全部的docker數據就都在C盤了(路徑是   %LOCALAPPDATA%/Docker/wsl)。無法修改

而基於WSL2的docker desktop, 也就無法管理image container的位置了。 稍微在linux下用過一點docker就知道, 鏡像和容器的存儲目錄肯定不能放/ 下 (默認分區很小 10G 20 G), 得改到/home之類的分區去。

需要用LxRunOffline 對 WSL進行遷移,備份,等等管理

 遷移了WSL,也就遷移了docker的那些Volume container images等等等。

 

下面是具體步驟:

 

1 操作系統升級到2004

2 啟用2個feature

powershell 管理員權限

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

 

3下載安裝補丁

the latest WSL2 Linux kernel update package for x64 machines:

 

 https://docs.microsoft.com/zh-cn/windows/wsl/install-win10#step-4---download-the-linux-kernel-update-package

 

4 重啟電腦

wsl --set-default-version 2

 

正常應該顯示

PS C:\Windows\System32> wsl --set-default-version 2
有關與 WSL 2 的主要區別的信息,請訪問 https://aka.ms/wsl2

如果報錯,返回第三步

 

 

 

5 在windows商店 搜索安裝一個linux發行版

比如 Ubuntu20.04

https://www.microsoft.com/zh-cn/p/ubuntu-2004-lts/9n6svws3rx71?rtc=1#activetab=pivot:overviewtab

 正常的安裝,應該看到彈出控制台,顯示:

Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: 

 

如果此時報錯:

Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x800701bc
Error: 0x800701bc WSL 2 ?????????????????? https://aka.ms/wsl2kernel

Press any key to continue...

 參考 https://github.com/microsoft/WSL/issues/5393

還是返回第3步

 

6 安裝docker desktop

去docker官網下載。

https://www.docker.com/get-started

安裝時選擇WSL2模式

 

 

 7 用LxRunOffline遷移 WSL

 

參考

https://blog.bccn.net/%E9%9D%99%E5%A4%9C%E6%80%9D/67307

 

下載LxRunOffline,  目前202009  是 3.5版

https://github.com/DDoSolitary/LxRunOffline/releases 

解壓后就是exe文件,

在這個路徑下:

./LxRunOffline list

PS D:\soft\dev\docker\LxRunOffline-v3.5.0-msvc> ./LxRunOffline list
docker-desktop
Ubuntu-20.04
docker-desktop-data

其中Ubuntu-20.04 是我從Mircosoft Store里安裝的WSL。然后docker-desktop 和 docker-desktop-data 是安裝了docker for windows  ,用WSL2模式安裝,產生的2個鏡像。

可以認為docker的2個系統依賴 Ubuntu-20.04

 

新建文件夾作為移動目標,如

D:\vm\wsl

 

 

 

下面是操作方法:

 

 

1 首先關閉docker

2 關閉所有發行版:

wsl --shutdown

 

 

3 開始修改WSL安裝路徑

./LxRunOffline move -n Ubuntu-20.04 -d D:\vm\wsl

 

查看

./LxRunOffline get-dir -n Ubuntu-20.04

 

顯示

D:\vm\wsl

移動完成可以看見移動出來的文件 ext4.vhdx

 

 

但docker的2個還是移動不了。

./LxRunOffline get-dir -n docker-desktop

顯示

\\?\C:\Users\XXX\AppData\Local\Docker\wsl\distro

參考

https://www.cnblogs.com/xhznl/p/13184398.html

4 將docker-desktop-data導出到D:\SoftwareData\wsl\docker-desktop-data\docker-desktop-data.tar(注意,原有的docker images不會一起導出)

wsl --export docker-desktop-data D:\vm\wsl\docker-desktop-data\docker-desktop-data.tar

 

注銷docker-desktop-data:

wsl --unregister docker-desktop-data

 

重新導入docker-desktop-data到要存放的文件夾 D:\vm\wsl\docker-desktop-data\

wsl --import docker-desktop-data D:\vm\wsl\docker-desktop-data\ D:\vm\wsl\docker-desktop-data\docker-desktop-data.tar --version 2

看到同樣 出現vhdx 虛擬機鏡像文件,OK

 

那么在資源管理器 去 目錄:

%LOCALAPPDATA%/Docker/wsl

下面是2個文件夾,data 和distro

現在data空了, distro下只有1個100M的 就是docker-desktop 這個就不用移動了

 

 

8 重啟docker


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM