win10利用WSL2安裝docker的2種方式


前言

windows10目前推出了WSL2,相對於WSL采用API轉換的方式, WSL2 則完全不同,win10 開始內置了一個輕量級虛擬機,經過不斷的優化,這個虛擬機實現了與 windows 的高度集成,實現了虛擬機的高性能運行,WSL2 便是運行在虛擬機上的一個完整的 linux 內核。因此WSL2給了在windows更接近原生linux的體驗,同時wsl2 的開啟速度有了非常明顯的提升,幾乎不需要再等待。本文探討在win10專業版上利用WSL2安裝docker的2種方式。

操作實踐

1.開啟安裝windows10的WSL2功能

  • 更新windows10系統

要升級 windows 系統到 win10 v2004 的內部版本 19041 或更高版本

升級 Windows 可以使用官方的更新助手,非常方便,地址:https://www.microsoft.com/zh-cn/software-download/windows10,在更新過程中,系統可能或多次重啟。

image-20200614181600789

  • 打開系統虛擬機平台

系統更新並重啟后,我們就可以開始 wsl 的升級了

首先,需要打開“系統虛擬機平台”功能,在“控制面板\所有控制面板項\程序和功能”中選擇“啟用或者關閉Windows功能”,勾選對應選項即可:

img

也可以通過在管理員權限下的 cmd 或 PowerShell 中執行:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  • 下載 wsl2 需要使用的 linux 內核

https://docs.microsoft.com/zh-cn/windows/wsl/wsl2-kernel 頁面點擊下載 linux 內核更新包,下載完點擊安裝

  • 啟用"適用於 Linux 的 Windows 子系統"這個功能

啟用"適用於 Linux 的 Windows 子系統"這個功能,然后才能在 Windows 上安裝 Linux 發行版,如果之前使用過舊的wsl,此功能應該開啟過。以管理員身份打開 PowerShell 運行如下所示的命令:

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

也可以在“控制面板\所有控制面板項\程序和功能”中選擇“啟用或者關閉Windows功能”,勾選對應選項即可。

  • 重啟系統並設置WSL 2 設置為默認版本
# wsl命令可以設置單獨某個具體wsl的linux版本為1版本但是2版本,wsl2速度較於舊版wsl快了很多,有了高鐵還蹬啥自行車。
wsl --set-default-version 2

查看是不是WSL2,

wsl -l -v

2.安裝配置 Linux 發行版

選擇實用比較多的ubuntu版本,其他版本未測試能否安裝成功docker。

  • 打開 Microsoft Store,搜索 Terminal,安裝 Windows Terminal,用於后面和 WSL 子系統交互。

  • 搜索 Ubuntu,選擇安裝。

image-20200614184849150

安裝完成后,第一次打開 Ubuntu 的時候,將打開一個控制台窗口,會等待幾分鍾來進行配置,啟動完成后為 Ubuntu 創建一個用戶和密碼(如果第一次啟動ubuntu失敗,可以重啟windows10系統再次試下)。

使用 Windows Terminal 來操作 Ubuntu 系統了,在 Windows Terminal 中選擇 Ubuntu 發行版就可以跳轉到 Ubuntu 終端中,使用上面我們配置的用戶名和密碼登錄即可:

image-20200614185133006

由於默認情況下我們不知道 root 用戶的密碼,所以如果我們想要使用 root 用戶的話可以使用 passwd 命令為 root 用戶設置一個新的密碼,同時為了避免sudo切換root是需要輸入密碼,把自己配置的用戶名加到sudo免密中,命令如下:

 # 替換leap為自己單獨配置的用戶名
 sudo echo "leap ALL=(ALL:ALL) NOPASSWD: ALL" >>/etc/sudoers 
  • 更換ubuntu的apt安裝源

默認的安裝源相對國內很慢,我們更換源到阿里雲,登錄到ubuntu到操作如下:

