当产品运行在内部的虚拟化平台中,如openstack,也就是KVM虚拟化,创建虚拟机,但是不断增加的云端应用,增加了对硬件资源的消耗,不断的创建虚拟机,消耗了大量的硬件资源。
那么如何高效的利用硬件资源实现云服务呢
容器技术,Docker最初是DotCloud公司在法国期间发起的一个公司内部项目,后再以Apache2.0授权协议开源,代码在Github上维护,Docker是基于Google公司推出的Golang语言开发的,基于Linux内核的Cgroups、NameSpace,以及UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主机和其他隔离的进程,也被称为容器。
最初的Docker是基于LXC的,后来取出LXC转而使用自行开发的Libcontainer。
Docker被定义为为开源的容器引擎,可以方便的对容器进行管理,例如对镜像打包封装,引入Docker Registry对镜像统一管理。使用Docker就是为了创建容器,管理容器、使用容器、删除容器。
利用Docker可以实现开发,测试、生产环境的部署一致性,极大的减少运维成本。
虚拟机是虚拟出来一套硬件,在其上面运行一个完整的操作系统,例如我们使用的KVM,指定系统镜像,然后装系统,最终可以使用,在该系统上再运行所需的应用程序。
KVM创建虚拟机时,如果指定较少的CPU,内存,硬盘等资源,虚拟机性能较低。
**容器内的应用程序直接运行在宿主机的内核上,容器内没有自己的内核,也没有对硬件进行虚拟,因此容器比虚拟机更为轻便。**容器内的程序,就好比直接运行在宿主机上面的,能够使用宿主机最大的硬件资源,内存、cpu、磁盘。每个进程是互相隔离的,互不影响。
容器不需要硬件虚拟化以及运行一个完整操作系统的额外开销,docker对系统资源的利用率更高,无论是应用执行,文件存储,还是在内存消耗等方面,都比传统虚拟机更高效,因此一个同样配置的主机,可以运行更多数量的容器示例。
传统的虚拟机启动时间较久,docker容器直接运行在宿主机的内核上,无须启动一个完整的操作系统,因此可以达到秒级启动,大大的解决开发、测试、部署的时间。
在企业里,程序从开发环境,到测试环境,到生产环境,难以保证机器环境的一致性,极大的可能出现系统依赖冲突,导致难以部署等bug。
然而利用docker的容器-镜像技术,提供了除内核以外完整的运行环境,确保了应用环境的一致性。
对于开发和运维人员最希望的就是迁移部署别出问题,利用docker可以定制镜像,以达到持续集成,持续交付和部署。
利用Dockerfile来进行镜像构建,实现系统集成测试,运维进行生产环境的部署。
Docker可以在很多平台运行,无论是物理机,虚拟机,云服务器等环境,运行结果都是一致的,可以轻松的将一个平台的应用,迁移到另一个平台,而不用担心环境的变化,导致程序无法运行。
可以把应用程序代码及运行依赖环境打包成镜像,做为交付介质,在各环境部署
可以将镜像(image)启动成为容器(container),并且提供多容器的生命周期进行管理(启、停、删)
container容器之间相互隔离,且每个容器可以设置资源限额
提供轻量级虚拟化功能,容器就是在宿主机中的一个个的虚拟的空间,彼此相互隔离,完全独立、
当Docker容器多的时候,需要工具去编排管理,这个就是k8s。