概述

OCI 全称 Open Container Initiative,即开放容器倡议。是一个对容器技术进行标准化的组织。

该组织的使命是围绕容器技术推广一套通用的、最小的、开放的标准和规范。

该组织在 Linux 基金会的支持下成立,核心成员主要包括:Docker、Redhat、IBM、微软、Google 等。

特别说明:目前 OCI 的标准基本上都是来源于 Docker,也就是说 Docker 的核心组件是符合 OCI 标准的,是 OCI 的一个参考实现。

该组织的主要工作内容是对容器化核心技术进行标准化,标准化有助于:

  • 避免容器化技术被某一非中立实体掌控
  • 统一容器化技术底座,提高兼容性,避免容器生态分裂
  • 为不同场景的实现提供参考标准

标准和提案

截止,2021-12-31, OCI 一共发布了如下几个标准:

  • Image Format v1.0.2 定义了容器镜像的格式,平时讲的 Docker 镜像就是基于该标准定义打包的。该标准的具体形式表现为,镜像的文件和目录结构。
  • Runtime Specification v1.0.2 定义了容器的配置、执行环境和生命周期,平时通过 docker run 运行的一个 Docker 容器就是该标准的一个实现。
  • Distribution Specification v1.0.1 定义了如何管理和分发,符合 Image Format 的镜像 和 OCI Artifacts。该标准的具体形式表现为,一套 Registry HTTP API 文档。

其他相关提案可以参见: opencontainers/tob

更多内容可以前往: 官网github 查看。

标准实现

参考:博客

Image

项目stars简介在 container 中运行
moby/buildkitstars从 docker build 拆分出来的项目,支持自动 GC,多种输入和输出格式,并发依赖解析,分布式 Worker 和 Rootless参见:博客官方例子。注意:rootless 模式需要宿主机特殊配置
genuinetools/imgstars对 buildkit 的一层封装,单独的二进制,没有 daemon,支持 Rootless 执行,会自动创建 SUBUID,比 buildkit 使用起来更加容易参考 moby/buildkit 说明
uber/makisustarsuber 开源的内部镜像构建工具,目标是在 Mesos 或 Kubernetes 上进行 Rootless 构建,支持的 Dockerfile 有些许不兼容,在非容器环境下运行会有问题,比如 Image failed to build without modifyfs项目已经归档,不建议使用
GoogleContainerTools/kanikostarsGoogle 出品,目标是 Daemon free build on Kubernetes,要求运行镜像 gcr.io/kaniko-project/executor 进行构建,直接在别的镜像中使用二进制可能会不工作,原生支持 rootless原生支持,且只能在官方提供的 image 中使用
containers/buildahstars开源组织 Containers 推出的项目,目标是构建 OCI 容器镜像,Daemon free,支持 Rootless,与 podman 生态紧密结合参见:文章 。注意 rootless 需要二选一:a) 性能高,运行容器时需要添加 fuse 设备,docker run --device /dev/fuse:rw ...k8s 方案);b) 性能差,每一层都需要复制全量数据,通过 buildah --storage-driver=vfs 命令实现

由于 moby/buildkit 和 containers/buildah 对宿主机存在依赖。云原生场景,建议直接使用 GoogleContainerTools/kaniko。

Runtime

Distribution

关于两者区别,参见博客:为什么有了Docker registry还需要Harbor?

辅助工具

镜像迁移工具

容器化解决方案

单机

  • Docker 商业公司
  • Podman 完全开源
  • rkt

集群

  • Kubernetes

Reference