1、Docker定义
Docker是基于Go语言实现的开源容器项目。诞生于2013年初,由dotCloud公司(后改名为 Docker Inc)发起。
Docker的构想是要实现“Build,Ship and Run Any App,Anywhere”,通过对应用的封装Packaging、分发 Distribution、部署 Deployment、运行 Runtime 生命周期进行管理,以达到应用组件级别的“一次封装,到处运行”。
Docker首次为应用的开发、运行和部署提供了“一站式”的实用解决方案。
Linux容器(Linux Containers,LXC)技术有效地将单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。与虚拟化相比,这样既不需要指令级模拟,也不需要即时编译。容器可以在核心CPU本地运行指令,而不需要任何专门的解释机制。
在LXC之前,早期的容器技术由于各种原因没有被很好的集成到主流的Linux内核中,使用起来并不方便。例如,如果用户想使用OpenVZ技术,需要先手动给操作系统打上特定的内核补丁方可使用,且不同版本并不一致。
LXC借鉴了前人成熟的容器设计理念,并基于一系列新引入的内核特性,实现了更具扩展性的虚拟化容器方案,并被集成到主流Linux内核中,成为Linux系统轻量级容器技术的事实标准。
在LXC的基础上,Docker进一步优化了容器的使用体验:1)提供了各种容器管理工具(分发、版本、移植等),让用户无需关注底层操作,更加简单地管理和使用容器;2)通过引入分层文件系统构建和高效的镜像机制,降低了迁移难度。
用户操作Docker容器就像操作应用本身一样简单。
早期的Docker代码实现是直接基于LXC的,后来随着版本更新,已替换掉了LXC的实现。
简单地讲,Docker容器可以理解为一种轻量级的沙盒(sandbox)。每个容器内运行着一个应用,不同的容器相互隔离,容器之间可以通过网络互相通信。
容器的创建和停止十分迅速,几乎跟创建和停止原生应用一致。很多时候,直接把容器当作应用本身也没有任何问题。
2、Docker的作用
在云时代,开发者创建的应用必须要能很方便的在网络上传播,即应用必须脱离底层物理硬件的限制;同时必须是“任何时间任何地点”可获取的。而这正是Docker所能提供的最大优势。
例如,常见的LAMP(Linux+Apache+MySQL+PHP)组合构建网站,一旦需要服务器迁移,往往需要对每个应用都进行重新部署和调试。因为这些应用都直接运行在底层操作系统上,无法保证同一个应用在不同的环境中行为一致。
Docker通过容器来打包应用、解耦应用和运行平台。迁移时,只需在新的服务器上启动需要的容器即可。
Docker具有以下几个方面的优势:
- 更快速的交付和部署。开发完成后,测试和运维人员可以直接使用完全相同的环境来部署代码。
- 更高效的资源利用。运行Docker不需要额外的虚拟化管理程序的支持,Docker是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低。
- 更轻松的迁移和扩展。Docker容器几乎可以在任意的平台上运行。
- 更简单的更新管理。使用Dockerfile,只需要小小的配置修改,就可以代替以往大量的更新操作。所有修改都以增量的方式被分发和更新,以实现自动化并且高效的容器管理。
与传统虚拟机相比,Docker具有以下优势:
- Docker容器很快,启动和停止可以秒级实现,比传统虚拟机方式的数分钟要快得多。
- Docker容器对系统资源需求很少,一台主机上可以同时运行数千个Docker容器。
- Docker通过类似Git操作来方便用户获取、分发和更新应用镜像,存储复用,增量更新。
- Docker通过Dockerfile支持灵活的自动化创建和部署机制,以提高工作效率,并标准化流程。
3、Docker与虚拟化
虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割障碍,使用户可以用比原本的组态更好的方式来应用这些资源。
虚拟化的核心是是对资源的抽象,目标往往是为了在同一个主机上运行多个系统或应用,从而提高系统资源的利用率,并且带来降低成本、方便管理和容错容灾等好处。
从大类上分,虚拟化技术可分为基于硬件的虚拟化和基于软件的虚拟化,基于硬件的虚拟化技术不多见,也不是Docker技术所要讨论的范畴。基于软件的虚拟化技术可细分为以下几个分类。
Docker以及其他容器技术都属于操作系统虚拟化这个范畴,不需要额外的supervisor支持。Docker虚拟化方式之所以有众多的优势,跟操作系统虚拟化技术自身的设计和实现是分不开的。
传统虚拟化方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级。
4、总结
本章介绍了虚拟化的基本概念、Docker的诞生历史,以及容器在云时代应用分发场景下的巨大优势。