cp /etc/apt/sources.list /etc/apt/sources.list.bak

echo "deb http://mirrors.aliyun.com/ubuntu/ focal main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal universe
deb http://mirrors.aliyun.com/ubuntu/ focal-updates universe
deb http://mirrors.aliyun.com/ubuntu/ focal multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal-security universe
deb http://mirrors.aliyun.com/ubuntu/ focal-security multiverse">/etc/apt/sources.list

執行更新:

apt update && apt upgrade -y

3.安裝docker,以下方式二選一

3.1 原生linux安裝docker方式

因為wsl2已經完整使用了linux內核了,此種方式和先前在linux虛擬機安裝docker類似,步驟如下:

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
$ sudo service docker start

執行腳本安裝過程中,腳本提示“建議使用Docker Desktop for windows”,20s內按Ctrl+C會退出安裝,所以需要等待20s,另外此種方式需要訪問外網。

image-20200612155111771

檢查docker安裝正常

# 檢查dockerd進程啟動
service docker status
ps aux|grep docker
# 檢查拉取鏡像等正常
docker pull busybox
docker images

注意:不同於完全linux虛擬機方式,WLS2下通過apt install docker-ce命令安裝的docker無法啟動,因為WSL2方式的ubuntu里面沒有systemd。上述官方get-docker.sh安裝的docker,dockerd進程是用ubuntu傳統的init方式而非systemd啟動的。

3.2 Docker Desktop for windows方式

  • Docker 也專門開發了可以使用 WSL2 中的 Docker 守護進程的桌面管理程序, 打開 Docker Desktop WSL2 backend 頁面,下載最新的 Docker Desktop for Windows 程序 ,建議下載stable版本。下載地址:https://www.docker.com/products/docker-desktop

  • 啟動Docker Desktop for Windows,點擊“設置”按鈕,啟用基於WSL2的引擎復選框(Use the WSL 2 based engine)

image-20200614203649571

這個時候在 WSL 里面執行 docker 命令還是找不到的

image-20200614203731579

  • 在 Resources 的WSL Integration中設置要從哪個 WSL2 發行版中訪問 Docker,如下圖使用的是 Ubuntu。

image-20200614204151314

  • 重啟 Docker desktop for Windows,重啟完成后我們就可以在 WSL2里面使用 docker 命令了

image-20200614204437219

  • 在WSL2里面執行df -Th,會發現增加了一些新的與docker有關的掛載點。

image-20200614204751691

總結

  1. WSL2下原生linux安裝docker方式和完全linux虛擬機安裝docker類似,區別在於WSL2下的linux不支持systemd。
  2. Docker Desktop for windows方式,其實質是利用docker的C/S架構,將windows模式下的docker對應docker.sock,docker客戶端二進制和docker的數據目錄掛載到WSL2里面的linux機器,在此linux機器下執行docker命令(docker命令為docker客戶端),實質為客戶端通過 掛載的/var/run/docker.sock文件與windows里面的dockerd服務端進程通信。如下圖,我們在linux下重新啟動linux下dockerd進程,linux模式下下載的busybox鏡像又可以看到了,/var/run/docker.sock的時間戳也被更新了,此時客戶端通過/var/run/docker.sock文件與linux下的dockerd服務端通信。

image-20200614213308680

image-20200614214244390

  1. 要使用哪個模式下的docker,重啟下該模式下的docker服務端即可,本質都是修改/var/run/docker.sock文件。理論可以同時使用,但是需要修改docker配置,通過-H參數增加dockerd的tcp監聽,執行具體docker命令時指定dockerd監聽的對應IP和端口即可。

如果覺得有幫助,請關注一波 _,后續更新win10下安裝kubernetes教程

歡迎關注微信公眾號—【Linux運維堂】,堅持linux運維精華分享,堅持干貨(talk is cheap,show your code)。

wx_search2

qrcode_for_gh_b8481bf38cdc_344


免責聲明!

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



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