当前位置 博文首页 > weixin_34137799的博客:详解Docker虚拟化技术概念:Docker核心
在计算机技术中,虚拟化(Virtualization)是一种资源管理技术。它是将计算机的各种实体资源,如:服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以用更好的方式来利用这些资源。
虚拟化的目的是为了在同一个主机上运行多个系统或应用,从而提高系统资源的利用率,并带来降低成本、方便管理和容错容灾等好处。从实现形式来分,虚拟化技术可分为基于硬件的虚拟化和基于软件的虚拟化。
硬件虚拟化
硬件虚拟化就是硬件物理平台本身提供了对特殊指令的截获和重定向的支持。支持虚拟化的硬件,也是一些基于硬件实现软件虚拟化技术的关键。在基于硬件实现软件虚拟化的技术中,在硬件是实现虚拟化的基础,硬件(主要是CPU)会为虚拟化软件提供支持,从而实现硬件资源的虚拟化。
支持虚拟化的硬件有:
软件虚拟化
软件虚拟化就是利用软件技术,在现有的物理平台上实现对物理平台访问的截获和模拟。在软件虚拟化技术中,有些技术不需要硬件支持,如:QEMU;而有些软件虚拟化技术,则依赖硬件支持,如:VMware、KVM。
对软件虚拟化进行细分,又可以分为以下几类:
Docker容器技术就是属于操作系统层虚拟化的范畴。
什么是Docker
Docker是一个开源的应用容器引擎,它让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到安装了任何 Linux 发行版本的机器上。Docker基于LXC来实现类似VM的功能,可以在更有限的硬件资源上提供给用户更多的计算资源。与同VM等虚拟化的方式不同,LXC不属于全虚拟化、部分虚拟化或半虚拟化中的任何一个分类,而是一个操作系统级虚拟化。
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也并不是万能的,其设计目的也并不是要成为KVM等的替代品。不可避免的,Docker也会有一些局限性,如: