Docker containerd summit

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 美国西部时间2月23号,Docker举办了名为“containerd summit”的技术交流会议。邀请容器生态伙伴和containerd developer一起深度讨论containerd的设计、后续规划以及和其他系统的集成。

美国西部时间2月23号,Docker举办了名为“containerd summit”的技术交流会议。邀请容器生态伙伴和containerd developer一起深度讨论containerd的设计、后续规划以及和其他系统的集成。阿里云作为Docker的战略合作伙伴和containerd项目的初始成员,也受邀参加了此次会议。除阿里云外, AWS、Google、IBM等公司也都有参加。


bcbf5c71f653242bd86c5b2e489bce8e77119e74

背景

随着容器技术的快速发展,生态逐渐地从围绕单机环境构建和运行容器化应用,发展为支持大规模容器编排技术。云平台成为了分布式网络操作系统,而容器成为了“进程”执行单元。容器可以动态地运行在不同宿主机环境之中。其中Kubernetes, Mesos, Docker诸强争霸,各胜擅长。2016年6月,Docker开始宣布在Docker Engine中内置Swarm mode,极大简化了容器编排的复杂性。但这也遭到了社区的强烈反弹。Google发起CRI(Container Runtime Interface 容器运行时接口)项目,通过shim的抽象层使得调度框架支持不同的容器引擎实现。Mesos推出了Unified Containerizer支持Docker 、Appc、OCI等不同的镜像格式,而无需Docker Engine。

面对这些挑战,2016年12月14日,Docker公司宣布将Docker Engine的核心组件Containerd捐赠到一个新的开源社区独立发展和运营,目标是提供一个标准化的容器runtime,注重简单、 健壮性、可移植性。由于Containerd只包含容器管理最基本的能力,上层框架可以有更大的灵活性来提供容器的调度和编排能力。阿里云,AWS, Google,IBM和Microsoft会作为Containerd的初始成员,会为项目贡献力量。

containerd分享

首先是Docker公司的同学介绍了containerd的设计理念,新特性以及Roadmap。

d74ef13204720432fec9c5312d02dfbbbae0db9d

整个分享内容干货十足,涵盖了containerd所有的模块。细节不再一一赘述,简单的总结下比较有趣的几个点

更灵活的镜像分发机制

当你用docker run image启动容器的时候,Docker会先检查镜像有没有在本地,如果没有,就从Registry里先把镜像拉下来。拉镜像的操作内置在Docker Daemon里,对于大多数用户来说,可以方便的使用Docker命令就可以把镜像从远程Docker Registry里下载好。但是这种方式很不灵活,镜像下载逻辑内置在Docker Daemon里,镜像只能存储在Docker Registry里,下载过程严格遵循Registry定义的API,下载过程使用HTTP/HTTPS。你可能希望以某些自定义的方式存储镜像,比如把镜像的层加密之后再存储,以免数据泄露造成安全风险,又或者希望使用诸如FTP、NFS的方式传输镜像,而不是HTTP,在Docker都不支持。

containerd解耦了镜像分发和使用。它能兼容Docker的镜像分发机制,但是并不限制你使用其他方式。在containerd里,你可以用自己的方式传输镜像,只要在最后把数据推给containerd就可以了。以前面的场景为例,你在NFS上保存加密之后的镜像,当你想用这些镜像启动容器的时候,只需要先把NFS挂载到本地,然后执行

cat /path/to/nfs/layer-path | decrypt you-secret-key | dist ingress

这是一个很简单的命令,先把layer发给decrypt解密,最后提交给containerd。dist是containerd提供的镜像管理工具。当然,上面的命令实际上只处理了镜像的一个层,用同样的方式继续处理镜像的其他层。 

Snapshot

Docker的Graph Driver负责把多个镜像层构造成一个完整的容器文件系统。在containerd里,用Snapshot替代了原来的Graph Driver。Snapshot设计上比Graph Driver更清晰简单,适配新的文件系统也更容易。目前已经支持overlay、btrfs,aufs不再支持。 

更灵活的容器网络

f872bece0baaed605e2131d3780ce802b10e2f6d
 

使用Docker启动容器时,你可以选择各种网络模式:none、host、bridge、overlay,也可以是通过Docker网络插件自定义的网络。在容器网络方面,现在有两套模型:Docker的CNM(Container Network Model)和K8s的CNI(Container Network Interface)。

containerd不明确定义网络模型,不限制你用CNM还是CNI还是其他的方式。在创建和启动容器之间,你可以设置容器的namespace,利用oci hooks对namespace初始化。不需要写插件,一个简单Shell脚本就够了。 

