docker的核心技术
容器规范:
容器技术除了的 docker 之外,还有 coreOS 的 rkt, 还有阿里的 Pouch, 为了保证容器生态的标准性和健康可持续发展, 包括 Linux 基金会、 Docker、微软、红帽谷歌和、 IBM、 等公司在 2015 年 6 月共同成立了一个叫 open container( OCI)的组织,其目的就是制定开放的标准的容器规范,目前 OCI 一共发布了两个规范,
分别是 runtime spec 和 image format spec,有了这两个规范, 不同的容器公司开发的容器只要兼容这两个规范,就可以保证容器的可移植性和相互可操作性。
容器 runtime:
runtime 是真正运行容器的地方,因此为了运行不同的容器 runtime 需要和操作系统内核紧密合作相互在支持,以便为容器提供相应的运行环境。
目前主流的三种 runtime:
Lxc: linux 上早期的 runtime, Docker 早期就是采用 lxc 作为 runtime。
**runc:**目前 Docker 默认的 runtime, runc 遵守 OCI 规范,因此可以兼容 lxc。
rkt: 是 CoreOS 开发的容器 runtime,也符合 OCI 规范,所以使用 rktruntime 也可以运行 Docker 容器。
容器管理工具:
管理工具连接 runtime 与用户,对用户提供图形或命令方式操作,然后管理工具将用户操作传递给 runtime 执行。
lxc 是 lxd 的管理工具。
Runc 的管理工具是 docker engine, docker engine 包含后台 deamon 和 cli 两部分,大家经常提到的 Docker 就是指的 docker engine。
Rkt 的管理工具是 rkt cli。
容器定义工具:
容器定义工具允许用户定义容器的属性和内容,以方便容器能够被保存、共享和重建。
Docker image:是 docker 容器的模板, runtime 依据 docker image 创建容器。
Dockerfile:包含 N 个命令的文本文件,通过 dockerfile 创建出 docker image。
ACI(App container image): 与 docker image 类似, 是 CoreOS 开发的 rkt 容器的镜像格式。
Registry:
统一保存镜像而且是多个不同镜像版本的地方, 叫做镜像仓库。
Image registry: docker 官方提供的私有仓库部署工具。
Docker hub: docker 官方的公共仓库, 已经保存了大量的常用镜像,可以方便大家直接使用。
Harbor: vmware 提供的自带 web 界面自带认证功能的镜像仓库,目前有很多公司使用。
编排工具:
当多个容器在多个主机运行的时候, 单独管理容器是相当复杂而且很容易出错,而且也无法实现某一台主机宕机后容器自动迁移到其他主机从而实现高可用的目的, 也无法实现动态伸缩的功能,因此需要有一种工具可以实现统一管理、动态伸缩、故障自愈、 批量执行等功能, 这就是容器编排引擎。
容器编排通常包括容器管理、调度、集群定义和服务发现等功能。
Docker swarm: docker 开发的容器编排引擎。
Kubernetes: google 领导开发的容器编排引擎,内部项目为 Borg, 且其同时支持docker 和 CoreOS。
Mesos+Marathon: 通用的集群组员调度平台, mesos(资源分配)与 marathon(容器编排平台)一起提供容器编排引擎功能。