一、概述
一谈到容器,大家就会想到Docker,但是容器不仅仅只有Docker,还有CoreOS的rkt等。为了让不同容器之间能够互相兼容,Docker、CoreOS、Google等公司成立了一个叫OCI(Open Container Initiative)的组织,用于规范容器标准。目前OCI发布了2个标准runtime spec和image format spec。有了这两个标准,即使是不同厂商开发的容器,只要遵循了同样标准,就能够在不同host上进行移植。
二、容器核心技术
容器运行时需要有一个运行时支撑,就好像JAVA程序运行需要先安装jvm一样,目前有三个主流的容器运行时,分别是lxc、runc、rkt。lxc是Linux上老牌的容器runtime,Docker最早就是用lxc作为容器runtime,runc是Docker开发的容器runtime,遵循OCI规范,现在是Docker默认的容器运行时。rkt是CoreOS开发的容器运行时,遵循OCI规范。
容器的创建设置等都需要客户端来管理,客户端可以是图形界面也可以是命令。不同容器运行时提供的管理工具都不相同:
runc提供的管理工具是Docker Engin,包含后台deamon和cli两部分
rkt提供的管理工具是rkt cli
lxc提供的管理工具是lxd
容器需要想用户提供设置容器内容和属性的能力,这个能力就是通过容器定义工具体现的。这样容器就能够方便的保存和重建。
关于Docker的容器定义工具如下:
docker image,是创建Docker容器的模板
dockerfile,包含若干命令的文本文件,用于创建docker image
CoreOS的rkt容器的定义工具如下:
ACI(App Container Image),这个和docker image类似
容器通常由image创建,管理image的仓库就是Registries,Docker相关的镜像仓库的工具有:
1、Docker Registry,企业可以用它构建私有的仓库
2、Docker Hub是一个公开的镜像仓库,用户可以直接使用上面的image
3、Quay.io是另一个公开的镜像仓库,和DockerHub类似
有了容器运行时,容器可以说是跨平台的,容器可以直接在Linux,MacOS,Windows上运行。但是依旧有专门为容器专门开发的操作系统,这些定制的操作系统,运行容器会更加高效,但是未必方便。CoreOS,Atomic,Ubuntu Core就是比较出名的。