1、容器规范
定义:容器不光是 Docker,还有其他容器,比如 CoreOS 的 rkt。为了保证容器生态的健康发展,保证不同容器之间能够兼容,包含 Docker、CoreOS、Google在内的若干公司共同成立了一个叫 Open Container Initiative(OCI) 的组织,其目是制定开放的容器规范。
分类:目前 OCI 发布了两个规范:runtime spec 和 image format spec。有了这两个规范,不同组织和厂商开发的容器能够在不同的 runtime 上运行。这样就保证了容器的可移植性和互操作性。
2、容器runtime
定义:runtime 是容器真正运行的地方。runtime 需要跟操作系统 kernel 紧密协作,为容器提供运行环境。类似于java与JVM的关系:Java 程序就好比是容器,JVM 则好比是 runtime。JVM 为 Java 程序提供运行环境。同样的道理,容器只有在 runtime 中才能运行。
分类(目前主流):
(1)lxc:lxc 是 Linux 上老牌的容器 runtime。Docker 最初也是用 lxc 作为 runtime。
(2)runc:runc 是 Docker 自己开发的容器 runtime,符合 oci 规范,也是现在 Docker 的默认 runtime。
(3)rkt:rkt 是 CoreOS 开发的容器 runtime,符合 oci 规范,因而能够运行 Docker 的容器。
3、容器管理工具
定义:容器管理工具对内与 runtime 交互,对外为用户提供 interface,比如 CLI。这就好比除了 JVM,还得提供 java 命令让用户能够启停应用
分类:
(1)lxd:lxc的管理工具lxd
(2)docker engine:runc 的管理工具是 docker engine。可以理解为docker engine=docker daemon。docker engine 包含后台 deamon 和 cli 两个部分。我们通常提到 Docker,一般就是指的 docker engine
(3)rkt cli:rkt 的管理工具是 rkt cli
4、容器定义工具
定义:允许用户定义容器的内容和属性,这样容器就能够被保存,共享和重建。
分类:
(1)docker image:docker image 是 docker 容器的模板,runtime 依据 docker image 创建容器。
(2)dockerfile:dockerfile是包含若干命令的文本文件,可以通过这些命令创建出 docker image。
(3)ACI:ACI (App Container Image) 与 docker image 类似,只不过它是由 CoreOS 开发的 rkt 容器的 image 格式。
5、registries
定义:容器是通过 image 创建的,需要有一个仓库来统一存放 image,这个仓库就叫做 Registry。
分类:
(1)docker registry:企业可以用 Docker Registry 构建私有的 Registry。
(2)docker hub:Docker Hub(https://hub.docker.com) 是 Docker 为公众提供的托管 Registry,上面有很多现成的 image,为 Docker 用户提供了极大的便利。
(3)Quay.io:Quay.io(https://quay.io/)是另一个公共托管 Registry,提供与 Docker Hub 类似的服务。
6、容器OS
定义:容器 OS 是专门运行容器的操作系统。与常规 OS 相比,容器 OS 通常体积更小,启动更快。因为是为容器定制的 OS,通常它们运行容器的效率会更高。
分类(杰出代表):
(1)CoreOS
(2)atomic
(3)ubuntu core