Why Docker?

2018-09-18 10:03 浏览量:573

1.1 Why Container?

以下将从不同时期应用部署、运维的优缺点展开说明。

操作系统(OS)

  直接在物理机上部署应用,无法做到应用之间资源隔离以及合理利用。

  1. 资源不隔离。一个内存使用量比较大的app可能消耗所有的内存资源,导致其他app无法正常提供服务。
  2. 所有app共享一份物理机运行环境(kernel+app)。无法做到按照app定制化运行环境或则app对特定内核的要求。
  3. 如果将多个app部署在不同的物理机上。a. 需要购买大量物理机器,花费较大。b. 需要不同app对于硬件要求不同,需要特殊定制。c. 需要花费大量运维时间。
  4. 当前,cpu、内存等硬件发展速度远远高于软件的速度。很多老的系统自需要少量的cpu或者内存,但是其独占一台机器,造成资源浪费。

虚拟机(VM)

  虚拟机的出现,弥补了上面的不足。虚拟机将物理机器资源统一抽象为单元,按需分配。不同的实例之间资源隔离、独立的内核。但是随着互联网的快速发展, 要求app能够快速扩展资源以及实例。当前的虚拟机机器显然不能满足此需要。其主要有以下几点

  1. 镜像臃肿。每个镜像少则几百兆,正常都在几个GB大小。
  2. 创建和启动时间开销大,不利于快速重组。(不能满足互联网弹性计算要求)
  3. 性能损耗大
  4. 额外的资源开销大

容器技术(Container)

  很早以前就有了容器化的概念。近几年随着互联网井喷式的发展,容器机器有了一个很好的契机暴露在大众的眼前。

  1. 镜像体积小。只包括应用以及所依赖的环境,没有内核
  2. 创建和启动快。不需要启动GuestOS,应用启动开销基本就是应用本身启动的时间开销
  3. 无GuestOS,无hypervisor,无额外资源开销,资源控制粒度更小,部署密度大
  4. 使用的是真实物理资源,因此不存在性能损耗
  5. 轻量级

容器也有缺点

  1. 隔离性相对虚拟机弱。由于和宿主机共享内核,带来很大的安全隐患,容易发生逃逸。
  2. 如果某些应用需要特定的内核特性,使用容器不得不更换宿主机内核。

容器技术发展

linux chroot->google cgroup->lxc(linux container)->docker(libContainer)

hyper

Hyper = Hypervisor + Docker镜像

  Hyper是一个基于虚拟化技术(hypervisor)的Docker引擎。官方认为虽然Hyper同样通过VM来运行Docker应用,但HyperVM里并没有GuestOS,相反的,一个HyperVM内部只有一个极简的HyperKernel,以及运行的Docker镜像。这种Kernel+Image的”固态”组合使得HyperVM和Docker容器一样,实现了ImmutableInfrastructure的效果。借助VM天然的隔离性,Hyper能够完全避免LXC共享内核的安全隐患。

1.2 Why Docker?

Docker项目最初是由一家名为dotCloud的平台即服务厂商所打造,其后该公司更名为Docker。与Warden类似,Docker同样在起步阶段使用LXC,而后利用自己的 libcontainer库将其替换下来。与其它容器平台不同,Docker引入了一整套与容器管理相关的生态系统。其中包括一套高效的分层式容器镜像模型、一套全局及本地容器注册表、 一个精简化REST API以及一套命令行界面等等。在后期发展阶段,Docker公司还构建起一套名为Docker Swarm的容器集群管理解决方案。

  1. 快速构建基于容器的分布式应用
  2. 具有容器的所有优点
  3. 提供原生的资源监控

Docker与虚拟机原理对比:

由于容器技术很早就有,Docker最核心的创新在于它的镜像管理,因此有人说:

Docker = 容器 + Docker镜像

Docker镜像的创新之处在于使用了类似层次的文件系统AUFS,简单说就是一个镜像是由多个镜像层层叠加的,从一个base镜像中通过加入一些软件构成一个新层的镜像,依次构成最后的镜像,如图

     操作系统
        chroot
        namespace
        guestOS
        cgroup
     虚拟机
         
     容器化
       具体实现
       LXC
   LXD

下一篇:数据质量管理系统:数据治理的核心

分享到-微信
X

为什么选择龙石数据?