1. 程式人生 > 其它 >手繪流程圖,教你WSL2與Docker容器無縫互相遷移

手繪流程圖,教你WSL2與Docker容器無縫互相遷移

摘要:本文主要介紹WSL2與Docker容器無縫遷移映象。

本文分享自華為雲社群《WSL2與Docker容器,無縫互相遷移》,作者: tsjsdbd 。

注:本文提到的WSL都是指WSL2

WSL與Docker

WSL非常像windows版的Docker,可以直接啟動“容器”(故意加引號,下面有解釋),並且在容器世界裡面,可以執行各種Linux操作。像下面這樣,是不是和Docker很像?

ps:上面提到的“容器”,實際是安全容器(即:虛機),WSL2內部架構如下:

雖WSL和Docker很像,但是它對WSL映象有要求,就是得從 MS的應用商店下載:

這個就稍顯不那麼方便,畢竟你可能已經有很多現成的Docker容器了,這裡又得重新安裝一遍。

我是Windows上有WSL,我的Linux開發機上有Docker,那我怎麼在WSL裡面跑Docker呢?

WSL執行Docker容器

常見的WSL裡面執行Docker,是這樣子的:

就是把WSL當做一臺新的開發機,然後在WSL裡面,安裝Docker軟體。

這樣子,也能解決問題。就是稍微麻煩了一點點。那能不能WSL直接執行Docker映象呢?

答案是可以的:

參考:https://docs.microsoft.com/en-us/windows/wsl/use-custom-distro

這種方法下,是類似這個樣子的:

具體操作如下:

  • 在Docker裡面,將容器匯出來
//檢視正在執行的容器
docker ps
//根據容器ID,匯出映象包 docker export $ContainerID > ./tsjsdbd.tar
  • 然後再WSL裡面,將Docker映象匯入:
wsl --import <DistributionName> <InstallLocation> <FileName>

示例

比如,我這裡用Docker運行了一個busybox容器:

docker run -it busybox /bin/sh

然後查詢容器ID:

docker ps
CONTAINER ID   IMAGE
c1e9e8f77336   busybox

匯出:

docker export c1e9e8f77336 > tsjsdbd_busybox.tar

然後我把這個 映象檔案,拷貝到我的windows電腦上。

並在wsl裡面匯入:

wsl --import tsjsdbd_busybox ./busybox ./tsjsdbd_busybox.tar

匯入後檢視:

wsl -l

這時,我啟動這個 busybox 映象。

wsl -d tsjsdbd_busybox

OK,這時我已經在WSL容器裡面了,這是一個busybox的Docker容器映象。

Docker執行WSL映象

從上面的操作可以看出來,WSL和Docker的映象是相通的。所以WSL系統,也可以匯出給Docker直接執行。類似這個樣子:

具體操作如下:

先檢視下當前跑了哪些wsl容器:

wsl -l -v
  NAME               STATE           VERSION
* Ubuntu-18.04       Stopped         2
   tsjsdbd_busybox    Running         2

匯出指定的wsl映象

wsl --export tsjsdbd_busybox ./mybox.tar

其中 “tsjsdbd_busybox” 就是你希望導給Docker執行的WSL容器(裡面可能安裝了一些你需要的軟體)。匯出的tar包,就可以看做是WSL映象了(可以直接匯入給Docker)

最後,在Docker裡面,匯入這個映象:

docker import - mybox < mybox.tar

可以查詢此映象

docker images |grep mybox

並啟動

docker run -it mybox /bin/sh

WSL映象與Docker映象

大體上,我給個示意:

所以WSL確實挺香的。

WSL啟動GUI介面

整體方案是利用 X11 Server,原理參考:

《Docker執行帶UI介面的應用,並將它的介面投射到你的Windows電腦》

https://bbs.huaweicloud.com/blogs/281862

X11 Server,一般網上推薦 VcXsrv,我自己用下來,感覺 MobaXterm 更傻瓜一些。所以我都用 MobaXterm 的。

附:安裝WSL

1. 系統要求

Windows 10,版本 2004 以上。

比如我的是 20H2,是OK的。

點選:開始-設定-關於,查詢自己的版本

2. 判斷wsl2是否已有

開啟 power shell,輸入

wsl -l -o

如OK,則不用後續步驟了(說明你的windows版本已經比較高)。

不行,則手動執行後續步驟

3. 允許開發者模式

4. 啟動WSL2功能

啟用WSL2

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

啟用虛擬機器平臺

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

啟用Hyper-V

dism.exe /online /enable-feature /featurename:Microsoft-Hyper-V /all /norestart

設定WSL2為預設

wsl --set-default-version 2

5. 重啟,安裝wsl補丁

wsl_update_x64.msi

執行以上補丁包。

補丁包下載地址:

https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

附:高階版 GPU,GUI介面

Windows版本高的(win10 21H2),可以在WSL2裡面跑CUDA

https://docs.microsoft.com/en-us/windows/ai/directml/gpu-cuda-in-wsl

再高一點(win11),可以原生支援帶GUI介面的Linux程式。

https://docs.microsoft.com/en-us/windows/wsl/tutorials/gui-apps

 

點選關注,第一時間瞭解華為雲新鮮技術~