Docker不是唯一的容器平台,也不是第一个推出的。其他框架,如OpenVZ和LXC,从20世纪20年代中期诞生。而其他类似容器的技术,如FreeBSD更进一步。而Docker在2013年发布,与目前的大多数主流技术相比,是一个非常年轻的技术。
但是,Docker却逐渐成为当前最受欢迎的云开源项目
今天的Docker公司脱胎于一个平台即服务的初创公司dotCloud。dotCloud团队发现,在许多应用程序和客户之间管理依赖关系和二进制文件需要做大量的工作。因此,他们将Linux cgroups和namespaces的一些功能组合成一个简单易用的包,这样应用程序就可以在任何基础设施上持续运行。这个包就是Docker镜像,它提供将应用程序和库封装在单个包中(Docker镜像),因此应用程序可以跨多环境一致部署; 提供类似于git的语义,例如“dockerpush”,“docker commit”,这样可以让应用程序开发人员可以轻松地采用新技术,并将其融入到现有的workflow中。
除此之外,将Docker镜像定义为不可变层,启用不可变的基础设施。提交的更改被存储为一个单独的只读层,这让镜像复用和跟踪更改变得更加容易。另外,层还可以通过传输更新而不是整个镜像来节省磁盘空间和网络流量; 通过使用可以临时存储运行时更改的可写层来实例化不可变映像,从而方便快速部署和扩展应用程序的多个实例。
所以相比之下,Docker容器是创建密集环境的理想选择,在这种环境中,主机服务器的资源被充分利用,但不会被过度使用。这是因为Docker容器不需要通过在容器内创建客户机操作系统来复制主机操作系统的功能。 此外,Docker不会强制您为容器分配给定数量的资源(虽然您可以为单个容器设置资源配额)。这意味着Docker容器能够更高效和动态地使用来自主机的资源。当放置在一个容器或服务上的需求减少时,它所消耗的资源将被释放以供其他服务使用。
因此,这让Docker拥有了让人信服的优点:
简化配置:Docker倡导的主要使用场合是简化配置。虚拟机的一大优点在于,能够在你的基础设施上运行任何平台,虚拟机有自己的配置。Docker提供了同样这项功能,却没有虚拟机的开销。它让你可以将环境和配置放入到代码中加以部署。同样的Docker配置还可以用在各种环境中。这将基础设施需求与应用程序环境分离开来。
代码流水线管理:从开发环境直到生产环境,Docker为应用程序提供了始终一致的环境,因而简化了代码开发和部署流水线。 Docker映像不可改变的特性以及易于构建,可以帮助你实现从开发环境直到生产环境,应用程序的运行环境都不发生变化。
服务器合并:就像使用虚拟机来合并多个应用程序一样,Docker的应用程序隔离功能可以合并多台服务器,以节省成本。然而,由于没有多个操作系统的内存占用空间,又能够在诸实例之间共享闲置未用的内存,Docker提供的服务器合并效果比借助虚拟机所能实现的好得多。
调试功能:Docker提供了未必是容器所特有的许多工具,但是它们与容器概念很搭。它们还提供了极其有用的功能。这包括:能够检查容器和容器版本,另外还能让两个容器有所不同。这在修复应用程序时大有用处。
快速部署:在虚拟机出现之前,配置新的硬件资源需要数天。虚拟化将这个时间缩短到了几分钟。Docker更是缩短到了短短几秒钟,因为它只需要为这个过程创建容器,并不启动操作系统。正是这项支持性技术,促使谷歌和Facebook使用容器。
领取专属 10元无门槛券
私享最新 技术干货