五种状态

  • Created
  • Running
  • Paused
  • Stopped
  • Deleted

    主要解决的问题

    应用隔离

    很容易理解,比如不同的应用依赖了冲突的基础软件包,如果都直接部署在操作系统环境下,必然会引起冲突。这个时候就需要应用之间互相隔离。Docker 使用操作系统底层的 Namespace 技术来做隔离是一种主流的技术方案。

    应用部署

    在容器技术诞生之前,所有的应用都是直接部署在操作系统上面的,彼此之间共享底层的操作系统资源,比如内存、CPU、磁盘等
    打个比方,如果我们要将应用 A 和应用 B 部署到同一台机器上,那么这两个应用需要的环境信息,我们都需要满足。如果应用 A 和 B 的环境依赖之间存在冲突,或者说不兼容,那么管理起来就会非常的困难。
    而这个问题,我们通过容器的镜像技术却可以非常简单地解决掉。除此之后,Docker 技术还有很多相比于传统技术更加优势的地方,这也 Docker 技术能够迅猛发展起来的根本原因。

    资源限制

    不同的应用共享集群不可避免的涉及到资源使用限制的问题。比如一个公司同时有多个业务部门使用一个统一的集群,在统计研发成本时,需要统计各个部门的资源使用情况然后做划分。这样我们就可以根据资源使用限制来划分,当某些应用资源使用超限就杀掉应用。Docker 使用内核提供的 Cgroup 技术来做资源限制正好可以应用到这个场景。

容易编排技术

容器技术的繁荣促进其生态快速发展,这其中最重要的就是容器编排技术。对于规模稍微大一点应用,在生存环境中,需要发布的容器数量很可能极其庞大,这也就意味着如何管理容器之间的联系和拓扑结构并不是一件简单的事情。
举个例子,对于一个成熟的 web 应用,首先要具备高可用架构,其次其内部可能包含数据库、缓存等各种依赖,除此之外还有很多运维管理需求,比如监控告警等。对于这些操作,通过人工来管理肯定是不现实的。这个时候我们就需要定义容器集群的编排和部署工具。
说到容器编排,不得不提三剑客:Compose、Machine 和 Swarm。