win10下安装docker教程;
其中记录安装过程中初心的问题和解决问题方法。
详细记录了docker安装整个过程,适合新手小白,那就开始吧!
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、 bare metal、OpenStack 集群和其他的基础应用平台。
Docker系统有两个程序:docker服务端和docker客户端。其中docker服务端是一个服务进程,管理着所有的容器。docker客户端则扮演着docker服务端的远程控制器,可以用来控制docker的服务端进程。大部分情况下,docker服务端和客户端运行在一台机器上。
现代软件开发的一大目的就是隔离,应用程序在运行时相互独立互不干扰,这种隔离实现起来是很不容易的,其中一种解决方案:虚拟机技术,通过将应用程序部署在不同的虚拟机中从而实现隔离。
但是虚拟机技术有占用资源、启动时间慢等缺点,那么容器技术又怎么样呢?
与虚拟机通过操作系统实现隔离不同,容器技术只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统,这里的运行时环境指的是程序运行依赖的各种库以及配置。
从图中我们可以看到容器更加的轻量级且占用的资源更少,与操作系统几G的内存占用相比,容器技术只需数M空间,因此我们可以在同样规格的硬件上大量部署容器,这是虚拟机所不能比拟的,而且不同于操作系统数分钟的启动时间容器几乎瞬时启动,容器技术为打包服务栈提供了一种更加高效的方式。
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使用了常见的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是基于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容器执行指定的工作。
注册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并回车。
(3)此时该选项将变为Enabled,最后按F10热键保存并退出即可开启VT功能。
再资源管理器中再查看一次,显示已经启用则开始后续操作。
开启 Hyper-V
但我这win10上没有Hyper-V别慌,若是你也没有我们来下载Hyper-V。
找了很久没有找到教程,终于找到了这个宝藏博客,附上原创博主文章链接:
文章链接
Hyper-V是Windows自带的虚拟机产品,用的还挺顺手。但是在win10家庭版木有Hyper-V,这让人很DT,如果你和我一样DT,那请看下面的教程。
将如下代码添加到记事本中,并另存为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
我们找到Hyper-V.cmd文件图标,在右键菜单中点击:以管理员身份运行
然后弹出一个 用户帐户控制 - Windows命令处理程序 对话框,我们点击:是
然后系统自动进行Windows命令处理,我们等待处理完成以后,【这个过程中不要关闭窗口或者关机】在最末处输入:Y,电脑自动重启,进行配置更新
电脑重启之后,在window管理工具中可以看到已经成功安装了Hyper-V。这样就可以在不用重装专业版系统的情况下,使用Hyper-V虚拟机了
到这就好了,我们准备工作就完成,现在开始我们安装Docker
下载安装docker
官网链接直接附上Install Docker Desktop on Windows | Docker Documentation官网下载地址
下载后直接Next安装就完事;
安装完需要重启电脑,待重启结束后,docker会自动运行。我们看一下docker是否成功启动。如果看到下面的界面,则证明一切正常。
我很不幸运,因为再安装前我没有将Hyper-V安装配置好,于是出现:
Docker failed to initialize并一直处于starting
以下是排查方法,解决Docker 一直starting 的办法
1、检查CPU是否开启虚拟化
开启任务管理器查看
3、关闭Docker 服务,再重新启动Docker服务
net stop com.docker.service
net start com.docker.service
搜索发现是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完美解决!!!
安装成功!!!
Linux服务器安装的centos的系统内核不能低于3.10,否则安装不成功。可以通过一下命令查看系统内核
1、Linux服务器安装的centos的系统内核不能低于3.10,否则安装不成功。可以通过一下命令查看系统内核
[root@iZbp14ak3swm571msqxpohZ ~]# uname -r
4.18.0-147.5.1.el8_1.x86_64
2、之前安装过docker的需要清除原安装残余
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
3、创建阿里云镜像,目的是优先从阿里云获取镜像,加快docker的镜像拉取
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
二、安装docker
docker分为(Docker版本分为CE(社区免费版)和EE(企业版,安全CE)
我们通常所下载的docker为docker ce社区版的
1、运行下面命令,下载并安装docker
sudo yum -y install docker-ce
2、运行 docker version,查看docker ce是否安装成功,打印以下信息即为安装成功!
[root@iZbp14ak3swm571msqxpohZ ~]# docker version
#Client: Docker Engine - Community
Version: 20.10.0
API version: 1.40
Go version: go1.13.15
Git commit: 7287ab3
Built: Tue Dec 8 18:57:35 2020
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 19.03.14
API version: 1.40 (minimum version 1.12)
Go version: go1.13.15
Git commit: 5eb3275d40
Built: Tue Dec 1 19:19:17 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.6
GitCommit: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc:
Version: 1.0.0-rc8
GitCommit: 425e105d5a03fabd737a126ad93d62a9eeede87f
docker-init:
Version: 0.18.0
GitCommit: fec3683
参考链接附上:
添加链接描述
什么是Docker?看这一篇干货文章就够了! - 知乎 (zhihu.com)
搜索可用docker镜像 - Docker入门教程 - docker中文社区
【docker】win10安装docker教程 - TurboWay - 博客园 (cnblogs.com)
(8条消息) 解决Docker 一直starting 的办法_元宝的程序员爸爸的博客-CSDN博客
(8条消息) win10 家庭中文版没有Hyper-V,这样安装一步搞定_GarenWang的博客-CSDN博客
(8条消息) 安装Docker Desktop报错WSL 2 installation is incomplete._寻觅的博客-CSDN博客
在 Windows 10 上安装 WSL | Microsoft Docs
(8条消息) Docker——一张架构图让你了解docker工作原理_看清所以看轻-CSDN博客_docker 架构图
https://blog.csdn.net/weixin_37695006/article/details/91589895