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


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


DEBUG:

2021/8/25  ----- wsl2 這文章推崇的,但經過這兩天的性能測試。 資源占用高已經無法控制已經實錘了,

現在已經找到了替代方案、Hyper-V,具體教程會在后面時間發布。 文章鏈接也會放在此開頭下方。

不太建議使用wsl2 ------- 下面教程可以做參考,畢竟證明存在過,此文章只做參考不建議部署。此段需詳細閱讀后才往下看!!!!!!!

BUG解決辦法!  2021/8/26:

在你的%USERPROFILE% 即C:\Users\用戶名, 創建一個  .wslconfig 的文件  注意前面有個點, 添加內容如下:

memory=內存大小 swap=交換空間 processors=CPU內核數量

 

增加選擇 2021/8/29

由於考慮到時間以及部分電腦的磁盤無法更新windows版本,這里增加配置Hyper-V的配置教程。

 

[ws12]
memory=2GB
swap=0
processors=1
localhostForwarding=true
swapFile=%USERPROFILE%\AppData\Local\Temp\swap.vhdx

[ws1]
memory=512MB
swap=512MB
processors=1
localhostForwarding=true
swapFile=%USERPROFILE%\AppData\Local\Temp\swap.vhdx

 

 前言:

由於同事們開始用這個docker去配置,雖然docker很早名聲就大噪,但人性吧就不喜歡接觸新的東西。 
沒用docker前一直在用linux物理機和windows下的虛擬機裝linux,但往往性能很大的開銷,即使你的配置很高。
裝docker過程遇到了各種報錯,這里就不提。主要問題網上的各種博客以及微軟的安裝的教程都不完整只能取優借鑒。
 
一. 安裝前確認系統版本

如果你的電腦無法更新版本,或者不想更新。這里推薦以Hyper-V作為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
# 開啟Hyper-V
DISM /Online /Enable-Feature /All /FeatureName:Microsoft-Hyper-V

-----------------圖形打開這些功能打開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
 
t erminal安裝、這是方便我們做各種終端轉換用的。進入微軟商城搜索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
作者: Pudge
創作時間: 2021/8/22
 


免責聲明!

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



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