鸟瞰容器生态系统
容器生态系统:
容器核心技术,容器平台技术,容器技术支持
容器核心技术:能够让Container(容器),在host上运行起来的那些技术
包括:(容器规范、容器runtime、容器管理工具、容器定义工具、Registries、容器OS)
- 容器规范:
runtime spec(运行规范)和image format spec(镜像格式规范)
这两个规范可让不同组织和厂商开发的容器能够在不同的runtime上运行,保证了容器的可移植性和互操作性。
- 容器runtime:
容器真正运行的地方,runtime和操作系统的kernel紧密协作,为容器提供运行环境。
lxc(linux上的老牌容器runtime)、runc(docker自己开发的容器runtime,现在磨人的runtime)、rkt(CoreOS开发的runtime)是目前主流的三种容器runtime。
- 容器管理工具:
对内与runtime交互,对外为用户提供interface
lxd:是lxc对应的管理工具
docker engine:runc对应的管理工具,包含后台deamon和cli两个部分
rkt cli:rkt的管理工具
- 容器定义工具:
允许用户定义容器的内容和属性,使容器能够被保存、共享和创建
docker image:docker容器的模板,runtime依据docker image创建容器
dockerfile :包含若干命令的文本文件,可以通过这些命令创建出docker image
ACI (APP Container Image):与docker image类似,有CoreOS开发的rkt容器的image格式
- Registry:
通过image创建的,存放image的仓库。
Docker Hub (https://hub.docker.com/):docker为公众提供的托管Registry
- 容器OS:
专门的容器操作系统,与常规的OS相比,容器OS通常体积更小,启动更快,是专门为容器定制的OS
容器技术平台:
容器的核心技术使得容器能够在单个host上运行,而容器平台技术能够让容器作为集群在分布式环境中运行。
- 容器编排引擎:
基于容器的应用一般会采用微服务架构。这种架构下,应用被划分为不同的组件,并以服务的形式运行在各自的容器中,通过API对外提供服务。为保证应用的高可用,每个组件都可能运行多个相同的容器,这些容器会组成群集,群集中的容器会根据业务需要被动态地创建、迁移和销毁。
编排(orchestration):
通常包括容器管理、调度、集群定义和服务发现等。通过容器编排引擎,容器被有机地组合成微服务应用,实现业务需求。
docker swarm:docker开发的容器编排引擎
Kubernetes:Google领导开发的容器编排引擎,同时支持Docker和CoreOS容器
Mesos:通用的集群资源调度平台,mesos与marathon一起提供容器编排引擎功能。
- 容器管理平台:
容器管理平台是架构在容器编排引擎之上的一个更为通用的平台。
通常支持多种编排引擎
典型代表:Rancher和ContainerShip
- 基于容器的Paas:
为开发人员和公司提供了开发、部署和管理应用的平台
典型代表:Deis、Flynn和Dokku
容器支持技术:
被用于支持基于容器的基础设施
- 容器网络:
容器的出现使网络拓扑变得更加动态和复杂。用户需要专门的解决方案来管理容器与容器、容器与其他实体之间的连通性和隔离性。
Docker network是docker原生的网络解决方案,除此之外还可采用第三方开源解决方案:flannel、weave和calico。不同方案的设计和实现方式不同,各有优势和特点,可根据时间需要来选型。
- 服务发现:
动态变化是微服务应用的一大特点。
当负载增加时,集群会自动创建新的容器;负载减小,多余的容器会被销毁。容器也会分局host的资源使用情况在不同host中迁移,容器的IP和端口也会随之发生变化。
服务发现会保存容器集群中所有微服务最新的信息
- 监控:
监控对于基础架构非常重要,而容器的动态特征对监控提出更多挑战。
docker ps/top/stats 是Docker原生的命令行监控工具。
Sysdig、cAdvisor/Heapster和Weave Scope是其他开源的容器监控方案
- 数据管理:
容器经常会在不同的host之间迁移 Rex-Ray数据管理工具提供保证持久化数据能够动态迁移
- 日志管理:
日志为问题排查和事件管理提供了重要依据
工具:
docker logs:docker原生的日志工具
logspout:对日志提供了路由功能,可收集不同容器的日志并转发给其他工具进行后处理
- 安全性:
OpenSCAP:能够对容器镜像进行扫描,发现潜在的漏洞
根据《每天五分钟玩转docker容器技术》总结