基于OCI标准的Pouch容器¶
OCI标准¶
Open Container Initiative (OCI) 是Linux基金会旗下负责 操作系统层虚拟化(容器) 开放标准制定的项目。当前主要开发两项标准:
运行时标准 (Runtime Specification, runtime-spec )
镜像标准 (Image Specification, image-spec )
runtime标准概括了如何运行一个从磁盘解包的 文件系统包 (filesystem bundle) (类似macOS上分发的软件bundle) 。从上层的OCI实现将下载一个OCI镜像,然后将镜像解包成为一个OCI运行时的文件系统包(OCI Runtime filesystem bundler)。此时OCI运行时文件系统包将被一个OCI runtime运行起来。
备注
OCI标准定义了容器运行时和镜像规范,使得不同容器实现(LXC, Docker, Kata, rkt) 以相同的标准运行,这样开发人员构建、打包和部署容器,可以运行在不同厂商的解决方案上。
Pouch¶
PouchContainer 是阿里巴巴集团创建并遵循OCI容器标准的开源容器方案,目前用于集团基础架构。支持以下容器运行:
runc 集运Linux cgroups和namespaces的container runtime,即Docker
katacontainers 基于hypervisor的container runtime, Kata Containers 结合了内核虚拟化的轻量级容器,提供比单纯容器更好的安全隔离
runlxc 基于LXC的container runtime(对于较老的2.6.32+内核支持)

PouchContainer主要的功能:
提供了集成多个服务、hooks以及多种容器功能,这样可以兼容传统的运维模式。不过需要注意的是,pouch并不代表富容器,而是提供了富容器的部署选项;pouch也可以提供标准纯净的容器,通过插件实现富容器的支持。
支持基于hypervisor的容器(Kata Containers)提供跟多安全隔离
通过 Dragonfly 实现P2P的镜像分发,加速大规模镜像分发速度
支持 Kubernetes Native 实现,即符合 Kubernetes Container Runtime Interface (CRI) 标准,可以集成在Kubernetes集群
Pouch解析¶
在上图中组件集成了很多开源项目和标准,以下做一个简单解析:
OCI 维护OCI的运行时和镜像标准。当前的docker版本支持OCI镜像和运行时标准。
containerd 是一个用于管理完整容器生命周期的容器运行服务,包括镜像传输和存储,以及容器运行,容器监督和容器网络都是由
contained
负责containerd-shim
负责处理headless 容器(没有显示输出的容器),即负责容器的初始化。
备注
在计算机程序开发中, shim (英文原义是垫片,帮助两个物体更好组装而填补缝隙的薄片)是一种透明拦截API调用并更改传递的参数,以便处理不同软件(库)平台调用的转换兼容。