Docker是一款以容器虚拟化技术为基础的软件。
关键名词:虚拟化,容器。yXX快充网络
关键作用:资源隔离,资源管理。yXX快充网络
一、虚拟化技术
虚拟化技术是一种将计算机物理资源进行抽象、转换为虚拟的计算机资源提供给程序使用的技术。
计算机资源:CPU(运算控制资源)、内存硬盘(数据存储资源)、网卡(网络传输资源)。yXX快充网络
在1960年代,IBM就用虚拟化来描述一套能够抽象硬件资源的实验性系统。当时没有统一标准,需要适配各种代码、平台,虚拟化技术用来适配不同平台的物理机器;随着技术发展,虚拟化可以更好的应用在计算机资源管理领域。yXX快充网络
通过虚拟化技术来管理计算机资源的方式,不但对计算机资源的控制变得更加灵活,也大幅提高了计算机资源的使用率。yXX快充网络
例如,有一台运行nginx的机器,由于nginx对系统资源的消耗并不高,95%以上的系统资源处于闲置状态。通过虚拟化技术运行其他进程,充分利用闲置资源。不再需要为其他进程单独部署机器从而节约成本。yXX快充网络
操作系统能够运行多个进程,但是前提是进程不产生冲突,比如端口、文件、库版本等;通过虚拟化技术,可以达到资源隔离,将不同的进程隔离在不同的虚拟环境。yXX快充网络
二、虚拟化分类
A、分类I:硬件虚拟化 && 软件虚拟化yXX快充网络
硬件虚拟化,物理硬件本身提供虚拟化的支持。例如,CPU能够自身模拟裂变,让程序或者操作系统认为存在多个CPU,进而能够同时运行多个程序或者操作系统,以及VT-X、EPT等。yXX快充网络
软件虚拟化,通过软件的方式来实现虚拟化中关键的指令转换部分。例如,各种编程语言的虚拟机环境,JVM。yXX快充网络
B、分类II:主机级虚拟化(虚拟整个硬件平台) && 容器级虚拟化yXX快充网络
拿到安装设置好的虚拟机就类似裸物理机一样使用操作系统,可以和宿主机操作系统不同。yXX快充网络
主机级TYPE-I:层级关系-宿主机硬件-->Hypervisor虚拟机管理器-->虚拟机操作系统-->虚拟机应用软件;代表-xen,vmware esx/esxi。yXX快充网络
主机级TYPE-II:层级关系-宿主机硬件-->宿主机操作系统-->VMManager-->虚拟机操作系统-->虚拟机应用软件;代表-vmware workstation,vbox。yXX快充网络
C、其他分类(分类太多,概念也有重叠,就不一一列举):yXX快充网络
- 平台虚拟化:在操作系统和硬件平台间搭建虚拟化设施,使得整个操作系统都运行在虚拟后的环境中。
- 应用程序虚拟化:在操作系统和应用程序间实现虚拟化,只让应用程序运行在虚拟化环境中。
- 内存虚拟化:将不相邻的内存区,甚至硬盘空间虚拟成统一连续的内存地址,即我们常说的虚拟内存。
- 桌面虚拟化:让本地桌面程序利用远程计算机资源运行,达到控制远程计算机的目的。
- ....
三、虚拟机
虚拟机监视器 ( Virtual Machine Monitor )用来隔离操作系统与硬件或者应用程序和操作系统,以此达到虚拟化的目的,虚拟机监视器常常被称为Hypervisor。yXX快充网络
常见的Hypervisor,VMware Workstation、Xen,JVM、HHVM等。yXX快充网络
四、容器技术
容器技术是一种全新意义上的虚拟化技术,按分类或者实现方式分类,属于操作系统虚拟化的范畴,也就是在由操作系统提供虚拟化的支持,操作系统提供接口,能够让应用程序间可以互不干扰的独立运行,并且能够对其在运行中所使用的资源进行管理。由于应用程序的运行被隔离在了一个独立的运行环境之中,这个独立的运行环境就像一个容器,包含住应用程序。yXX快充网络
不过目前来说容器技术还没有一个严格的定义,实现方式也各有不同。yXX快充网络
五、虚拟机 & 容器
由于没有了虚拟操作系统和虚拟机监视器这两个层次,大幅减少了应用程序运行带来的额外消耗。更准确的来说,所有在容器中的应用程序其实完全运行在了宿主操作系统中,与其他真实运行在其中的应用程序在指令运行层面是完全没有任何区别的。因为无需指令转换,所以运行效率高,但应用程序必须遵循硬件平台的指令规则。yXX快充网络
容器技术在性能上超越虚拟机等其他实现,并且运行在容器中的应用程序,在运行效率上与真实运行在物理平台上的应用程序不相上下。yXX快充网络
A、容器的发展yXX快充网络
容器概念始于1979年提出的UNIX chroot,它是一个UNIX操作系统的系统调用,将一个进程及其子进程的根目录改变到文件系统中的一个新位置,让这些进程只能访问到这个新的位置,从而达到了进程隔离的目的。yXX快充网络
2000年的时候FreeBSD开发了一个类似于chroot的容器技术Jails,是最早期,也是功能最多的容器技术。Jails英译过来是监狱的意思,这个监狱(用沙盒更为准确)包含了文件系统、用户、网络、进程等的隔离。yXX快充网络
2007年Google实现了Control Groups,并加入到Linux内核中,为后期容器的资源配额提供了技术保障。yXX快充网络
2008年基于CGroups和Linux Namespace推出了第一个最为完善的Linux容器LXC。yXX快充网络
B、容器RuntimeyXX快充网络
Runtime是容器真正运行的地方。Runtime需要跟操作系统内核紧密协作,为容器提供运行环境。yXX快充网络
lxc、runC和rkt是目前主流的三种容器Runtime。yXX快充网络
- lxc(Linux Container):Linux上老牌的容器Runtime,Docker最初也是用lxc作为Runtime。
- runC:Docker自己开发的容器Runtime,符合OCI规范,也是现在Docker的默认Runtime。(Libcontainer-->runC)
- rkt:CoreOS开发的容器Runtime,符合OCI规范,因而能够运行Docker的容器。