基于高度虚拟化所诞生的容器技术,现在已经走向大规模应用。那么容器、虚拟机、Docker、Openstack、Kubernetes 之间又有什么关系,对如今的选择有什么影响呢?html
上世纪 60 年代,计算机是一种稀有商品。即使只租不买,每个月也要花一千多美圆,这使许多企业都没法承受。并且早期的计算机一般专用于某一项特定的任务,须要同时在许多用户之间共享计算机资源,而且可能花费几天甚至几周的时间才能运行完毕。俗话说:“需求是发明之母”,有了需求人们就会去发明创造来知足需求。计算机的历史也不例外,过于昂贵的费用和长时间的共享需求刺激了虚拟化的逐渐发展。服务器
基于需求刺激,容器技术应运而生。容器的发展从 Chroot,FreeBSD jails,OpenVZ,LXC,到现在的 Docker、Rocket 真正走向了大规模应用。微信
相比普通服务器,容器是一种更轻量级,更灵活的虚拟化处理方式,它将一个应用程序所需的一切打包在一块儿。通常状况下开发人员在编写代码时,他们是在本身本地的开发环境中工做;当他们准备将代码移至生产环境时,总会发生一些意想不到的事情。缘由多种多样:不一样的操做系统,不一样的依赖项,不一样的库。网络
而容器解决了可移植性这一关键问题,它能够将代码与运行它的环境分开。开发人员能够将应用程序(包括正确运行所需的全部库)打包到一个小的容器镜像中。该镜像能够在其余任何计算机上运行。架构
虽然 Docker 常常会和“容器(Container)”一词相提并论,可是 Docker 自己并非容器。从字面意思能够解读,“Container”原译为“集装箱”,而“Docker”被译为“码头工人”。框架
Docker 是一个开源的应用容器引擎,是建立容器的工具。让开发者能够打包他们的应用和依赖包到一个可移植的容器中,而后发布到任何流行的 Linux 机器或 Windows 机器上。less
2013 年 PyCon 大会以后,Docker 迅速成为社区、客户和更普遍行业的实际标准与基石。Docker 的强大之处在于它经过可移植的形式和易于使用的工具,在应用程序和基础设施之间创造了独立性,使得容器技术大众化,并使容器技术成为主流。运维
Docker 如此大火,可是咱们须要知道,Docker 并非惟一的,也不是第一个出现的容器平台。其余的框架,例如 OpenVZ 和 LXC(Linux Container),于 2000 年中期就已经开始使用。而 FreeBSD jails,则能够追溯到更远的年代。Docker 是在 2013 年发布的,与当今大多数主流的容器技术相比,它是很是年轻的。分布式
虽然 Docker 不是最成熟的,却引发了极大的关注。这是由于 Docker 是一个扩展的 Linux 容器(LXC),是一种独特轻巧、以应用为中心的虚拟化工具。它大大下降了企业开销,也更容易让企业在服务器上部署软件。且 Docker 容许系统管理员和开发人员在容器中构建任何应用程序,节省资源。模块化
除此以外,Docker 发展迅猛的缘由还有:
容器和虚拟机这两种技术常常被互相比较。所谓虚拟机(Virtual Machine)是指经过软件模拟的具备完整硬件系统功能的、运行在一个彻底隔离环境中的完整计算机系统。
Docker 可能被认为是当前容器技术的表明,而做为虚拟机技术的表明,OpenStack 也被大众所周知。
OpenStack 是一个开源的云计算管理平台项目,是一系列软件开源项目的组合。它不是一个软件,而是一个云平台管理的项目。这个项目由几个主要的组件组合起来完成一些具体的工做。其中主要包括:
许多人都会经常使用 Docker 和传统虚拟机来作比较,而且常常凸显出 Docker 的优点。其实这和 OpenStack 没有直接关系。曾经许多的性能测试都会将 Docker 与 KVM 进行对比,可是后来发现这些测试是经过 OpenStack 运行的,这代表两种技术其实能够很好地协同工做。
那么若是使用了 Docker,还能使用 OpenStack 吗?
答案是能够的,Docker 以最简单的形式提供了一个容器,用于管理共享基础架构上的应用程序,同时又使它们彼此隔离。而虚拟机则经过建立一个完整的操做系统来完成相似的工做。OpenStack 的官方文档(https://wiki.openstack.org/wi...)特别提供了部署 Docker 的解决方案,而且单独指出:“容器并不是旨在替代虚拟机,它们是互补的,由于它们更适合特定的用例。”
若是第一次看到 Kubernetes 这个词,可能会比较好奇它为什么简写为 K8S。实际上是 k 与 s 中间正好隔了 8 个字母,K8S 为一种偷懒地写法。Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。
做为容器编排的解决方案,随着 Kubernetes 愈来愈流行,“Kubernetes” 与 “Docker” 这两个词也常常会相提并论。
目前,Kubernetes 能够说是市场领导者,及编排容器和部署分布式应用程序的标准化方法。Kubernetes 能够在公共云服务或本地运行,具备高度模块化,开放源代码,而且拥有一个活跃的社区。许多云厂商也都已经提供了 Kubernetes 做为服务。
固然了,Docker 和 Kubernetes 并非竞争对手。Docker 是一个容器化平台,而 Kubernetes 是 Docker 等容器平台的协调器。它旨在为容器提供高效地管理,监视应用程序的运行情况,使应用程序提供不间断地服务,而不须要运维人员去进行复杂的手工配置和处理。
云计算技术发展至今,从最开始的硬件虚拟化、IaaS、OpenStack、PaaS、容器到现在的 Serverless,云计算已经愈来愈接近应用逻辑。容器实现了应用的分装,方便了应用在不一样环境间的迁移,轻量级的特性又使它可以消耗更少的资源而带来更大的便利。固然,技术更新迭代迅速,咱们只有不断学习才能跟上行业的步伐,加油吧,小伙伴们!