走近docker--容器生态系统

本文主要摘自CloudMan的《每天5分钟玩转容器技术》

 

Docker是PaaS提供商dotCloud开源的一个基于LXC的高级容器引擎。

根据CloudMan的划分,容器生态系统(container ecosystem)涉及的技术分为:核心技术、平台技术、支持技术。

容器核心技术使得容器能够在单个host上运行。二容器平台技术能够让容器作为集群在分布式环境中运行。

一、核心技术

指能够让container在host(物理机)上运行起来的一类技术,如下图:

1. 容器规范

Docker、CoreOS、Google等公司共同成立了一个叫OCI(Open Container Initiative)的组织,制定开放的容器规范。

目前已发布两个规范:runtime spec和image format spec。

2. 容器runtime

如其名,runtime是容器真正运行的地方。它和container的关系好比JVM和java的关系。目前主流的三种容器runtime为:lxc、runc、rkt。

lxc: linux上的老牌容器runtime。docker最初也用lxc作为runtime。

runc: docker自己开发的容器runtime,符合oci规范,是现在docker默认的runtime。

rtk: CoreOS开发的容器runtime,符合oci规范,因而能够运行Docker的容器。

3. 容器管理工具

容器管理工具对内与runtime交互,对外为用户提供interface。

lxc的管理工具是lxd。

runc的管理工具是docker engine。docker engine包含后台daemon和cli两个部分。我们常说的Docker一般是指docker engine。

rkt的管理工具是rkt cli。

4. 容器定义工具

用户通过容器定义工具定义容器的内容和属性,使得能够保存、共享、重建容器。

docker image是docker容器的模板,runtime依据docker image创建容器。

dockerfile是包含若干命令的文本文件,可以通过这些命令创建docker image。

ACI(App Container Image)与docker image类似,它是由CoreOS开发的rkt容器的image格式。

5. Registry

Registry是一个统一存放image的仓库。

企业可以用 Docker Registry 构建私有的 Registry。

Docker Hub(https://hub.docker.com )是 Docker 为公众提供的托管 Registry,上面有很多现成的 image,为 Docker 用户提供了极大的便利。

Quay.io(https://quay.io/  )是另一个公共托管 Registry,提供与 Docker Hub 类似的服务。

6. 容器OS

容器OS是专门运行容器的操作系统(虽然由于有容器runtime的存在,几乎所有系统都可以运行容器)。与常规OS相比,容器OS通常体积更小,启动更快。

杰出代表有:CoreOS、atomic、ubuntu core。

 二、容器平台技术

容器平台技术能够让容器作为集群在分布式环境中运行,包括:容器编排引擎、容器管理平台、基于容器的PaaS。

1. 容器编排引擎

基于容器的应用一般会采用微服务架构,应用被划分为不同组件,并以服务的形式运行在各自的容器中,通过API对外提供服务。(每个组件都可能会运行多个相同的容器)

所谓编排(orchestration),通常包括容器管理、调度、集群定义和服务发现等。通过编排引擎,容器被邮寄的组合成微服务应用,实现业务需求。

主流容器编排引擎:

1)docker swarm 是Docker开发的容器编排引擎。

2)kubernetes是Google领导开发的开源容器编排引擎,同时支持Docker和CoreOS。

3)mesos是一个通用的集群资源调度平台,mesos与marathon一起提供容器编排引擎功能。

2. 容器管理平台

容器管理平台是架构在容器编排引擎之上的更为通用的平台。通常容器管理平台能够支持多种编排引擎,抽象了编排引擎的底层实现细节。

为用户提供更方便的功能,如:application catalog和一键应用部署等。

容器管理平台的典型代表:Rancher和ContainerShip。

3. 基于容器的PaaS

基于容器的PaaS为微服务应用开发人员和公司提供了开发、部署和管理应用的平台,使用户不必关心底层基础设施而专注于应用的开发。

代表:Deis、Flynn、Dokku。

三、容器支持技术

1. 容器网络

容器的出现使网络拓扑变得更加动态和复杂,用户需要专门的解决方案来管理容器与容器,容器与其它实体间的连通性和隔离性。

docker network是Docker原生的网络解决方案。其它第三方开源解决方案:flannel、weave、calico。

2. 服务发现

服务发现会保存容器集群中所有微服务最新的信息(如:IP和端口),并对外提供API,提供服务查询功能。

典型解决方案:etcd、consul、zookeeper。

3. 监控

docker ps/top/stats是Docker原生的命令行监控工具。Docker也提供stats API,用户可以通过HTTP请求获取容器的状态信息。

其它开源方案:sysdig、cAdvisor/Heapster、Weave Scope。

4. 数据管理

容器经常会在不同的host之前迁移,需要保证持久化数据也能够动态迁移。

典型代表:Flocker。

5. 日志管理

docker logs是Docker原生的日志工具。

logspout对日志提供了路由功能,可以收集不同容器的日志并转发给其它工具进行后处理。

6. 安全性

OpenSCAP能够对容器镜像进行扫描,发现潜在漏洞。

 

posted @ 2018-08-04 16:24  木子锤  阅读(272)  评论(0编辑  收藏  举报