Docker的基础概念介绍

目录

一、引言

二、虚拟化介绍

1、虚拟化概念

2、耦合和解耦合概念

2.1、耦合性

2.2、耦合

2.3、解耦合

3、虚拟化作用

4、虚拟化工作原理

5、两大核心组件

5.1、QEMU

5.2、KVM

6、虚拟化类型

三、Docker概述

1、docker是什么?

2、为什么从传统服务器迭代到虚拟化

3、Docker特点

4、Docker容器 VS KVM

4.1、KVM:

4.2、Docker容器:

4.3、区别

 5、Docker的三大组成要素

6、Docker容器的运行逻辑

7、Docker 名称空间

8、控制组—cgroups(Control groups)


一、引言

Linux操作系统会有一个主进程,派生出其他进程来控制不同的服务。

二、虚拟化介绍

       虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。虚拟化在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

       目前主流的虚拟化技术包括开源的XEN、KVM,VMware的ESXi以及微软的Hyper-V。

1、虚拟化概念

将应用程序和系统内核资源进行解耦,以操作系统级别进行隔离,目的是提高资源利用率

2、耦合和解耦合概念

2.1、耦合性

       耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块 之间联系越紧密,其耦合性就越强,模块之间越独立则越差,模块间耦合的高低取决于模块 间接口的复杂性,调用的方式以及传递的信息。

2.2、耦合

       在软件工程中,对象之间的耦合度就是对象之间的依赖性。对象之间的耦合越高,维护成本越高,因此对象的设计应使类和构件之间的耦合最小。

2.3、解耦合

解耦合,字面意思就是解除耦合关系。

在软件工程中,降低耦合度即可以理解为解耦,模块间有依赖关系必然存在耦合,理论上的绝对零耦合是做不到的,但可以通过一些现有的方法将耦合度降至最低。

3、虚拟化作用

缓解及解决资源利用率的问题。实际的实例的性能相对而言比虚拟化的要稳定,功能要强大的多。

4、虚拟化工作原理

Docker的基础概念介绍_第1张图片

一种叫做 Hypervisor (虚拟机监控程序)的软件可有效分隔物理资源,并将这些资源分配给不同虚拟环境(也就是需要这些资源的任务)使用。虚拟机监控程序可能位于操作系统的顶层(例如在便携式计算机上),或者直接安装在硬件上(例如服务器),这是大多数企业使用虚拟化的方式。虚拟机监控程序接管物理资源,并对它们进行划分,以便虚拟环境能够对其进行使用。

来自物理环境的资源根据需要进行了分区,分配给了很多虚拟环境使用。用户在虚拟环境(通常称为客户机或虚拟机)内部,能够与计算任务交互,并运行计算。虚拟机作为单个数据文件运行。与任何数字文件相同,虚拟机可从一台计算机迁移至另一台计算机,在任何一台计算机上打开,工作方式都是相同的。

当虚拟环境正在运行时,如果用户或程序发出一条指令,请求来自物理环境的更多资源, 虚拟机监控程序就会将请求传递到物理系统并缓存更改,所有这些步骤都接近本机速度(特别是如果该请求来自基于 KVM,即基于内核的虚拟机的开源虚拟机监控程序)。

5、两大核心组件

5.1、QEMU

QEMU是I/O控制的模块,可以理解为队列,核心目的是调用资源内核中的资源,需要把KVM逻辑分割出来的资源运输给QEMU,再给虚拟机。

QEMU是I/O控制的模块,可以理解为队列,核心目的是调用资源内核中的资源,需要把KVM逻辑分割出来的资源运输给QEMU,再给虚拟机

5.2、KVM

用来逻辑分割物理资源,抽象化为虚拟化资源,根据VMM里的配置,进行逻辑分割,给应用程序去进行虚拟化。

只接受来自QEMU的请求指令。对于应用程序直接过来的敏感指令会拦截,然后通过接口发给QEMU,让QEMU判断是否需要执行,可以的话,再下来,不可以的话,打回去,不执行该敏感指令。

6、虚拟化类型

  1. 全虚拟化:将物理硬件资源全部通过软件的方式抽象化,最后进行调用
  2. 半虚拟化:需要修改操作系统
  3. 直通:直接使用物理硬件资源(需要支持,还不完善)

三、Docker容器

Docker的基础概念介绍_第2张图片

1、docker 诞生

①、Docker是 dotcloud 公司开源的一款产品 dotcloud是2010年新成立的一家公司,主要基于PAAS ( Platfrom as a Service )平台为开发者提供服务

②、Linux Container是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源。

③、Docker是PAAS提供商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在Github 上,基于go语言并遵从 Apache2.0协议开源

2、docker是什么?

①、是一种轻量级的“虚拟机”

②、在Linux容器里运行应用的开源工具

3、为什么从传统服务器迭代到虚拟化

优势:

①、对于传统服务器,可以提高利用率

②、为微服务提供对于的运行时环境

③、隔离性较高(因为虚拟机之间是完整的操作系统的隔离)

④、安全性较高,不会轻易出现雪崩的情况

⑤、管理较为方便(争议性)

⑥、比较容易进行弹性伸缩资源

⑦、前期成本高,后期相较传统,会更"便宜"点

劣势:

①、前期成本较高

②、维护难度高

③、主机安全性要求高

④、不适合运行对资源要求极高的应用(简称极度吃资源的应用)

⑤、运行代价有的时候,较高

4、Docker特点

  1. 灵活:即使是最复杂的应用也可以集装箱化。
  2. 轻量级:容器利用并共享主机内核。
  3. 可互换:可以即时部署更新和升级。
  4. 便携式:可以在本地构建,部署到云,并在任何地方运行。
  5. 可扩展:可以增加并白动分发容器副本。
  6. 可堆叠:可以垂直和即时堆叠服务。

5、Docker容器 VS KVM

Docker的基础概念介绍_第3张图片

5.1、KVM:

使用Hypervisor提供虚拟机的运行平台,管理每个VM中操作系统的运行。每个VM都要有自己的操作系统、应用程序和必要的依赖文件等。

5.2、Docker容器:

使用Docker引擎进行调度和隔离,提高了资源利用率,在相同硬件能力下可以运行更多的容器实例;每个容器拥有自己的隔离化用户空间

5.3、区别

不同点 Docker容器 VM
启动速度 秒级 分钟级
运行性能 接近原生(直接在内核中运行) 约50%左右损失
磁盘占用 MB GB        
数量 成百上千 一般几十台
隔离性 进程进别 系统级别(更彻底)
操作系统 只要支持linux 几乎所有
分装程度 只打包项目代码和依赖关系,共享宿主机内核 完成的操作系统,与宿主机隔离

6、Docker的三大组成要素

1、镜像:Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数。镜像不包含任何动态数据,其内容在构建之后也不会被改变。Docker镜像运行之后就变成容器(docker run)

2、容器:镜像创建的运行实例,Docker利用容器来运行应用。每个容器都是相互隔离的、保证安全的平台。我们可以把容器看做是一个轻量级的Linux运行环境。

3、镜像仓库:集中存放镜像文件的地方。用户创建完镜像后,可以将其上传到公共仓库或者私有仓库,需要在另一台主机上使用该镜像时,只需要从仓库上下载即可。

7、Docker容器的运行逻辑

Docker使用客户端/服务器 (C/S) 架构模式,Docker守护进程(Docker daemon)作为Server端接收Docker客户端的请求,并负责创建、运行和分发Docker容器。Docker守护进程一般在Docker主机后台运行,用户使用Docker客户端直接跟Docker守护进程进行信息交互。

Docker的基础概念介绍_第4张图片

①、橙色流程所示,执行Docker构建指令会根据Docker文件构建一个镜像存放于本地Docker主机。

②、蓝色流程所示,本地没有需求的镜像,Docker拉取指令会从云端镜像仓库拉取镜像至本地Docker主机。

③、黑色流程所示,执行Docker启动指令会将本地已有的镜像安装至容器并启动容器。

各自的职能

Docker客户端:用于和Docker守护进程(Docker Daemon)建立通信的客户端

Docker主机:一个物理或者虚拟的机器用于执行 Docker守护进程和容器

Docker守护进程:接收并处理Docker客户端发送的请求,监测Docker API的请求和管理Docker对象,比如镜像、容器、网络和数据卷

各人总结大白话:

Docker的基础概念介绍_第5张图片

8、Docker 名称空间

Docker 通过 namespace六项隔离,实现了容器与宿主机之间的隔离。
查看六个名称空间位置
Docker的基础概念介绍_第6张图片

mount(mnt) (挂载点)文件系统
user 操作进程的用户和用户组
pid 进程编号
uts 主机名和域名
ipc 信号量、消息队列,共享内存
net 网络设备、网络协议栈、端口等

9、控制组—cgroups(Control groups)

六种名称空间是由cgroups管理的,最后一种centos的cgroups管理版本是3.8版本,3.6和3.5用不了

Docker通过cgroup限制容器对宿主机资源的使用

cgroup四大功能 :

①、资源限制:cgroup可以对进程组使用的资源总额进行限制

②、优先级分配:通过分配的cpu时间片数量以及硬盘IO带宽大小, 实际上相当于控制了进程运行的优先级别

③、资源统计:cgroup可以统计系统资源使用量,比如cpu使用时 间,内存使用量等,用于按量计费。同时,还支持挂起动能,也就是说通过cgroup把所有资源限制起来,对资源都不能使用, 注意着并不是说我们的程序不能使用了,只是不能使用资源,处于等待状态

④、进程控制:可以对进程组执行挂起、恢复等操作

10、docker 的底层原理

cgroup和名称空间

你可能感兴趣的:(docker,运维,linux基础,docker,服务器,运维)