你需要了解的知识点:
(1)docker所能提供的最大优势:快速分发和部署
(2)传统服务搭建模式的弊端:直接运行在底层操作系统,不同环境下无法保证应用的行为一致
(3)Docker的工作机制:通过容器打包机制,解耦应用和平台
(4)Docker在开发和运维中的优势:快速交付和部署、节约资源、易于迁移和扩展、便于管理
(5)Docker和虚拟机的比较
一、Docker容器虚拟化的好处
Docker项目的发起人和Docker公司CTOSolomon Hykes曾认为,Dockers在正确的地点、正确的时间顺应了正确的趋势——如何正确地构建应用。
在云时代,开发者创建地应用必须要能很方便地在网上传播,也就是说必须脱离底层硬件地限制;同时必须是“任何时间、任何地点”可获取的。
因此,开发者需要一种新型地创建分布式应用程序地方式,快速分发和部署,这正是Docker所能够提供的最大优势。
举个简单的例子,假设用户试图基于最常见的LAMP(Linux+Apache+Mysql+PHP)组合来构建一个网站。
按照传统的做法,首先,需要安装Apache、Mysql和php以及它们各自运行所依赖的环境;
之后分别对它们进行配置(包括创建合适的用户、参数配置等);
经过大量的操作后还需要进行功能测试,看是否工作正常;
如果不正常,则进行调试追踪,意味着更多的时间代价和不可控的风险。
可以想象,如果应用数目变多,事情会变得更加难以处理。
更可怕的是,一旦需要服务器迁移,往往需要对每个应用都进行重新部署和调试。
这些琐碎而无趣的“体力活”,极大的降低了工作效率,究其根源,是这些应用直接运行在底层操作系统上,无法保证同一份应用在不同的环境中行为一致。
而Docker提供了一份更为聪明的方式,通过容器来打包应用,解耦应用和运行平台。(Docker的工作机制)
意味着迁移的时候,只需要在新的服务器上启动需要的容器就可以,无论新旧服务器是否是同一类型的平台。
这无疑将节约大量的宝贵时间,并降低部署过程中出现问题的风险。
二、Docker在开发和运维中的优势
对开发和运维人员(DevOps)来说,可能最梦寐以求的效果就是一次创建或配置,之后可以在任何地方、任何时间让应用正常运行。
而Dock恰恰是可以实现这一终极目标的“瑞士军刀”,具体来说,Docker在开发和运维过程中来说,具有如下几个方面的优势:
(1)更快的交付和部署:使用Docker,开发人员可以使用镜像来快速构建一套标准的开发环境;
开发完成之后,测试和运维人员可以直接使用完全相同的环境来部署代码。
只要开发测试过的代码,就可以确保在生产环境无缝运行。
Docker可以快速创建和删除容器,实现快速迭代,大量节约开发、测试、部署的时间。
并且,整个过程可见,使团队更容易理解应用的创建和工作过程。
(2)更高效的资源利用:Docker程序运行不需要额外的虚拟化管理程序只吃,它是内核级的虚拟化,
可以实现更高的性能,同时对资源的需求很低。跟传统虚拟机相比,要提高一到两个数量级。
(3)更轻松的迁移和扩展:Docker容器机会可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等,
同时支持主流的操作系统发行版本。这种兼容性让用户可以在不同的平台之间轻松的迁移应用。
(4)更简单的更新管理:使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。
并且所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的容器管理。
三、Docker与虚拟机比较
作为一种轻量级的虚拟化方式,Docker在运行应用上与传统的虚拟机方式相比,具有明显的优势:
(1)Docker容器很快,启动和停止可以在秒级实现,而传统的虚拟机方式需要数分钟。
(2)Docker容器对系统资源需求很少,一台主机上可以同时运行数千个Docker容器。
(3)Docker通过类似Git设计理念的来方便用户获取、分发和更新应用镜像,存储复用,增量更新。
(4)Docker通过Dockerfile支持灵活的自动化创建和部署机制,提高工作效率,使流程标准化。
Docker容器除了运行其中应用外,基本不消耗额外的系统资源,保证应用性能的同时,尽量减小系统开销。
传统虚拟机方式运行N个不同的应用就要起N个虚拟机(每个虚拟机需要单独分配独立的内存、磁盘等资源),
而Docker只需要启动N和隔离的“很薄的”容器,并将应用放进容器内即可。应用获得的是接近原生的运行性能。
当然,在隔离性方面,传统虚拟机方式提供的是相对封闭的隔离。但这并不意味着Docker就不安全,
Docker利用Linux系统上的多种防护技术实现了严格的隔离可靠性,并且整合众多安全工具。
从1.3版本开始,Docker重点改善了容器的安全控制和镜像安全机制,极大提高了使用Docker的安全性。
特 性 | 容器 | 虚 拟 机 |
启动速度 | 秒级 | 分钟级 |
性能 | 接近原生 | 较弱 |
内存代价 | 很小 | 较多 |
硬盘使用 | 一般为MB | 一般为GB |
运行密度 | 单机支持上千个容器 | 一般几十个 |
隔离性 | 安全隔离 | 安全隔离 |
迁移性 | 优秀 | 一般 |