Docker 的前世今生

虚拟化
要解释清楚 Docker , 首先要解释清楚容器(Container)的概念 。要解释容器的话 , 就需要从操作系统说起 。操作系统太底层 , 细说的话一两本书都说不清楚 。这里就一句话来总结一下:操作系统(Operating System , 简称OS)是管理计算机硬件与软件资源的计算机程序 , 并且为软件运行提供通用服务的系统软件 。
随着硬件的性能提升 , 软件种类的丰富 , 有两种情况变得很常见:

  1. 硬件性能过剩——很多计算机的硬件配置 , 往往会有大量时间处于硬件资源闲置的状态 。例如一般家用电脑 , 已经是四核、六核的配置了 , 除了3A游戏、视频制作、3D渲染、高性能计算等特殊应用外 , 通常有 90% 以上时间 CPU 是闲置的;
  2. 软件冲突——因为业务需要 , 两个或者多个软件之间冲突 , 或者需要同一个软件的不同版本 。例如早几年做 Web 前端的 , 要测试网页在不同版本的 IE 上是否能正常显示 , 然而 windows 只能装一个版本的 IE 。

为了解决软件冲突 , 只能配置多台计算机 , 或者很麻烦的在同一台电脑上安装多个操作系统 。显然这两个方案都有其缺点:多台计算机成本太高 , 多操作系统的安装、切换都很麻烦 。在硬件性能过剩的时候 , 硬件虚拟化的普及就很自然而然的提出来了 。
所谓硬件虚拟化 , 就是某个特殊的软件 , 仿真出一台或者多台计算机的各种硬件 , 用户可以在这一台虚拟机上安装、运行操作系统(一般叫来宾操作系统 , Guest OS)和各种应用 , 并且把 Guest OS 和上面应用软件对硬件资源的访问转发到底层的硬件上来实现 。
对于 Guest OS 和上面的应用程序来说 , 这台虚拟机和普通物理计算机是完全一样没有任何区别的——除了性能可能差一点 。全球第一人气的 VMware Workstation 就是这么一个软件 , Oracle 的 VirtualBox 以及 Microsoft 的 Virtual PC 都是 。这类软件英语有一个专用的单词是 Hypervisor(虚拟机管理程序) 。

Docker 的前世今生

文章插图
 
虚拟机的优点
可以把资源分配到不同的虚拟机 , 达到硬件资源的最大化利用;
相比直接在物理机上部署应用 , 虚拟机更容易扩展应用;
云服务:通过虚拟机虚拟出不同的物理资源 , 可以快速搭建云服务 。
虚拟化技术主要用来解决高性能的物理硬件产能过剩和老旧的硬件硬件产品产能过低的重组重用 , 透明化底层物理硬件 , 从而最大化的利用物理硬件 。

虚拟机的缺点
虚拟机的缺点在于 Guest OS 通常会占用不少硬件资源 。例如 Windows 安装 VMware 并开机 Guest OS , 不运行任何应用的情况下 , 就需要占用 2 ~ 3G 内存 , 20 ~ 30G 硬盘空间 。而且为了应用系统运行的性能 , 往往还要给每台虚拟机留出更多的内存容量 。虽然不少 Hypervisor 支持动态内存 , 但基本上都会降低虚拟机的性能 。在这样的资源占用情况下 , 少量的虚拟机还是可以接受的 , 如果同时运行十多台或数十台虚拟机 , 硬件资源的浪费就会成倍递增 。通常来说 , 其中相当大一部分甚至全部 Guest OS 都是相同的 。
能不能所有应用使用同一个操作系统减少硬件资源的浪费 , 但是又能避免包括运行库在内的软件冲突呢?操作系统层虚拟化——容器概念的提出 , 就是为了解决这个问题 。Docker 就是一个容器的标准化实现 。
容器化
容器技术已经发展了很长一段时间了 , 例如:LXC , BSD Jails , Solaris Zones...
Docker 的前世今生

文章插图
 
容器化就是应用程序级别的虚拟化技术 。容器提供了将应用程序的代码、运行时、系统工具、系统库和配置打包到一个实例中的标准方法 。容器共享一个内核(操作系统) , 它安装在硬件上 。

Docker 的前世今生

文章插图
 
和虚拟机相比 , 容器有以下优点:


    推荐阅读