近几年来,容器技术在服务器领域越来越火,docker这个名词也越来越多地出现在IT技术的用词中,笔者也随主流搭建了一次docker,在此将笔者对docker的理解贴出以便给新手一个参考。当然,由于是个人理解,其中一定不乏理解错误的部分,对此请大家海涵。后续的文章全部由我——穿越蓝天(青空を越えて,animefans_xj)进行书写,对于涉及参考他人文献的部分会在本文的头部予以指明。
若无特殊说明,后续文章中的“实例”一词均指代该词所在段落中我们对其进行操作的镜像或容器所运行起来的执行体。后续文章中,默认的宿主机环境伪Ubuntu 14.04.4 LTS,平台为AMD64(X86_64)。
修订和依据
章节 | 借鉴 |
(14)-Flannel组网 | http://www.dataguru.cn/thread-581573-1-1.html http://blog.csdn.net/wangtaoking1/article/details/49281131 |
目前国内有不少尖端IT企业在其生产环境中使用了docker,其中又有很多公司将其作为虚拟机来加以利用。那么docker究竟是什么东西?笔者的理解是,docker作为一项容器技术,它可以利用主机的处理资源及操作系统的内核创建一个虚拟主机并使其与宿主机共享处理资源,在该虚拟主机中可通过保存与主机操作系统的文件系统的差异来实现虚拟主机相对宿主机的客制化(通过保存差异的方式使其对文件系统做出的变更不会对宿主机造成影响,可以将其理解为将虚拟主机相对宿主机的变更保存为一个补丁,每次启动虚拟主机的时候在虚拟主机内部应用这个补丁),并可使其通过终端或网络实现交互。容器技术与虚拟化的区别在于,虚拟化取得系统一定的资源,通过将其模拟为相同类型或者不同类型的硬件,虚拟出一台计算机,该计算机有自己的虚拟CPU,虚拟总线、虚拟内存、虚拟网络和多媒体硬件等等。在该虚拟计算机中运行的操作系统若不通过特定的识别方式去识别,将会将这个运行环境认定为一台实际存在的实体主机。每个虚机计算机间虽然共享宿主机的计算资源但彼此隔离。由于是模拟的一整套硬件,因此可以像操作实体计算机一般操作,也意味着可以在同一台宿主机上安装多个不同内核的操作系统,甚至可以虚拟出不同架构的硬件从而实现运行不同架构硬件专属的操作系统,如QEMU可在x86平台上模拟出一台基于ARM体系的主机并运行为ARM定制的操作系统。而docker不行,docker不对硬件进行虚拟,多个虚拟主机的计算均交由同一个内核完成——即宿主机的操作系统内核,因而多个虚拟主机间的隔离程度有限,也正因此,docker无法运行不同内核的操作系统,如在linux宿主机上运行Windows,更不能实现诸如X86平台运行ARM操作系统这样的功能。不过由于其相对虚拟化技术更简单,因此可以更好地榨取系统资源,并且通过差异存储使得部署虚拟主机时要传输的数据更少,且计算直接利用宿主机内核省去了系统启动的过程使其部署更快。
撇开虚拟机不谈,docker的方便之处在于可以在docker虚拟主机中肆意妄为而不会影像宿主机,对于一些计算机软件方面的实验,或者短期需要对系统做大幅改动并在不久的将来需要还原回去的场合十分有用,虽然虚拟化技术可以提供快照功能,但是其恢复速度不及docker;另一种场景是,如果一些软件环境部署起来十分复杂,则可通过docker建立虚拟主机,在其中部署完毕后保存差异为镜像,后续部署只需在目标主机上部署docker后载入镜像并启动即可,由于镜像是差异存储的,其大小较虚拟机的硬盘文件小得多,在部署速度上有非常大的优势。
技术 | 部署速度 | 还原速度 | 快照 | 资源利用 | 隔离 | 部署不同操作系统 | 架构模拟 |
虚拟化 | 慢 | 较快 | 随时 | 较好 | 很好 | 支持 | 支持 |
docker | 快 | 很快 | 关闭后 | 很好 | 较好 | 不支持 | 不支持 |
请注意,本站的所有文章均要求阁下在转载时注明出处和原作者,阁下转载本站文章即表示阁下同意并遵守此规程,除非特别注明转载出处,否则文章即为其发布者所著。本站及文章作者保留文章的著作权并有权在阁下违反上述规程时予以追究。
本文链接地址: 初识Docker(1)--序