Windows虚拟系列(亲测有效):win10安装docker教程、常见问题和原理总结

win10安装docker教程、常见问题和原理总结

前言

win10下安装docker教程;
其中记录安装过程中初心的问题和解决问题方法。
详细记录了docker安装整个过程,适合新手小白,那就开始吧!

一、Docker是什么?

在这里插入图片描述

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、 bare metal、OpenStack 集群和其他的基础应用平台。

Docker通常应用场景:

  1. web应用的自动化打包和发布;

  2. 自动化测试和持续集成、发布;

  3. 在服务型环境中部署和调整数据库或其他的后台应用;

  4. 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

准备开始

Docker系统有两个程序:docker服务端和docker客户端。其中docker服务端是一个服务进程,管理着所有的容器。docker客户端则扮演着docker服务端的远程控制器,可以用来控制docker的服务端进程。大部分情况下,docker服务端和客户端运行在一台机器上。

为什么要引入docker?

现代软件开发的一大目的就是隔离,应用程序在运行时相互独立互不干扰,这种隔离实现起来是很不容易的,其中一种解决方案:虚拟机技术,通过将应用程序部署在不同的虚拟机中从而实现隔离。

在这里插入图片描述
但是虚拟机技术有占用资源、启动时间慢等缺点,那么容器技术又怎么样呢?
与虚拟机通过操作系统实现隔离不同,容器技术只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统,这里的运行时环境指的是程序运行依赖的各种库以及配置。

在这里插入图片描述

从图中我们可以看到容器更加的轻量级且占用的资源更少,与操作系统几G的内存占用相比,容器技术只需数M空间,因此我们可以在同样规格的硬件上大量部署容器,这是虚拟机所不能比拟的,而且不同于操作系统数分钟的启动时间容器几乎瞬时启动,容器技术为打包服务栈提供了一种更加高效的方式。

docker基本概念

Docker包括三个基本概念:
  • l 镜像(Image)

  • l 容器(Container)

  • l 仓库(Repository)

理解了这三个概念,就理解了 Docker 的整个生命周期。

简单的把image理解为可执行程序,container就是运行起来的进程。

那么写程序需要源代码,那么“写”image就需要dockerfile,dockerfile就是image的源代码,docker就是"编译器"。

镜像Image Docker镜像就是一个只读的模板。

例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。

镜像可以用来创建Docker 容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。

容器Container Docker利用容器来运行应用。

容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。

可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

*注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。

仓库Repository

仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。

最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。 国内的公开仓库包括Docker Pool等,可以提供大陆用户更稳定快速的访问。

当然,用户也可以在本地网络内创建一个私有仓库。

当用户创建了自己的镜像之后就可以使用push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。

*注:Docker 仓库的概念跟 Git 类似,注册服务器可以理解为GitHub 这样的托管服务。

docker工作流程

实际上docker使用了常见的CS架构,也就是client-server模式,docker client负责处理用户输入的各种命令,比如docker build、docker run,真正工作的其实是server,也就是docker demon,值得注意的是,docker client和docker demon可以运行在同一台机器上。

接下来我们用几个命令来讲解一下docker的工作流程:

1,docker build

当我们写完dockerfile交给docker“编译”时使用这个命令,那么client在接收到请求后转发给docker daemon,接着docker daemon根据dockerfile创建出“可执行程序”image。
在这里插入图片描述

2,docker run

有了“可执行程序”image后就可以运行程序了,接下来使用命令docker run,docker daemon接收到该命令后找到具体的image,然后加载到内存开始执行,image执行起来就是所谓的container。

在这里插入图片描述

3,docker pull

其实docker build和docker run是两个最核心的命令,会用这两个命令基本上docker就可以用起来了,剩下的就是一些补充。
这个命令的实现也很简单,那就是用户通过docker client发送命令,docker daemon接收到命令后向docker registry发送image下载请求,下载后存放在本地,这样我们就可以使用image了。
在这里插入图片描述

docker原理:

