1. 为什么要使用Docker

Docker容器虚拟化的好处

Docker项目的发起人和Docker Inc.的CTO Solomon Hykes认为,Docker在正确的地点、正确的时间顺应了正确的趋势—即高效地构建应用。现在开发者需要能方便地创建运行在云平台上的应用,也就是说应用必须能够脱离底层机器,而且同时必须是“任何时间任何地点”可获取的。因此,开发者们需要一种创建分布式应用程序的方式,这也是Docker所能够提供的。

举个简单的应用场景的例子。假设用户试图基于最常见的LAMP(Linux + Apache + MySQL + PHP)组合来运维一个网站。按照传统的做法,首先,需要安装Apache、MySQL 和PHP以及它们各自运行所依赖的环境;之后分别对它们进行配置(包括创建合适的用户、配置参数等);经过大量的操作后,还需要进行功能测试,看是否工作正常;如果不正常,则意味着更多的时间代价和不可控的风险。可以想象,如果再加上更多的应用,事情会变得更加难以处理。

更为可怕的是,一旦需要服务器迁移(例如从阿里云迁移到腾讯云),往往需要重新部署和调试。这些琐碎而无趣的“体力活”,极大地降低了工作效率。

而Docker提供了一种更为聪明的方式,通过容器来打包应用,意味着迁移只需要在新的服务器上启动需要的容器就可以了。这无疑将节约大量的宝贵时间,并降低部署过程出现问题的风险。

Docker在开发和运维中的优势

对开发和运维(DevOps)人员来说,可能最梦寐以求的就是一次性地创建或配置,可以在任意环境、任意时间让应用正常地运行。而Docker恰恰是可以实现这一终极目标的瑞士军刀。

具体说来,Docker在开发和运维过程中,具有如下几个方面的优势。

更快速的交付和部署。使用Docker,开发人员可以使用镜像来快速构建一套标准的开发环境;开发完成之后,测试和运维人员可以直接使用相同环境来部署代码。Docker可以快速创建和删除容器,实现快速迭代,大量节约开发、测试、部署的时间。并且,各个步骤都有明确的配置和操作,整个过程全程可见,使团队更容易理解应用的创建和工作过程。

更高效的资源利用。Docker容器的运行不需要额外的虚拟化管理程序(Virtual Machine Manager,VMM,以及Hypervisor)支持,它是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低。

更轻松的迁移和扩展。Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性让用户可以在不同平台之间轻松地迁移应用。

更简单的更新管理。使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。并且所有修改都以增量的方式进行分发和更新,从而实现自动化并且高效的容器管理。

Docker与虚拟机比较

作为一种轻量级的虚拟化方式,Docker在运行应用上跟传统的虚拟机方式相比具有显著优势:

Docker容器很快,启动和停止可以在秒级实现,这相比传统的虚拟机方式要快得多。

Docker容器对系统资源需求很少,一台主机上可以同时运行数千个Docker容器。

Docker通过类似Git的操作来方便用户获取、分发和更新应用镜像,指令简明,学习成本较低。

Docker通过Dockerfile配置文件来支持灵活的自动化创建和部署机制,提高工作效率。

Docker容器除了运行其中的应用之外,基本不消耗额外的系统资源,保证应用性能的同时,尽量减小系统开销。传统虚拟机方式运行N个不同的应用就要启动N个虚拟机(每个虚拟机需要单独分配独占的内存、磁盘等资源),而Docker只需要启动N个隔离的容器,并将应用放到容器内即可。

当然,在隔离性方面,传统的虚拟机方式多了一层额外的隔离。但这并不意味着Docker就不安全。Docker利用Linux系统上的多种防护机制实现了严格可靠的隔离。从1.3版本开始,Docker引入了安全选项和镜像签名机制,极大地提高了使用Docker的安全性。

下表总结了使用Docker容器技术与传统虚拟机技术的特性比较。

最新文章

  1. 如何在博客中使用SublimeText风格的代码高亮样式
  2. iOS打包测试
  3. Windows 安装启动apache时出现错误的解决方法
  4. 使用 jsErrLog 分析 js 报错
  5. UIGestureRecognizer手势
  6. ubuntu python PyCharm virtualenv
  7. UVa127,"Accordian" Patience
  8. Robotframework自动化系统:筛选结果数量统计
  9. 动态SQL之、条件判断(转)
  10. Python爬虫——Request模块
  11. 动态创建数据table
  12. node基础—process对象(管理进程)
  13. 【Java】SpringBoot配置文件读取中文乱码
  14. nodeJS之Cookie和Session(一)
  15. poj2185 kmp求最小覆盖矩阵,好题!
  16. windows系统下,express构建的node项目中,如何用debug控制调试日志
  17. 写了一个Hy的vscode语法高亮插件
  18. 漫游Kafka之过期数据清理【转】
  19. Cannot initialize Cluster. Please check your configuration for mapreduce.framework.name and the correspond server addresses.
  20. C#编程概述

热门文章

  1. TCP/IP协议族-----21、文件传送:FTP和TFTP
  2. SQL Server Profiler 跟踪sql小技巧
  3. Yii Framework2.0开发教程(3)数据库mysql入门
  4. 4~20mA模拟输出(电流环)应用笔记(转)
  5. A Translation for Quaternion 一篇对四元数的翻译
  6. atitit.验证码识别step4--------图形二值化 灰度化
  7. [svc]alpha、beta、rc各版本区别
  8. 李洪强和你一起学习前端之(8)CSS复习
  9. 广告过滤神器(ADMuncher)4.93
  10. SAM I AM UVA - 11419 最小点集覆盖 要输出具体覆盖的行和列。