本文经授权翻译自 CoreOS官方博客 ,原作者Jonathan Boulle。
今天,我们迎来开放容器倡议(OCI)的新项目, OCI镜像规范 。这意味着有一个在业界达成共识的项目,并且依靠着整个业界的强大技术实力,去规范和制定容器的构建、核实、签名以及命名标准。
在这个项目接下来几个月中,用户有望迎来一个行业标准镜像规范,服务于创建和交付容器。如果你正在使用appc或Docker镜像,你并不需要作出太多改变。不过,这将是行业在实现“一次打包,多次运行”容器的愿景上的一大进步。2016年,用户可以期待在容器存储、构建、运行时的更多协同性和创新性。
OCI的第一个项目 OCI运行时规范 规定了如何去运行容器。现在OCI的目标是在这个规范的基础上,增添一个新的 OCI镜像格式规范 ——容器镜像的开放规范、容器运行软件的构建规范。在过去的16个月中,Docker已经将appc规范的许多特性 纳入其镜像格式中。OCI镜像规范项目以Docker v2.2作为起始版本。这样可以以最小的工作量来将镜像格式最终变成一致。不久之后Docker和rkt将支持一个统一的,由OCI规定的标准镜像格式。
首先,让我们回顾CoreOS的CEO Alex Polvi的博文: OCI工程的历史 。OCI项目起始于2015年夏天,当时的开发聚焦于容器的执行环境。而在今天,我们非常激动地启动了OCI镜像格式规范项目。该项目将专注于容器标准中最关键、最基础的组件:可分发的容器镜像。这份开放容器镜像格式规范加固了容器的可移植性目标,允许用户构建和打包、签名容器一次,就可以在各个厂商的平台上运行,不论是云环境还是私有环境。
下列是一份OCI镜像规范的祖先模块,以及它们的特点和历史:
DOCKER V1 | APPC | DOCKER V2.2 | OCI IMAGE |
Introduced | 2013 | Dec 2014 | Apr 2015 |
Federated namespace | Yes | Yes | Yes |
Content-addressable | No | Yes | Yes |
Signable | No | Yes,Optional | Yes,Optional |
Delegatable DNS namespace | No | Yes | No |
OCI镜像格式规范的初始维护者是appc规范的的维护者、Docker镜像格式的开发者和其他应用容器团队的著名成员:
OCI和镜像规范项目欢迎社区参与,过一段时间我们会根据社区的活跃度增加更多的维护者。
从一个比较高的层面去看,容器镜像包含了运行一个软件所需要的所有元素。现在的开发者使用一些工具构建容器镜像,例如Dockerfile、 acbuild 、 dgr 或传统的脚本语言。通过上述工具可以生成一份或多份文件,这些文件可以上传到互联网。那些需要运行这些软件的人可以通过指定名称(如 example.com/my-app )下载、验证和运行容器。
OCI镜像规范的目标是:允许开发者只要对容器打包和签名一次,就可以在所有的容器引擎上运行该容器。这意味着开发团队可以根据自己的需要选择构建工具和扩展语法。随着一个所有人都可以参与和实现的容器镜像规范的确立,很多容器不经过修改就可以运行在大部分容器运行平台上,例如rkt、Docker、Kubernetes和Amazon ECS。这对于准备在现代IT架构上持续投入的用户来说是极大的进步。
考虑到开放容器提案广泛的行业参与性,我们希望 Quay 、Amazon Container Registry、Google Container Registry和Docker Hub这些仓库都可以支持OCI镜像格式。 名称委托(name delegation) 提高的容器可移植性,使得某个容器对很多容器仓库可用。如果这些容器仓库可以支持通用的OCI镜像格式,将极大得提高容器的移动和可替代性,而且不需要关心多种打包过程和打包格式。
迄今为止, Quay容器仓库 和 rkt容器运行时 支持Docker镜像格式和appc镜像格式。我们将持续维护以保住向下兼容,使得已经投入时间和培训的用户可以继续管理、存储和运行这些Quay和rkt格式的容器镜像。
随着OCI格式的成熟,我们将在OCI镜像规范中添加对现有格式的支持。根据目前 OCI镜像规范的发展规划 ,这些将在未来的几个月中成为现实。我们希望OCI镜像格式能很快成为行业的唯一标准,以构建、存储和部署运行时产品。
由于这些成果结合了app镜像格式和Docker v2.2镜像中最好的部分,我们希望能够快速指定和实现新的OCI镜像格式。在我们向着应用容器镜像( GIFEE 的基础构建模块)的标准化努力时,我们非常欢迎你们的帮助和支持。GIFEE指的是Google Infrastructure For Everyone Else。
我们希望通过制定容器镜像的标准,促进容器行业茁壮成长。如果你有兴趣支持这份事业,你可以向rkt或者Clair等开源项目提交修改来让它们更好地支持OCI镜像规范;你可以告诉云计算服务商自己希望他们支持OCI镜像规范;或者你可以直接参与到OCI规范项目。这是关键的一步,最好的方法就是集合整个行业的力量一起推动容器标准化。
感谢CoreOS工程师李响对本文的审校。