首先Docker是基于Go语言进行开发的,而且是基于C/S结构进行工作的:
在这里插入图片描述

从图中可以看出:
(1)用户是使用Docker Client与Docker Daemon建立通信,并发送请求给后者;
(2)Docker Daemon作为Docker架构中的主体部分,首先提供Server的功能使其可以接受Docker Client的请求;而后Engine(引擎)执行Docker内部的一系列工作,每一项工作都是以一个Job的形式存在;
(3)Job的运行过程中,当需要容器镜像时,则从Docker Registry(docker仓库)中下载镜像,并通过graphdriver(镜像管理驱动)将下载镜像以Graph(图像)的形式存储;当需要为Docker创建网络环境时,通过networkdriver(网络管理驱动)创建并配置Docker容器网络环境;当需要限制Docker容器运行资源或执行用户指令等操作时,则通过execdriver(执行管理驱动)来完成。
(4)libcontainer(容器库)是一项独立的容器管理包,networkdriver以及execdriver都是通过libcontainer来实现具体对容器进行的操作。当执行完运行容器的命令后,一个实际的Docker容器就处于运行状态,该容器拥有独立的文件系统,独立并且安全的运行环境等。

各个模块的功能
(1)docker client
docker client是docker架构中用户用来和docker daemon建立通信的客户端,用户可以通过docker命令行工具发起众多管理docker container的请求。

docker client发送容器管理请求后,由docker daemon接受并处理请求,当docker client接收到返回的请求相应并简单处理后,docker client一次完整的生命周期就已经结束了。

(2)docker daemon
docker daemon 是docker架构中一个常驻在后台的系统进程,功能就是:接收处理docker client发送的请求。该守护进程在后台启动一个server,server负载接受docker client发送的请求;接受请求后,server通过路由与分发调度,找到相应的handler(处理器)来执行请求。

(3)docker server
 docker server在docker架构中是专门服务于docker client的server,该server的功能就是:接受并调度分发docker client发送的请求。

(4)engine
Engine是Docker架构中的运行引擎,同时也Docker运行的核心模块。它扮演Docker container存储仓库的角色,并且通过执行job的方式来操纵管理这些容器。

(5)job
一个Job可以认为是Docker架构中Engine内部最基本的工作执行单元,Docker可以做的每一项工作,都可以抽象为一个job。

(6)docker registry
Docker Registry是一个存储容器镜像的仓库。而容器镜像是在容器被创建时,被加载用来初始化容器的文件架构与目录。

(7)Graph
Graph在Docker架构中扮演已下载容器镜像的保管者,以及已下载容器镜像之间关系的记录者。一方面,Graph存储着本地具有版本信息的文件系统镜像,另一方面也通过GraphDB记录着所有文件系统镜像彼此之间的关系。

(8)driver
Driver是Docker架构中的驱动模块。通过Driver驱动,Docker可以实现对Docker容器执行环境的定制。由于Docker运行的生命周期中,并非用户所有的操作都是针对Docker容器的管理,另外还有关于Docker运行信息的获取,Graph的存储与记录等。因此,为了将Docker容器的管理从Docker Daemon内部业务逻辑中区分开来,设计了Driver层驱动来接管所有这部分请求。

在Docker Driver的实现中,可以分为以下三类驱动:

graphdriver主要用于完成容器镜像的管理,包括存储与获取。即当用户需要下载指定的容器镜像时,graphdriver将容器镜像存储在本地的指定目录;同时当用户需要使用指定的容器镜像来创建容器的rootfs时,graphdriver从本地镜像存储目录中获取指定的容器镜像;
networkdriver的用途是完成Docker容器网络环境的配置,其中包括Docker启动时为Docker环境创建网桥;Docker容器创建时为其创建专属虚拟网卡设备;以及为Docker容器分配IP、端口并与宿主机做端口映射,设置容器防火墙策略等;
execdriver作为Docker容器的执行驱动,负责创建容器运行命名空间,负责容器资源使用的统计与限制,负责容器内部进程的真正运行等。在execdriver的实现过程中,原先可以使用LXC驱动调用LXC的接口,来操纵容器的配置以及生命周期,而现在execdriver默认使用native驱动,不依赖于LXC。具体体现在Daemon启动过程中加载的ExecDriverflag参数,该参数在配置文件已经被设为”native”;

