什么是docker?

Table of Contents

什么是docker

最近一年多,如果你混在IT相关的技术圈,似乎很难不听到docker技术和容器 技术的各种讨论。

到底docker是什么?为什么近期突然这么火?是不是我不会docker就落伍了?

简单的讲docker是一种应用容器引擎,也是广义虚拟化技术中的一种。

可以把docker这类的容器技术想象成一种应用打包技术。

  1. 传统的打包和管理:如果不使用任何虚拟化技术,那么你所打包的应用程 序将只能运行于特定于你所打包的操作系统平台和发行版,比如suse的rpm, ubuntu的deb。对于每个平台都将需要单独打包,并且管理依赖。
  2. docker容器技术:用docker打包的应用镜像,将可以在不同的linux发行版 或者windows上面运行。并且应用的依赖打包在容器内部,实现了应用的沙 箱机制,使得不同容器内的不同应用可以完全隔离,*比虚拟机快和比普通 应用隔离度好是它的显著特点* 。
  3. 虚拟机:虚拟机镜像,则几乎可以运行在任意宿主操作系统平台之上。

为什么是docker?

同样是实现应用隔离,虚拟机也可以做到,而且已经做了好久,为什么是 docker?

与传统虚拟机技术的对比

首先,两者并不是直接的竞争关系,虚拟机技术着重将软件基础架构从硬件中 抽象出来,而容器技术则进一步将应用程序从操作系统中抽象出来。

就是说,对于虚拟机,为了打包你的应用程序,你需要将操作系统连同你的应 用一起打包进去。而对于容器,你的容器镜像将不包含操作系统,只要目标运 行环境支持docker engine,都可以运行。这个重大区别也使得 docker之类的 容器技术更加轻量级

所以docker之类的技术最显著的特点就是启动快,资源消耗小。对于任何要求 可以快速横向扩展的应用(PaaS类应用)、构建自动化测试和持续集成环境甚 至是快速本地开发环境都是一把利器。

docker的作者和vagrant(虚拟机管理配置工具)的作者对于各自的使用场景的 描述:

Should I use Vagrant or Docker.io for creating an isolated environmen?

为什么是现在?

因为:天时地利人和。

docker的官方定义

docker是一个构建,发布和运行分布式应用程序的开放平台,它给开发、运营
团队利用现代应用程序分布式、网络化提供了通用的工具。

从这个定义所强调的现代应用的 程序分布式 ,和 网络化 这个特点不难 看出它的主要目标场景。

其实docker为代表的容器引擎背后的技术,大部分都是早就有之。但是docker 这个名词,以及其背后的公司却是近期才迅速窜起。究其原因:

需求牵引

近几年热门的主要趋势和技术,或多或少都为docker的流行贡献力量,例如:

  1. microservices(微服务): 一种新的软件架构设计方法,将一个大的应 用划分为一系列可以独立部署的小服务。 其典型特征,去中心化的独立 快速自动部署都是docker应用的良好场景。
  2. 快速崛起的PaaS之类的云服务:都需要良好的虚拟化和应用隔离,最小非 应用必须的资源消耗。

整个市场发展到了能够接受并且准备好整个概念的时候了。

虚拟化技术的普遍应用

在docker火之前,硬件虚拟化技术就已经普遍在使用了。大部分企业通常的 持续集成工具最后的产出就是一个包含了目标应用的完整的操作系统镜像, 随时可以部署在任意虚拟机上。

所有这些之前的虚拟化技术的应用:

  1. 都让大部分人接受了虚拟化这个大概念
  2. 探索出来其在产业每个环节的可能应用场景
  3. 完成了对技术和市场的教育任务
  4. 并且随着一些新的市场和技术趋势的的发展逐渐暴露出新的问题

而这些问题恰好是docker之类的容器技术擅长的地方。