这些特性和containerd的定位有关:它面对的是上层的编排系统,而非直接用户,所以更注重灵活性。对于普通用户来说,使用Docker足以满足需求,更方便易用。 

K8S和containerd集成 

Google的Tim Hockin分享了k8s CRI(Container Runtime Interface)设计。涵盖了CRI架构、接口设计、第三方集成等方面。其中提到了CRI目前遇到的挑战。

a3494c6e8d8d16a02bf0fd43226a4fa7d2c31cc5

从功能上,只有Docker能完整支持k8s所有的功能,但是CRI+Docker的实现上有一些问题,一方面是层次太深了,整个请求栈从kubelet -> CRI shim -> docker daemon -> containerd -> runc,另一方面Docker里有很多功能k8s根本用不到,比如Volume,Networking等,这些功能在k8s里已经有了。所以containerd刚好解决了这些问题,完全满足k8s需求。
b051b1e58270138e2004a82990b754ec79870090
然后IBM的Phil Estes分享了gRPC的一些内容。


46a7501a5070b3f9c9433eec3af748d135ed1d75

下午则是针对conatinerd的一些设计和要添加的新功能进行讨论。这场讨论给我的印象非常深刻,在场的很多都是业界知名的大牛,年纪很大的老前辈,但是都在认真的讨论containerd里每个功能应该怎么实现,怎么设计接口才合理。这种对技术认真的追求和踏踏实实做技术的态度值得每一个程序员学习。

总结

从这次会议能充分的感受到containerd作为未来开放的容器runtime标准,得到了广泛的关注和支持。一方面containerd可以提供更加稳定和开放的容器runtime,另一方面允许上层编排系统灵活控制底层容器资源,满足了不同容器技术供应商的诉求。容器生态再添一并利器,无论对容器开发者还是最终用户,都是一件好事。

Containerd计划17年2Q发布,Google已经计划跟进并对K8S集成进行POC,计划17年4Q替换K8S底层相应实现。一个更轻量另外的容器管理引擎,能够帮助编排系统更灵活的与底层的容器交互。


最后,猜猜这是谁?

c585e5b557b3cff400cf5f5be4ca2c799c91865e


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
5月前
|
存储 Kubernetes Cloud Native
【云原生】k8s新版本与Docker和Containerd的关联关系
【云原生】k8s新版本与Docker和Containerd的关联关系
234 0
|
5月前
|
Kubernetes 开发工具 Docker
kubernetes环境从docker迁移到containerd
kubernetes环境从docker迁移到containerd
|
存储 Kubernetes 安全
Docker、Containerd、RunC分别是什么
Docker、Containerd、RunC分别是什么
Docker、Containerd、RunC分别是什么
|
存储 Kubernetes Shell
使用 shell 脚本二进制部署 k8s 环境 [支持 docker 和 containerd]
使用 shell 脚本二进制部署 k8s 环境 [支持 docker 和 containerd]
327 1
|
Kubernetes Docker 容器
Kubernetes1.7新特性:支持绕过Docker,直接通过Containerd管理容器
背景情况 从Docker1.11版本开始,Docker依赖于containerd和runC来管理容器,containerd是控制runC的后台程序,runC是docker公司按照OCI标准规范编写的一个操作容器的命令行工具,containerd这个后台程序还可以操作满足OCI标准规范的其他容器工具,也就意味着以后只要是按照OCI标准规范开发的容器工具,都可以被containerd使用起来。
1681 0
|
大数据 虚拟化 Docker
专访Docker大牛:Docker背后的真正引擎是Containerd
最近,我们可能经常会听到一种说法”Docker正在彻底改变IT!”这种说法是否存在炒作嫌疑呢?Docker对于现有格局的破坏性到底在哪里?Docker和虚拟机之间有什么区别?Docker真正的附加价值在哪里?本文我们将和Docker大牛Chanwit Kaewkasi来讨论这些话题。
1922 0
|
监控 网络协议 Docker
Docker 1.11 增强功能:直接在runC和containerd构建引擎
本文讲的是Docker 1.11 增强功能:直接在runC和containerd构建引擎,【编者的话】Docker的更新都会伴随着周围工具产品的升级,这次也不例外。1.11直接允许使用runC和containerd构建引擎,runC和containerd也跟随升级,这次还升级了Compose和Swa...
1483 0

相关产品

  • 容器镜像服务
  • 容器服务Kubernetes版