(9)libcontainer
libcontainer是Docker架构中一个使用Go语言设计实现的库,设计初衷是希望该库可以不依靠任何依赖,直接访问内核中与容器相关的API。正是由于libcontainer的存在,Docker可以直接调用libcontainer,而最终操纵容器的namespace、cgroups、apparmor、网络设备以及防火墙规则等。

(10)docker container
Docker container(Docker容器)是Docker架构中服务交付的最终体现形式。Docker按照用户的需求与指令,订制相应的Docker容器。用户通过指定容器镜像,使得Docker容器可以自定义rootfs等文件系统; 用户通过指定计算资源的配额,使得Docker容器使用指定的计算资源; 用户通过配置网络及其安全策略,使得Docker容器拥有独立且安全的网络环境; 用户通过指定运行的命令,使得Docker容器执行指定的工作。

二、win10上安装docker

注册docker账号

配置虚拟化

启用 bios 虚拟化,是否已启用可以通过任务管理器查看
在这里插入图片描述

如果没有启动请看,否则可以直接跳到2开启 Hyper-V进行后续操作:
irtualization Technology(VT),中文译为虚拟化技术,英特尔(Intel)和AMD的大部分CPU均支持此技术,名称分别为VT-x、AMD-V。VT开启之后对虚拟机,比如VMware、海马玩/靠谱助手等安卓模拟器的性能有非常大的提高。

BIOS开启VT指南
一、进入BIOS

参考以下按键,开机时按住对应的键进入BIOS:
组装机以主板分,华硕按F8、Intel按F12,其他品牌按ESC、F11或F12;
笔记本以品牌分,联想ThinkPad系列按F1,其他品牌按F2;
品牌台式机按品牌分, Dell按ESC,其他按F12;
如果仍然不能进入BIOS,找找电脑(主板)说明书或者参考BIOS设置怎么进入图解教程。

二、开启VT
1、Phoenix BIOS机型

(1)进入BIOS,选择Configuration选项,选择Intel Virtual Technology并回车。注意:若无VT选项或不可更改,则表示你的电脑不支持VT技术。
在这里插入图片描述
(2)将光标移动至Enabled处,并回车确定。

在这里插入图片描述
(3)此时该选项将变为Enabled,最后按F10热键保存并退出即可开启VT功能。

在这里插入图片描述

2、Insyde BIOS机型

(1)进入BIOS,选择Configuration选项,选择Intel Virtual Technology并回车。

在这里插入图片描述

(2)将光标移动至Enabled处,并回车确定。

在这里插入图片描述
(3)此时该选项将变为Enabled,最后按F10热键保存并退出即可开启VT功能。

在这里插入图片描述
再资源管理器中再查看一次,显示已经启用则开始后续操作。

开启 Hyper-V

在这里插入图片描述

如果是家庭中文版则没有,请往下看,慎重操作,有可能会造成蓝屏闪屏闪退循环电脑重启之后显示无法更新配置撤销更改

但我这win10上没有Hyper-V别慌,若是你也没有我们来下载Hyper-V。
找了很久没有找到教程,终于找到了这个宝藏博客

Hyper-V是Windows自带的虚拟机产品,用的还挺顺手。但是在win10家庭版木有Hyper-V,这让人很DT,如果你和我一样DT,那请看下面的教程。
在这里插入图片描述

如果发生闪退
not enough space for thread data

windows media player 占用了太多的缓冲,将“媒体库”下的音频,视频都删掉。

没有文件扩展“.js”的脚本引擎

现象:
双击.js文件时,系统弹出提示:没有文件扩展“.js”的脚本引擎。

