1. 程式人生 > 其它 >配置docker看我一篇就夠了----Windows10上WSL2配置Docker+Vscode完整配置

配置docker看我一篇就夠了----Windows10上WSL2配置Docker+Vscode完整配置

2021最新Windows10上WSL2配置Docker+Vscode完整配置


前言:

由於同事們開始用這個docker去配置,雖然docker很早名聲就大噪,但人性吧就不喜歡接觸新的東西。 沒用docker前一直在用linux物理機和windows下的虛擬機器裝linux,但往往效能很大的開銷,即使你的配置很高。 裝docker過程遇到了各種報錯,這裡就不提。主要問題網上的各種部落格以及微軟的安裝的教程都不完整隻能取優借鑑。 一. 安裝前確認系統版本
-----據微軟官方和docker給出的建議是在1903 或 1909 內部版本號必須是 18362.1049+ 或 18363.1049+,也就是說次要內部版本號需要高於 .1049。 檢視系統版本
WIN+R -> 執行 -> winver

兩種方式更新系統, 第一外部如U盤介質直接更新, 第二直接下載微軟提供的更新包這個時間比較長。https://www.microsoft.com/zh-cn/software-download/windows10

第二檢查系統的配置和服務


WIN+R -> services.msc -> 找到windows update 確保它能執行 -> 全部配置完可以關閉

-----------------開啟功能服務兩種方法第一種 以管理執行powershell執行下面命令

# 這是開啟虛擬機器平臺
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
# 開啟linux windows 子系統功能 也就是 wsl
dism.exe 
/online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

-----------------圖形開啟這些功能開啟win -> 進入設定 -> 應用 -> 右上角程式和功能 -> 左邊啟用或關閉 Windows 功能

現在重啟電腦, 如果沒報錯就接下去操作。 如果報錯可能是虛擬功能BIOS裡沒開,

你就要F2或Delete進BIOS中開啟Virtual開頭的功能改成Enabled即可。 不懂百度

三、安裝linux核心與Docker與Terminal和子系統

先安裝linux核心 注意確認好自己的架構
在執行裡輸入 -> powershell或cmd -> systeminfo # 系統型別 如 x64-based PC 就是x64架構核心則選擇下面第一個

https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi # X64/x32架構核心
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_arm64.msi # Arm64架構核心
把wsl 轉成wsl2 這兩者的區別很大, 在powershell裡執行下面命令. wsl 無法相容docker很多功能和配置 所以如果要連線docker容器必須wsl2。 這裡要注意,如果你輸入wsl --set-default-version 2 彈出更多命令,則因為你係統版本太低。回頭部落格最上面升級系統
wsl --set-default-version 2  # wsl -> wsl2 
wsl -l -v # 檢視是否wsl2版本

安裝Docker -----------如果你按了前面步驟部署好了,Docker就不會報錯。

https://www.docker.com/products/docker-desktop
terminal安裝、這是方便我們做各種終端轉換用的。進入微軟商城搜尋terminal 這個工具可以安裝也可以不安裝,不是剛需。

安裝會提示你登入微軟賬號選擇跳過/不登入即可,就會自己安裝。按右鍵或win裡啟動

子系統ubuntu安裝,這裡特別注意下面,不是剛需。可以裝可以不裝、因為後面docker還要裝多一次ubuntu那是映象和容器, 跟這個外部的Ubuntu不一樣。這個工具可以安裝也可以不安裝,不是剛需。

在商城裡安裝ubuntu即可預設是20.04最新版本

這樣我們即使不進入docker容器也能使用linux核心環境,記住是核心環境和子系統預設的windows核心區別很大。 用途主要是可以不使用docker情況,在windows裡編譯linux程式和使用linux。我們可以看到c盤和其他裝置是掛載在/mnt裡。 就是我可以直接訪問別的磁碟。 簡單測試下 開啟vscode或terminal
wsl -l -v
#  NAME                   STATE           VERSION
#* docker-desktop         Running         2      
#  Ubuntu                 Running         2      
#  docker-desktop-data    Running         2      
# 這時候我們預設* 是docker-desktop。如果我們輸入wsl 就會進入docker-desktop, 但我們想進入Ubuntu呢?

# 執行分支
wsl -d Ubuntu
# 修改預設分支 
wsl  --shutdown  # 先停止所有分支的執行
wsl -s Ubuntu # 設定預設分支

wsl -l -v
#  NAME                   STATE           VERSION
# * Ubuntu                 Running         2
#  docker-desktop-data    Stopped         2
#  docker-desktop         Running         2

這時候我們依舊無法在Ubuntu裡面連線Docker -> 開啟Docker配置 -> 設定

四、轉移所有Docker儲存資料路徑



因為這個Docker和子系統Ubuntu都是預設裝在C盤 %LOCALAPPDATA%/Docker/wsl/data/ext4.vhdx等, 現在我們就要打包專案走別的磁碟這裡用F盤。 這裡可以提前建立號目錄,這樣我們就不擔心C盤會被佔容量。。。。
wsl --shutdown # 關閉所有分支
wsl --export docker-desktop-data F:\wsl\docker-desktop-data\docker-desktop-data.tar # 匯出Docker Data映象包
wsl --export Ubuntu F:\wsl\ubuntu\Ubuntu.tar # 匯出Ubuntu映象包
wsl --unregister docker-desktop-data # 登出docker映象
wsl --unregister Ubuntu # 登出Ubuntu映象
wsl --import docker-desktop-data F:\wsl\docker-desktop-data\ F:\wsl\docker-desktop-data\docker-desktop-data.tar --version 2 # 重新匯入Docker data 打包好的映象
wsl --import Ubuntu F:\wsl\ubuntu\ F:\wsl\ubuntu\Ubuntu.tar --version 2 # 重新匯入Ubuntu打包好的映象

