详解Docker虚拟化技术概念:Docker核心组件+虚拟化技术分类

什么是虚拟化

在计算机技术中,虚拟化(Virtualization)是一种资源管理技术

。它是将计算机的各种实体资源,如:服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以用更好的方式来利用这些资源。

详解Docker虚拟化技术概念:Docker核心组件+虚拟化技术分类

虚拟化的目的是为了在同一个主机上运行多个系统或应用,从而提高系统资源的利用率,并带来降低成本、方便管理和容错容灾等好处。

虚拟化技术分类

从实现形式来分,虚拟化技术可分为基于硬件的虚拟化和基于软件的虚拟化。

硬件虚拟化

硬件虚拟化就是硬件物理平台本身提供了对特殊指令的截获和重定向的支持。支持虚拟化的硬件,也是一些基于硬件实现软件虚拟化技术的关键。在基于硬件实现软件虚拟化的技术中,在硬件是实现虚拟化的基础,硬件(主要是CPU)会为虚拟化软件提供支持,从而实现硬件资源的虚拟化。

支持虚拟化的硬件有:

  • Intel-VT-(Intel Virtualization Technology),Intel公司为解决纯软件虚拟化解决方案在可靠性、安全性和性能上的不足而引进的技术。
    它可以让一个CPU工作起来像多个CPU在并行运行,从而使得在一部电脑内同时运行多个操作系统成为可能
  • AMD-V-(AMD Virtualization),是AMD公司的虚拟化技术。它是对x86处理器系统架构的一组硬件扩展和硬件辅助虚拟化技术,可以简化纯软件的虚拟化解决方案,改进VMM(虚拟机监视器)的设计,更充分地利用硬件资源,提高服务器和数据中心的虚拟化效率

软件虚拟化

软件虚拟化就是利用软件技术,在现有的物理平台上实现对物理平台访问的截获和模拟。在软件虚拟化技术中,有些技术不需要硬件支持,如:QEMU;而有些软件虚拟化技术,则依赖硬件支持,如:VMware、KVM。

对软件虚拟化进行细分,又可以分为以下几类:

  • 完全虚拟化:(Full Virtualization)虚拟机模拟完整的底层硬件环境和特权指令的执行过程,使客户机操作系统可以独立运行
    。支持完全虚拟化的软件有:Parallels Workstation、VirtualBox、Virtual Iron、Oracle VM、Virtual PC、Virtual Server、Hyper-V、VMware Workstation、QEMU等
  • 硬件辅助虚拟化:(Hardware-assisted Virtualization)是指通过硬件辅助支持模拟运行环境,使客户机操作系统可以独立运行,实现完全虚拟化的功能。支持硬件辅助虚拟化的软件有:Linux KVM、VMware Workstation、VMware Fusion、Virtual PC、Xen、VirtualBox、Parallels Workstation等
  • 部分虚拟化:(Partial Virtualization)只针对部分硬件资源进行虚拟化,虚拟机模拟部分底层硬件环境,特别是地址空间。这样的环境支持资源共享和线程独立,但是不允许建立独立的客户机操作系统。
  • 平行虚拟化:(Para-Virtualization)虚拟机不需要模拟硬件,而是将部分硬件接口以软件的形式提供给客户机操作系统。如:早期的Xen。
  • 操作系统层虚拟化:(OS-level virtualization)这种技术将操作系统内核虚拟化,可以允许使用者空间软件实例被分割成几个独立的单元,在内核中运行,而不是只有一个单一实例运行。这个软件实例,也被称为是一个容器(containers)、虚拟引擎(Virtualization engine)、虚拟专用服务器(virtual private servers)。每个容器的进程是独立的,对于使用者来说,就像是在使用自己的专用服务器。
  • Docker容器技术就是属于操作系统层虚拟化的范畴。

Docker虚拟化

详解Docker虚拟化技术概念:Docker核心组件+虚拟化技术分类

什么是Docker

Docker是一个开源的应用容器引擎,它让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到安装了任何 Linux 发行版本的机器上Docker基于LXC来实现类似VM的功能,可以在更有限的硬件资源上提供给用户更多的计算资源。与同VM等虚拟化的方式不同,LXC不属于全虚拟化、部分虚拟化或半虚拟化中的任何一个分类,而是一个操作系统级虚拟化。

