配置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
 
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
作者: Pudge
创作时间: 2021/8/22
 
posted @ 2021-08-22 18:47  握着玫瑰的屠夫  阅读(6428)  评论(1编辑  收藏  举报