|
& Q( v) b2 h3 O* }( V. L$ o
众所周知,人们为了提高系统及硬件资源的利用率而引入了虚拟化技术。虚拟化是一种资源管理技术,它可以各种实体资源抽像后再分隔,从而打破实体结构的限制,最大程度的提高资源的利用率。从实现形式来分,虚拟化技术分为硬件虚拟化技术和软件虚拟化技术。而Docker属于软件虚拟化技术中的操作系统层虚拟化技术,它是基于LXC实现的一个应用容器引擎,Docker让开发者可以打包他们的应用及依赖环境到一个可移植的容器中,然后可以将这个容器快速部署开发、测试或生产环境中。本篇文章将具体对虚拟化技术与Docker进行分析。
& Z6 T b$ W: u2 ]( H 一.虚拟化技术- I) |. R6 G+ u3 P) N9 ~" K
1. 什么是虚拟化
3 q4 c: j2 o# y' _" e: }0 J 在计算机技术中,虚拟化(Virtualization)是一种资源管理技术。它是将计算机的各种实体资源,如:服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以用更好的方式来利用这些资源。 & z3 q/ \" ]; e; @% \
虚拟化的目的是为了在同一个主机上运行多个系统或应用,从而提高系统资源的利用率,并带来降低成本、方便管理和容错容灾等好处。 , Y. y, M9 X0 E. h) R
2.虚拟化技术分类
- \! r4 {" V2 p% _& C 从实现形式来分,虚拟化技术可分为基于硬件的虚拟化和基于软件的虚拟化。 5 Y0 q% p6 y" F' _, `' q
硬件虚拟化
$ l: \0 B% [1 T* Y 硬件虚拟化就是硬件物理平台本身提供了对特殊指令的截获和重定向的支持。支持虚拟化的硬件,也是一些基于硬件实现软件虚拟化技术的关键。在基于硬件实现软件虚拟化的技术中,在硬件是实现虚拟化的基础,硬件(主要是CPU)会为虚拟化软件提供支持,从而实现硬件资源的虚拟化。 0 E6 v( x, v3 M/ y
支持虚拟化的硬件有: + E2 q$ E+ O0 V
Intel-VT-(Intel Virtualization Technology),Intel公司为解决纯软件虚拟化解决方案在可靠性、安全性和性能上的不足而引进的技术。它可以让一个CPU工作起来像多个CPU在并行运行,从而使得在一部电脑内同时运行多个操作系统成为可能 . \6 ?: p# E# }' W+ V9 a
AMD-V-(AMD Virtualization),是AMD公司的虚拟化技术。它是对x86处理器系统架构的一组硬件扩展和硬件辅助虚拟化技术,可以简化纯软件的虚拟化解决方案,改进VMM(虚拟机监视器)的设计,更充分地利用硬件资源,提高服务器和数据中心的虚拟化效率 / U/ o, p4 z3 B, T T; I
软件虚拟化 1 `' a& _ ? ~4 n% _9 |
软件虚拟化就是利用软件技术,在现有的物理平台上实现对物理平台访问的截获和模拟。在软件虚拟化技术中,有些技术不需要硬件支持,如:QEMU;而有些软件虚拟化技术,则依赖硬件支持,如:VMware、KVM。 , E+ M6 S/ ?" w6 m
对软件虚拟化进行细分,又可以分为以下几类:
$ M- W7 ~7 @0 g3 v. ~& o, q 完全虚拟化:(Full Virtualization)虚拟机模拟完整的底层硬件环境和特权指令的执行过程,使客户机操作系统可以独立运行。支持完全虚拟化的软件有:Parallels Workstation、VirtualBox、Virtual Iron、Oracle VM、Virtual PC、Virtual Server、Hyper-V、VMware Workstation、QEMU等 r" R4 S/ R2 {2 E% ^" ^
硬件辅助虚拟化:(Hardware-assisted Virtualization)是指通过硬件辅助支持模拟运行环境,使客户机操作系统可以独立运行,实现完全虚拟化的功能。支持硬件辅助虚拟化的软件有:Linux KVM、VMware Workstation、VMware Fusion、Virtual PC、Xen、VirtualBox、Parallels Workstation等 $ B3 Q$ R2 w, f4 ~; I% X4 `
部分虚拟化:(Partial Virtualization)只针对部分硬件资源进行虚拟化,虚拟机模拟部分底层硬件环境,特别是地址空间。这样的环境支持资源共享和线程独立,但是不允许建立独立的客户机操作系统。 8 k8 \* V3 o1 B, L- o2 t& h( `# H
平行虚拟化:(Para-Virtualization)虚拟机不需要模拟硬件,而是将部分硬件接口以软件的形式提供给客户机操作系统。如:早期的Xen。 0 a; s8 g9 ]. B+ h# {0 e" o, |* _5 ^7 ~
操作系统层虚拟化:(OS-level virtualization)这种技术将操作系统内核虚拟化,可以允许使用者空间软件实例被分割成几个独立的单元,在内核中运行,而不是只有一个单一实例运行。这个软件实例,也被称为是一个容器(containers)、虚拟引擎(Virtualization engine)、虚拟专用服务器(virtual private servers)。每个容器的进程是独立的,对于使用者来说,就像是在使用自己的专用服务器。
4 A, W0 ~" `+ P! R# Y% F0 |4 S+ b F Docker容器技术就是属于操作系统层虚拟化的范畴。 5 V" ^) T5 q/ L) A
二、什么是Docker! ^* m) {6 M) @# I. |) p
Docker是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。
! j) N8 i4 K/ H. f' P Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。 - D+ F) a, G- W+ D! K* E
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。 $ N+ b( W/ w, p# ^# l" k4 @4 l* E: z
在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。 9 ^9 F% d' P6 ^# _. [2 d5 I. D
三.Docker虚拟化特点
/ Q8 L ^1 T/ B) L4 r 跟传统VM比较具有以下优点:
. E6 Y# ?5 C0 S 操作启动快: # n. M0 f4 z- Q) K+ N" Z' ]& v, H
运行时的性能可以获取极大提升,管理操作(启动,停止,开始,重启,等等)都是以秒或毫秒为单位的。
7 ^7 y% P2 Q0 ]( u9 M0 I0 u0 o 轻量级虚拟化: 7 v/ I4 U) z0 ?; Z, Y% O |
你会拥有足够的“操作系统”,仅需添加或减小镜像即可。在一台服务器上可以布署100~1000个Containers容器。但是传统虚拟化,你虚拟10-20个虚拟机就不错了。
4 j1 G, K. r3 N3 s3 Q j0 | 开源免费:
) Z0 |% v: {0 v+ _0 P, l( z% ] 开源的,免费的,低成本的。由现代Linux内核支持并驱动。注* 轻量的Container必定可以在一个物理机上开启更多“容器”,注定比VMs要便宜。 # r- _, k# u+ ?: W1 c B
前景及云支持: * Y$ D5 H$ ~. F
正在越来越受欢迎,包括各大主流公司都在推动docker的快速发展,性能有很大的优势 3 L& S! _4 x D: \+ t% i; C
跟传统VM比较具有以下缺点: $ c# m7 {& `8 h9 c- m
目前知道的人比较少; ! s# V1 W5 F( X! |2 w6 i. w
相关的中文技术资料欠缺;
0 v- X2 f# v* T& Q& Y2 e 四.Docker虚拟化入门简介5 `5 y r' E: C! ~1 D1 i K/ m
1)Docker技术类似于集装箱。Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流程的Linux机器上,也可以实现虚拟化。 8 n( q; C9 V& q& y# ?
2)容器是完全使用沙箱机智,相互之间不会有任何接口。几乎没有性能开销,可以很容易的在机器和数据中心运行。最重要的是,他们不依赖于任何语言、框架或包括系统。
+ C4 o& q% t2 w 3)Docker项目的目标是实现轻量级的操作系统虚拟化解决方案。Docker的基础是Linux容器(LXC)等技术。在LXC的基础上,Docker进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简单,用户操作Docker的容器就像操作一个快速轻量级的虚拟机。 5 v3 B5 U2 |2 `& Z3 W& w, O1 Y, @# H
4)Docker和传统虚拟化(KVM、XEN等)方式不同之处,Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件的基础上,虚拟出自己的系统,再在系统上部署相关的APP应用。 ' ?. v9 h* U9 O! b; n/ g7 s% {
下图为传统虚拟化方案——需要部署Nginx,先部署OS系统,基于OS系统再部署Nginx
3 u6 t' |* M5 n1 \$ K
. x6 q/ L5 U# u: S) [1 a 如下为Docker虚拟化方案——需要部署Nginx,无需部署OS系统,基于Docker引擎直接部署Nginx;
& G5 {# ]/ f- ^7 k 6 ^& t, O9 n: `+ z3 J
Docker虚拟化有三个概念需要理解,分别是镜像、容器、仓库。
: }, E8 [7 `; V$ |: W) Y 镜像:Docker的镜像其实就是模板,跟我们常见的IOS镜像类似,是一个模板。 2 G q! n2 V9 N e; G! g/ w
容器:使用镜像常见的应用或者系统,我们称之为一个容器。 8 _. u4 p1 U7 p1 S+ r# I
仓库:仓库是存放镜像的地方,分为公开仓库(Public)和私有仓库(Private)两种形式。
& C3 G" }5 n6 r
4 x3 D/ H+ d! z6 b$ A: e1 `
8 e$ C: j, Y. U2 z" d; C- F9 A
2 A$ n7 }, J" N7 R |