深入剖析虚拟化技术概念和应用场景

虚拟化,一是项技术~~,是一种资源解决方案。

虚拟化技术是将物理资源转变为逻辑上可以管理的资源,以打破物理结构之间的壁垒,使计算元件运行在虚拟的基础上,而不是真实的物理资源上。

通过虚拟化技术,可以将物理资源转变为逻辑资源(虚拟机),应用程序服务运行在虚拟资源上,而不是真实的物理机上。

VMware workstation 属于个人版虚拟化软件,称为虚拟机软件。将物理资源转变为多台虚拟机,应用软件运行在虚拟机中,各个虚拟机共享物理机的资源 (CPU,硬盘,网卡,内存,IO设备...)

虚拟化技术的落地,底层就必须有物理机支撑!

单纯的物理机器是不能直接虚拟化的,都需要虚拟化软件来实现。目前主流的虚拟化软件有:KVM,XEN,ESXI,HP-V,Docker,Virtual BOX等

虚拟化技术的应用场景示例

企业需求:部署一百套Nginx WEB服务,要求对外端口为80,要求独立服务器部署

  • 传统方案:采购一百台低配硬件物理机,每台物理机部署一套Nginx WEB服务

  • 虚拟化方案:采购10台高配硬件物理机,每台物理机虚拟10台虚拟机,每台虚拟机独立部署一套Nginx WEB服务

很明显,第二种方案,从成本、部署难度、维护等方面,第二种都是比第一种好的。

所以,虚拟化的意义:对于硬件设备资源的最大化利用,降低企业各种费用成本,简化后期资源部署和维护,动态满足企业需求,基于虚拟化资源来代替待淘汰的物理资源

云计算技术概念和应用场景

深入剖析Docker虚拟化概念和底层原理

Docker简介

Docker是虚拟化技术的一种,也是目前使用比较多的一种。Go语言开发引擎

Docker利用“集装箱”(容器)的原理,将系统、开发软件包、依赖环境等统一打包到容器中,将整个容器部署至其他的平台或者服务器上。

容器技术:一种虚拟化的方案,和传统的虚拟机(通过中间层"guerst OS"运行服务)不同,Docker直接运行在操作系统之上。因此容器虚拟化也被称之为操作系统虚拟化。Docker容器依赖于Linux内核特性,Namespace和Cgroups,所以只能运行在Linux之上。

官方定义:Docker是一个开元的应用容器引擎,让开发者可以打包他们的应用以及依赖到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化

容器是完全使用沙箱机制,相互之间没有任何接口(iphone的app也是这样),几乎没有性能开销;可以很容易在机器和数据中心运行。最重要的是,他们不依赖任何语言,框架甚至系统


Docker虚拟化技术比传统虚拟化技术的优点

假设基于传统虚拟化和Docker虚拟化部署Nginx WEB服务,两种方案部署如下:

  • 传统虚拟化:硬件服务器-HostOS-VMM-GuestOS-Nginx WEB服务

  • Docker虚拟化:硬件服务器-HostOS-VMM-Nginx WEB服务

传统的虚拟化,不能直接启动Nginx WEB,Docker可以直接启动Nginx WEB


如果是传统虚拟化技术,原本只需要很少资源的服务应用,就需要很大的“guestOS“资源来支撑真正的服务

Docker目标

  • 提供简单轻量级的建模方式(docker的启动是毫秒级的)

  • 职责的逻辑分离:开发人员只需要关注容器中运行的程序,运维人员只需要关注对容器的管理。Docker开发提高了开发程序和部署容器的一致性

  • 快速高效的开发声明周期:缩短代码从开发、测试到部署上线的生命周期

  • 鼓励使用面向服务的架构:docker推荐单个容器只运行一个应用程序/进程,这样就形成了一个分布式的应用程序模型,避免服务之间的互相影响。实现 高内聚 低耦合

Docker的使用场景

  1. 使用Docker容器开发、测试、部署服务。

    docker本身是轻量级的,所以本地开发人员可以构建、运行并分享docker容器,容器可以在开发环境中创建,然后提交到测试,在到生产环境。

  2. 创建隔离的运行环境

    在很多企业应用中,同一服务的不同版本可能服务于不同的用户,使用Docker很容易创建不同的环境来运行不同版本的服务

  3. 搭建测试环境

    有于Docker的轻量化,所以开发者很容易在本地搭建测试环境,用来测试程序在不同系统下的兼容性,甚至集群式的测试环境。

  4. 构建多用户的平台服务(PaaS)基础设施

  5. 即同软件即服务(SaaS)应用程序

  6. 高性能、超大规模的宿主机部署

Docker的基本组成

Docker基本组成:

  1. Docker Client 客户端

  2. Docker Daemon 守护进程

  3. Docker Image 镜像

  4. Docker Container 容器

  5. Docker Registry 仓库


  • Docker客户端/守护进程:

    docker是C/S架构的程序,docker客户端向服务端发送请求,守护进程处理完所有的工作,并返回处理结果。客户端对服务端的访问,既可以是本地,也可以通过远程

  • Docker镜像:

    docker镜像是docker容器的基石。跟ISO镜像类似,静止的模版,用于Docker容器的底层基础文件

    docker镜像是一个层叠的只读文件系统(联合文件系统):

    最低端是一个引导文件系统 bootfs

    第二层是rootfs,位于引导文件系统之上,可以是一种或多种操作系统(redhat/ubuntu等),在docker中,rootfs永远是只读方式,并且利用联合加载技术(union mount),加载更多的只读文件系统


  • Docker容器:

    docker容器通过docker镜像启动,是Docker镜像运行的实体,是活动的。

    当一个容器启动时,会再docker镜像的最顶层加载一个读写文件系统,docker中运行的程序就是在该层进行运行的,第一次启动是,初始化的读写层是空的,所有的写操作都应用在该层(从只读的底层复制到读写层(写时复制技术))

    Docker镜像和容器的关系,跟程序和进程的关系类似

  • Docker仓库:

    存放Docker镜像的地方,一般分为公共仓库和私有仓库,docker公司提供了一个自己的仓库"Docker Hub"

Docker的相关技术

Docker依赖Linux的内核特性有:Cgroup(控制组)和Namespace(命名空间)

  • Namespace

命名空间是一种封装的概念,在操作系统层面上,提供了系统资源的隔离,系统资源包括{进程、文件系统、网络等}。Linux实现命名空间的目的:为了实现轻量级虚拟化服务,在不同命名空间下的进程,彼此毫无关系。

docker使用了五种命名空间:

  1. PID 进程隔离

  2. NET 管理网络接口

  3. IPC 管理进程间通信

  4. MNT 管理挂载点,文件系统间的隔离

  5. UTS 管理内核和版本标示的隔离

  • Cgroup(Control Groups)

Cgroup对隔离的资源进行管理,是一种用来限制、记录,隔离进程组资源的机制。就是为了容器技术而生的。

Cgroup对资源的管理方式:

  1. 资源限制 如:对内存的分配上限

  2. 优先级设定 如:某个进程优先使用cpu时间片

  3. 资源计量 计算进程组使用了多少系统资源,尤其时在记费系统中

  4. 资源控制 将进程组挂起或恢复

Docker容器的能力:

  • 文件系统隔离:每个容器都有自己的root文件系统

  • 进程隔离:每个容器都运行在自己的进程环境中,互相不影响

  • 网络隔离:容器间的虚拟网络接口和IP地址都是分开的

  • 资源隔离和分组:使用Cgroups将CPU和内存之类的物理资源独立的分配给每个Docker容器

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