详解Docker虚拟化技术概念:Docker核心组件+虚拟化技术分类

Docker是直接运行在宿主操作系统之上的一个容器,使用沙箱机制完全虚拟出一个完整的操作,容器之间不会有任何接口,从而让容器与宿主机之间、容器与容器之间隔离的更加彻底。每个容器会有自己的权限管理,独立的网络与存储栈,及自己的资源管理能,使同一台宿主机上可以友好的共存多个容器。

Docker借助Linux的内核特性,如:控制组(Control Group)、命名空间(Namespace)等,并直接调用操作系统的系统调用接口。从而降低每个容器的系统开销,并实现降低容器复杂度、启动快、资源占用小等特征。

Docker核心组件

Docker Image(镜像)、Registry(仓库)、Docker Container(容器)是Docker中包含几个核心组件(核心概念),这几个组件介绍如下:

Docker Image - 镜像

镜像用于构建Docker容器,是构成Docker的基础。它类似于虚拟机中的镜像,但它非常小,可以将它理解为容器的源代码

。是一种层式结构的增量文件系统,由一系列命令一步步组成。

与传统虚拟机中的镜像相比,Docker镜像是分层的,也更为轻量。你可以对其进行快速跌代,通过版本管理及增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经现有的应用镜像,再通过简单的命令就可以直接使用。

Registry - 仓库

Registry是Docker用于存放镜像文件仓库,仓库分为开放(Public)和私有(Private),其设计理念非常类似于代码仓库Git。

Docker Hub是Docker公司运营的Registry,也是最大的Docker仓库,用户可以在上面注册帐号分享并保存自己的镜像。除Docker Hub外,还有很多第三方镜像仓库。如果不希望自己的镜像被其它人看到,你甚至可以架设自己的私有仓库,以增强安全性或满足一些特殊需求。

注意:也可以将Repository认为是Docker仓库,实际上二者区分并不严格。

Docker Container - 容器

容器是用于运行镜像的沙箱环境,它是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除。而这些容器都是相互隔离、互不可见的。我们可以理解为:镜像是Docker生命周期的打包和构建阶段,而容器Docker的启动和执行阶段。

Docker借签了集装箱的设计概念,不同的是集装箱运送的货物,而Docker运送的是软件。和集装箱一样,我们并不需要关心里面装的是什么,只需要将应用按标准的形式装进去,然后上传到Registry,在需要使用它的服务器下载部署即可。Docker容器可以非常方便的替换,且各个容器都有良好的通用性,易于分发和叠加。

Docker的适用范围

正如前所述,Docker为容器提供了标准的隔离性,而各个容器本身就是一个标准的系统环境。因些,Docker非常适合构建服务块,以下是Docker的一些应用场景

  • 方便应用的自动化打包与部署 - 加速本地开发和构建流程,使其更加高效和轻量化。本地开发人员可以构建、运行并分享Docker容器。容器可以在开发环境中构建,然后轻松的提交到测试环境,并最终进入生产环境。
  • 创建轻量、私密的PAAS环境
  • 部署和扩展Web应用、数据库与后台服务 - 可以让独立服务在不同环境中得到相同的执行结果
  • 连续的集成/部署、测试自动化 - 开发者可以在本地构建运行或测试环境,而不是直接在生产环境中部署、测试。

Docker也并不是万能的,其设计目的也并不是要成为KVM等的替代品。不可避免的,Docker也会有一些局限性,如:

  • 基于Linux内核,所以只能运行于Linux环境中,且只能64位主机上
  • 基于LXC实现的容器,而LXC是基于Linux内核中的cgroup。因此,Docker容器使用的权限、物理资源等也受限于LXC

本文到此结束!!喜欢的朋友帮忙转发下文章和点点关注,感谢支持!!

我这边整理了适合1~5年程序员进阶的一些面试真题(含答案)还有些Java进阶必备知识架构资源以及一些阿里大牛精讲的视频资源,现免费分享给大家。希望对你们有点帮助。还有学习线路知识脑图。

需要的朋友和对技术提升以及学习规划有兴趣的可以关注我后台私信“架构”获取整理好的进阶资料以及面试真题解析等等。


分享到:


相關文章: