容器runtime是容器真正运行的地方,runtime需要和操作系统kernel紧密结合,为容器提供运行环境。
比如说,java程序比作一个容器,JVM就是runtime。JVM为java程序提供运行环境。
所以容器只能在runtime里面运行
lxc、runc 和 rkt 是目前主流的三种容器 runtime。 lxc 是 Linux 上老牌的容器 runtime。Docker 最初也是用 lxc 作为 runtime。 runc 是 Docker 自己开发的容器 runtime,符合 oci 规范,也是现在 Docker 的默认 runtime。 rkt 是 CoreOS 开发的容器 runtime,符合 oci 规范,因而能够运行 Docker 的容器。
除了运行环境,使用者也得需要工具来管理容器。容器管理工具对内与runtime交互,对外为用户提供interface.
lxd是lxc对应的容器管理工具;runc的管理工具是docker engine。docker engine 包含后台 deamon 和 cli 两个部分。我们通常提到 Docker,一般就是指的 docker engine。rkt 的管理工具是 rkt cli。
容器定义工具允许用户定义容器的内容属性,这样容器就能够被保存,共享和重建
docker image 是 docker 容器的模板,runtime 依据 docker image 创建容器。 dockerfile 是包含若干命令的文本文件,可以通过这些命令创建出 docker image。 ACI (App Container Image) 与 docker image 类似,只不过它是由 CoreOS 开发的 rkt 容器的 image 格式。
容器是通过image创建的,需要一个仓库统一存放image,这个仓库就叫做Registy
企业可以用 Docker Registry 构建私有的 Registry。 Docker Hub(https://hub.docker.com )是 Docker 为公众提供的托管 Registry,上面有很多现成的 image,为 Docker 用户提供了极大的便利。 Quay.io(https://quay.io/ )是另一个公共托管 Registry,提供与 Docker Hub 类似的服务。
因为容器有runtime,所以几乎所有的linux、MAC OS和windows都可以运行容器
容器 OS 是专门运行容器的操作系统。与常规 OS 相比,容器 OS 通常体积更小,启动更快。因为是为容器定制的 OS,通常它们运行容器的效率会更高。
目前已经存在不少容器 OS,CoreOS、atomic 和 ubuntu core 是其中的杰出代表。
容器核心技术能够让让容器在单个主机上运行,容器平台技术能够让容器作为集群在分布式环境中运行。容器平台技术如下图:
分为容器编排技术、容器管理平台、基于容器的PaaS。
基于容器的应用一般会采用微服务架构。在这中间架构下,应用被划分成不同的组件,并以服务的方式运行在各个容器中,通过API对外提供服务,为了保证服务的高可用,每个组件会运行多个相同的容器。
这些容器会组成集群,集群中的容器会根据业务动态的创建、迁移和销毁。
这样基于微服务架构的系统实际上是一个动态可伸缩的系统。容器编排引擎就排上用场了。
编排(orchestration),通常包括容器管理、调度、集群定义和服务发现。通过容器编排引擎、容器被有机的组合成微服务应用,实现业务需求。
docker swarm 是 Docker 开发的容器编排引擎。 kubernetes 是 Google 领导开发的开源容器编排引擎,同时支持 Docker 和 CoreOS 容器。 mesos 是一个通用的集群资源调度平台,mesos 与 marathon 一起提供容器编排引擎功能。 以上三者是当前主流的容器编排引擎。
容器管理平台是在容器编排引擎之上的一个更为通用的平台。通常容器管理平台能够支持多个编排引擎,抽象了编排引擎的底层实现细节。
比如:application catalog和一键应用部署
Rancher和Containership是容器管理平台的典型代表
容器使得网络变得复杂,用户需要专门的解决方案来管理容器与容器,容器与其他实体之间的连通性和隔离性。
docker network是docker原生的解决方案。
微服务的最大特点是动态变化,当负载增加时,集群会自动创建新的容器;负载减小,多余的容器就会被销毁。容器也会根据主机的资源情况在不同主机上迁移,容器的IP和端口也随之改变。
在这种情况下,必须要让客户端能够知道如何访问容器提供的服务。这就是服务发现的工作。
服务发现会保存集群中所有微服务的最新信息,比如IP和端口,对外提供的API,提供服务和查询等。
比较主流的是etcd,consul,zookeeper。