云计算相关技术简介(四)-docker和虚拟机
上一篇文章中介绍过openstack中虚拟机镜像服务模块glance,就说到虚拟机镜像和docker镜像,当时没有具体展开,这篇文章将较为详细介绍虚拟机技术和docker容器相关技术之间的比较。不正确的地方欢迎批评指正。
首先虚拟机的概念是相对于物理机器而言的,虚拟机是依赖于物理计算机而设计实现的逻辑计算机,根据物理计算机的特性,有基于单机的虚拟机,如基于wmware虚拟机管理软件,在单台计算机上构建多个虚拟机器,从而可以方便模拟不同计算节点,如搭建大数据的模拟环境。也有基于多个甚至很多个物理机器之上构建的虚拟机管理系统,这类的虚拟机管理软件有openstack和VMware vSphere等,甚至一些大的公司会构建自己的虚拟机软件系统管理平台(可以参考引文中的介绍),一般这样基于分布式环境的虚拟机调度和管理系统成为云计算平台。
docker容器技术,容器是利用namespace将文件系统、进程、网络、设备等资源进行隔离,利用cgroup对权限、cpu资源进行限制,最终让容器之间互不影响,容器无法影响宿主机。docker容器之间属于进程之间隔离,而虚拟机之间属于系统之间的隔离。
虚拟机的镜像文件实实在在就是操作系统环境的persistent storage,docker镜像是一个“应用程序和它运行依赖环境”的封装。当镜像运行起来后即是docker容器。运行时的容器本质是操作系统下的一个进程,这些进程共享同一个宿主机OS的内核。与传统VM相比,docker是一种操作系统虚拟化技术,并不需要在镜像内安装GuestOS。docker在共享宿主机内核的基础上包装内核提供的一系列API,这些API中最重要的就是namespace和cgroup。通过namespace实现隔离,通过cgroup实现资源限制。一般管理docker镜像的服务称为docker hub,现有的也有多个开放的docker镜像源。
一般虚拟机是云计算系统中IAAS平台的关键技术,是建立在cpu硬件虚拟化和操作系统级的软件虚拟化(如KVM等)的基础之上的。而docker容器可以理解为在host操作系统之上运行的一个特殊的进程。而docker容器以及基于此之上的编排技术k8s等则是相关的PAAS平台的所依赖的技术,大数据平台如hadoop可以基于虚拟机之上直接部署,也可以基于容器环境部署。具体可以参考后两个引文链接。docker容器技术的出现,大大方便了开发部署的效率,开发环境和部署环境可以快速复制分发,不需要每个开发人员为了开发库和开发机器环境的兼容问题去浪费时间和精力,有种一劳永逸的感觉。关于docker容器相关的技术细节,如dockerfile的编写,一些CLI命令的使用如docker容器的启动等等,会在后续的相关课程中进行介绍。