1. 容器与虚拟机

  • 对于容器,它首先是一个相对独立的运行环境,在这一点有点类似于虚拟机,但是不像虚拟机那样彻底。
  • 在容器内,应该最小化其对外界的影响,比如不能在容器内把宿主机上的资源全部消耗,这就是资源控制。
  • 容器和虚拟机之间的主要区别在于虚拟化层的位置和操作系统资源的使用方式。
  • 容器可以看成一个装好了一组特定应用的虚拟机,它直接利用了宿主机的内核,抽象层比虚拟机更少,更加轻量化,启动速度极快。

2. 起源

  • Linux内核功能可以在容器和主机上运行的其他进程之间创建墙壁。
  • 最初由IBM开发的Linux命名空间包装了一套系统资源,并将它们呈现出一个流程,使其看起来像是专用于该进程。
  • 最初由Google开发的Linux cgroup管理一组进程系统资源(如CPU和内存)的隔离和使用。
  • 借助于namespace的隔离机制和cgroup限额功能,LXC提供了一套统一的API和工具来建立和管理container。
  • Docker建立在LXC基础之上,利用AUFS来实现对container的快速更新

3. 为什么用容器

  • 容器很重要的特点之一是快速构建一个跨平台运行的应用及所依赖的环境。
  • 容器的应用场景之一就是构建企业私有云平台,它简单、轻量的特点不仅可以降低私有云的构建难度,而且还能更高效的利用物理资源,同时,标准化运行环境并提高交付效率。
  • 容器常用的应用场景之一是CI/CD,基于Docker镜像统一的交付方式,我们可以轻松解决之前持续交付中部署环境、交付速度、依赖组件等多个老大难问题,再借助Kubernetes、Mesos、Swarm等编排工具,我们就可以规模化部署应用,真正实现一键部署和交付。
  • 容器与微服务架构是近几年来开发者社区的技术热点,在与容器结合使用后,微服务架构的优点得到了进一步的放大。

4. 容器编排工具

  • Kubernetes作为容器生态圈中重要一员,由Google开源的Kubernetes逐渐成为容器编排领域的领导者,它提供的应用部署、维护、 扩展机制等功能,可以方便地管理跨主机运行容器化的应用。
  • Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核。Mesos最初是由加州大学伯克利分校的AMPLab开发的,后在Twitter得到广泛使用。基于成功的开源社区,Mesos有着自己相对独立的生态圈,比如Marathon、Chronos。
  • Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。