五、 docker安裝ubuntu映象與掛起容器


這開始的後面,就是為什麼我要做這個教程的原因。網上教程都沒涉及這方面的知識,所有會浪費大部分讀者的時間。 注意如果下面操作報錯、很可能是docker沒執行。右鍵docker右下小圖示即可restart.
# 首先通過docker安裝ubuntu映象,這裡的映象是一個掛docker裡的映象。跟剛剛子系統是不一樣的。
# 我們先搜尋docker能夠下載的映象, 開啟powershell 或者 terminal。
docker search ubuntu
首先我先講講這個docker的映象問題、大部分都是使用者或官方掛上去的資源。你可以把docker比作容器中的github。 docker只是提供一個型別虛擬機器的容器和映象資源、 我們需要什麼只需要先拉映象下來,後面在設定一個要執行容器的埠, 我們就可以不需要考慮依賴不相容等各種問題的執行起來。 這裡我們先看,ubuntu 這個專案是一個基礎配置 -> STARS=12660 相當於github裡的stars一樣的,好評吧。 接著看另一個專案rastasheep/ubuntu-sshd 斜槓前面可能是作者名也可能是代號 後面就是容器的用途。 如專門配置了sshd的容器, 我們只需要拿來用 不需要配置sshd就能連線。
# 把基礎配置ubuntu容器拉下來、等等就配置python的容器。 因為Q群裡的小夥伴多數熟悉python
docker pull ubuntu
# 拉完我們檢視一下
docker iamges
# REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
# ubuntu       20.04     1318b700e415   3 weeks ago   72.8MB
# 不得不說大小隻有72.8MB docker的強大慢慢體現

下面我們就可以配置一個Python的環境

# 我們剛剛拉的映象名稱為 ubuntu, 所以我們掛容器也以這個為準,:後面是ubuntu版本.
# 埠則 9952:9952  這裡:是說明分割windows埠與docker裡的容器埠 windows開放9952埠:容器開放9952埠
# 關於埠的連線工作、首先docker開啟時就會建立一個封閉的虛擬機器網路,防止逃逸。也就是說所有通訊控制權在於docker
# 通過埠對映就可以實現實時通訊, 如果想深入自行查閱官方。
docker run -p 9952:9952 -it ubuntu:20.04

# 查詢剛剛掛起的容器
PS C:\Users\Administrator\Desktop> docker ps -a
# CONTAINER 
#ID   IMAGE          COMMAND   CREATED          STATUS                        PORTS                                      #NAMES
#277b45f672a1   ubuntu:20.04   "bash"    55 seconds ago   Exited (127) 5 seconds #ago                                                jovial_meninsky
#2034ee5675a5   ubuntu:20.04   "bash"    22 hours ago     Exited (255) 14 minutes ago   0.0.0.0:9950->9950/tcp, :::9950-#>9950/tcp   rust_ubuntu

# 55 seconds ago 掛載了一個名為jovial_meninsky的容器,命名是不會給你起的。277b45f672a1 為唯一ID,開啟和停止修改都要這個為主
# 先修改名稱
docker rename jovial_meninsky ubuntu_python3
docker ps -a
# 如ID為 277b45f672a1
# 開啟容器
docker start 277b45f672a1
# 停止容器
docker stop 277b45f672a1
# 進入容器
docker attach 277b45f672a1

六、配置vscode以及python3環境


vscode自行官方安裝https://code.visualstudio.com/ 開啟vscode搜尋外掛

搜尋docker -> install

搜尋Remote Containers -> install

如果有提示則選擇 Got it

現在快捷鍵Ctrl+J -> 預設就進入到容器裡了

# 修改國內加速映象
cd /etc/apt
cp -rf  sources.list sources.list.bak

把下面內容貼上上去

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

更新以及配置python3、

mkdir ~/python3
cd ~/python3
apt update
apt install python3.8 python3-pip python3-venv -y #如果你想配置其他版本python自行修改即可
python3.8 -m pip install numpy # 安裝測試所需的庫
關鍵來了,如果你先裝了python的補全外掛、你就需要再搜尋python一次,並安裝. 否則你會以為無法補全, 容器儘量少匯入不想關的內容。

接著修改settings -> Ctrl+, 輸入settings

在settings.json加入"telemetry.enableTelemetry":false

重啟vscode重新開啟,接下來配置run和debug

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python",
            "type": "python",
            "request": "launch",
            "stopOnEntry": true,
            "pythonPath": "/usr/bin/python3.8",
            "program": "${file}",
            "cwd": "${workspaceRoot}",
            "env": {},
            "envFile": "${workspaceRoot}/.env",
            "debugOptions": [
                "WaitOnAbnormalExit",
                "WaitOnNormalExit",
                "RedirectOutput"
            ]
        }
    ]
}
已經可以用debug與vscode的run了, 另外如果想要配置圖形介面可以搜尋相關配置好的 映象。 如果自己配置比較麻煩不太建議, 到這裡也就結束了。如果這個文章對你有幫助 可以關注我.
QQ: 2472674814 Email: [email protected] 作者: Pudge 創作時間: 2021/8/22