原因:
系统安装Dreamwear、UltraEdit、EditPlus后修改了.js文件的默认打开方式。当想直接执行js脚本时就会出现此错误。

解决办法:
打开注册表编辑器,定位[HKEY_CLASSES_ROOT.js]这一项,双击默认值将其改为“JSFile”即可。

如果你在运行一个命令的时候,系统给出提示“** 不是内部或外部命令,也不是可运行的程序或批处理文件”,出现这种情况

1.一般是因为c:\windows \system32文件夹下缺少对应的exe或com文件,去网上下载一个,放在c:\windows\system32文件夹下即可让命令正确执行。

(例如:‘ipconfig’ 不是内部或外部命令,也不是可运行的程序或批处理文件。——解决:下载一个ipconfig.exe放在c:\windows\system32,再次使 用该命令就可以正常运行)

2.特殊原因:系统环境变量被修改了。

恢复办法如下: 我的电脑–属性–高级–环境变量–系统变量 将名为“path”的变量值,双击修改为: %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem 重启电脑后生效。

windows下显示中文为乱码

原因:
这个问题是因为把系统语言改为英语后,语言设置的非Unicode设置出问题而导致的,因为中文不是Unicode语言,所以才会乱码,设置一下非Unicode的语言为中文就可以解决这个问题了。

解决办法:
打开“控制面板”,点“更改显示语言”,点“更改系统区域设置”,选择“中文(简体,中国)”。

在Windows环境下将UltraEdit32加入右键快捷菜单
1.打开注册表管理器:

