參考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:
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/wsl2kernelPress 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 這個就不用移動了