Docker的理论认识(一)

注:这是我读《Docker技术入门与实战》所整理的

什么是Docker技术

Docker是基于go语言实现的云开源项目,Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,即通过对应组件的封装,分发,部署,运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”。这里的应用组件,既可以是一个Web应用,也可以是一套数据库服务,甚至是一个操作系统或者编辑器。
Docker基于Linux的多项开源技术提供了高效、敏捷和轻量级的容器方案,并且支持在多种主流云平台(Paas)在本地系统上部署。可以说Docker为应用的开发和部署提供了“一站式”的解决方案。

为什么要用Docker

Docker容器虚拟化的好处

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

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

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

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

Docker在开发和运维中的优势

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

  • 更快的交付和部署。使用Docker,开发人员可以使用镜像来快速构建一套标准的开发环境;开发完成之后,测试和运维人员可以直接使用相同环境来部署代码。Docker可以快速创建和删除容器,实现快速迭代,大量节约开发、测试、部署的时间。并且,各个步骤都有明确的配置和操作,整个过程全程可见,使团队更容易理解应用的创建和工作过程。
  • 更高效的资源利用。Docker容器的运行不需要额外的虚拟化管理程序支持,它是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低。
  • 更轻松的迁移和扩展。Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性让用户可以在不同平台之间轻松地迁移应用。
  • 更简单的更新管理。使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。并且所有修改都以增量的方式进行分发和更新,从而实现自动化并且高效的容器管理。

Docker与虚拟机比较

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

  • Docker容器很快,启动和停止可以在秒级实现,这相比传统的虚拟机方式要快得多。
  • Docker容器对系统资源需求很少,一台主机上可以同时运行数千个Docker容器。
  • Docker通过类似Git的操作来方便用户获取、分发和更新应用镜像,指令简明,学习成本较低。
  • Docker通过Dockerfile配置文件来支持灵活的自动化创建和部署机制,提高工作效率。
特性 容器 虚拟机
启动速度 秒级 分钟级
硬盘使用 一般为MB 一般为GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般十几个
隔离性 安全隔离 安全隔离

虚拟化与Docker

虚拟化技术是一个通用的概念,在不同领域有不同的理解。在计算领域,一般指的是计算虚拟化,或通常说的服务器虚拟化。维基百科上的定义如下:

在计算机技术中,虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以用比原本的组态更好的方式来应用这些资源。

可见,虚拟化的核心是对资源进行抽象,提高系统资源的利用率,同时带来降低成本、方便管理和容错容灾等好处。

Docker以及其他容器技术都属于操作系统的虚拟化这个范畴。
Docker虚拟化方式之所以拥有众多优势,这跟操作系统的虚拟化自身的特点分不开的。
传统方式实在硬件层面实现虚拟化,需要额外的虚拟机管理应用和虚拟机操作系统层。
Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级。

猜你喜欢

转载自blog.csdn.net/huang_yong_peng/article/details/82925276