2.在HKEY_CLASSES_ROOT/*/shell下建立新项Edit with UltraEdit-32(右键显示的项的名称,可随便取)

3.在Edit with UltraEdit-32下建立新项command,双击“默认”将其值设置为“uedit32.exe绝对路径+空格+%1”

如:C:/Program Files/IDM Computer Solutions/UltraEdit-32/uedit32.exe %1

4.文本类型文档右键即出现Edit with UltraEdit-32项!




教程正式开始

1. 将如下代码添加到记事本中,并另存为Hyper-V.cmd文件
pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL
2. 我们找到Hyper-V.cmd文件图标,在右键菜单中点击:以管理员身份运行

在这里插入图片描述

3. 然后弹出一个 用户帐户控制 - Windows命令处理程序 对话框,我们点击:是
4.然后系统自动进行Windows命令处理,我们等待处理完成以后,【这个过程中不要关闭窗口或者关机】在最末处输入:Y,电脑自动重启,进行配置更新

在这里插入图片描述

5. 电脑重启之后,在window管理工具中可以看到已经成功安装了Hyper-V。这样就可以在不用重装专业版系统的情况下,使用Hyper-V虚拟机了

在这里插入图片描述

在这里插入图片描述

6. 如果在window管理工具里没有看到,进行如下操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

下载安装docker

到这就好了,我们准备工作就完成,现在开始我们安装Docker

官网链接直接附上Install Docker Desktop on Windows | Docker Documentation官网下载地址

下载后直接Next安装就完事;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
安装完需要重启电脑,待重启结束后,docker会自动运行。我们看一下docker是否成功启动。如果看到下面的界面,则证明一切正常。

在这里插入图片描述

docker问题

1. 启动Docker服务后显示Docker Engine stopped

在这里插入图片描述

重新启动Docker服务:打开Windows服务管理器(可以在开始菜单中搜索),找到"Docker Desktop Service"或类似命名的服务,右键单击并选择"重启"。稍等片刻,看看是否重新启动成功

如果一直重启不成功,直接重启Windows即可

2. Starting the Docker Engine 一直转圈

在这里插入图片描述

1、检查CPU是否开启虚拟化

开启任务管理器查看
在这里插入图片描述
在这里插入图片描述

2、检查Hyper-v是否开启

在这里插入图片描述

3、关闭Docker 服务,再重新启动Docker服务
net stop com.docker.service
net start com.docker.service
4. .检查右上角是否登录账号。若非,登录一下。

在这里插入图片描述

如第二张图,右上角有用户名即为登陆成功。

如果还是不行,重启电脑重新打开试一试。

重启电脑后,我出现了如下问题:

在这里插入图片描述

Windows containers not supported.解决思路如下:

(1)检查是否为windows内部版本过低问题,常见于win10系统,win11一般不会出现。

在这里插入图片描述
(2)修改对应的json配置文件。我的路径是:C:\Users\97476\AppData\Roaming\Docker\settings.json,其中“97476”需要换成你自己的电脑。

将其中的“useWindowsContainers"里的值由true改为false。

在这里插入图片描述

大功告成!
在这里插入图片描述

5. 还是不行

在这里插入图片描述

猜想这和之前ubuntu22.02有关

在这里插入图片描述
在这里插入图片描述

于是启用或关闭Windows功能上 关闭 适用于Linux的Windows系统

在这里插入图片描述
于是启用或关闭Windows功能上 打开 适用于Linux的Windows系统

虽然还是一样,但是先把Ubuntu22.02 TLS 解决掉在来看这个问题吧

这里等于把之前的ubuntu卸载了,相关命令查看 windows虚拟系列:WSL 命令简单总结

wsl --unregister Ubuntu-22.04

为了以防万一,把另外一个也卸载了

wsl --unregister Ubuntu-20.04

在这里插入图片描述
重启计算机,然后查看 WSL 下 有哪些

wsl -l

刚开始什么都没有,打开docker-desktop,可见还是处于 之前的状态

等过一会儿,再次 查看 WSL 下 有哪些,就会看到

C:\Users\admin>wsl -l
适用于 Linux 的 Windows 子系统分发:
docker-desktop (默认)
docker-desktop-data

docker-desktop还是处于之前的状态,不知过了多长时间(去查WSL命令并整理了),整理完了一看,正常启动了
在这里插入图片描述

可能大家比较好奇,为什么Ubuntu22.02docker-desktop有关系,可能都处于同一个WSL下面吧

其实之前 安装https://vulhub.org/#/docs/run/搭建靶场,安装docker后启动一直有问题,wsl中的docker-desktop可能和ubuntu-22.02中的也有关系吧

目前docker正常启动了,先这样吧

对了,最后教给大家不登陆,进入docker界面

在这里插入图片描述
在这里插入图片描述

WSL 2 installtation incomplete

关闭docker,Hyper-V安装配置好,再次运行

在这里插入图片描述
很不幸又出错误了:

在这里插入图片描述
搜索发现是wsl版本太老了,需要更新
适用于 x64 计算机的 WSL2 Linux 内核更新包
如果使用的是 ARM64 计算机,请下载 ARM64 包。 如果不确定自己计算机的类型,请打开命令提示符或 PowerShell,并输入:systeminfo | find “System Type”。 警告: 在非英语 Windows 版本中,你可能需要修改搜索文本,例如在德语中为 systeminfo | find “Systemtyp”。
安装适用于 Linux 的 Windows 子系统 (WSL) 时有两个选项:
简化安装 (预览版) :wsl --install
要使用 wsl --install 简化安装命令,你需要加入 Windows 预览体验计划 并安装 Windows 10 的预览版(OS 版本 20262 或更高版本),但不需要执行手动安装步骤。 只需使用管理员权限打开命令窗口并运行 wsl --install,重启后即可使用 WSL。

这里我直接下载了ARM64包点击安装后,重启,点击docker完美解决!!!
在这里插入图片描述

在这里插入图片描述







GarenWang

win10 家庭中文版没有Hyper-V,这样安装一步搞定

山西茄子

windows下问题

元宝的程序员爸爸

解决Docker 一直starting 的办法

Fireworks_1020

Docker Desktop启动一直转圈问题

weixin_44054756

win10安装docker教程、常见问题和原理总结

posted @ 2024-01-11 19:31  坦笑&&life  阅读(5)  评论(0编辑  收藏  举报  来源