RunV: 让 Docker 支持虚拟化容器

存储架构 2016-06-17

在此,我们很高兴地告知各位,我们已经初步完成了 runV (OCI 的基于虚拟化技术的容器运行时引擎) 与 Docker 的集成。这里,我们感谢 runV 团队的优秀工作,而且这次更新的一个特别之处在于,这些更新是由 Hyper 的开发团队和来自社区的参与者共同完成的,他们也是 runV 社区的重要部分,并在此接受致谢。

从去年夏末 OCI (开放容器促进组织)在 Linux 基金会下成立的时候起,Hyper 的 runV 就成为了 OCI 官方的基于虚拟化技术的容器运行时引擎实现[1]
,而另一个基于容器的实现就是 Docker 的 runC。很久以来,大家都期盼着能用 Docker 命令行同时启动 runC 和 runV 容器,不过,由于 Docker 的执行引擎在按照他们的节奏向前推进,这个愿望一直未能实现。

今年四月, docker 发布了 1.11,集成了 containerd,连接了 runC [2]
,这为支持更多的 runtime 铺就了道路,于是,runV 与 Docker/Containerd 的集成就再次提上了台面。

作为基于 hypervisor 的 OCI runtime,Hyper 的 runV 与 Docker 1.11+/Containerd 的集成工作是比较容易的, 经过简单的调试,就可以让 Docker 和 containerd 直接对接到 runv 上[3]
。但由于 containerd 是为 runC 量身定制的, runC本身也是一个不断改进中的实现,命令行会不断变化,并且包含一些专有的特性,这个集成有不少局限,对于 tty, exec, 网络等方面的支持仍有不足。

不过,得益于 docker/containerd 提供的良好接口,我们给出了一个对 tty, exec, 网络等方面兼容性更好的过渡方案 —— 我们在 runv 中附带了 runv-containerd 程序 [4]
,基于 containerd并针对 hypervisor 进行了一些调整, 利用 runV ,现在 docker 可以直接创建功能齐备的虚拟化容器了。

# in terminal #1
runv-containerd --debug --driver libvirt --kernel /opt/hyperstart/build/kernel --initrd /opt/hyperstart/build/hyper-initrd.img
# in terminal #2
docker daemon -D -l debug --containerd=/run/runv-containerd/containerd.sock
# in terminal #3 for trying it
docker run -ti busybox
# ls   # (already in the terminal of the busybox container)
# exit # (quit the container)

未来随着 OCI/containerd/runV 的进一步发展,相信我们还可以做到更好更完美的集成。

[1] https://github.com/opencontainers/runtime-spec/blob/master/implementations.md

[2] https://blog.docker.com/2016/04/docker-engine-1-11-runc/

[3] https://github.com/hyperhq/runv#run-it-with-docker

[4] https://github.com/hyperhq/runv/blob/master/containerd/README.md

责编内容by:我有分寸 (源链)。感谢您的支持!

您可能感兴趣的

记一次虚拟机无法挂载volume的怪异问题排查... 故障现象 使用nova volume-attach 命令挂载卷,命令没有返回错误,但是查看虚拟机状态,卷并没有挂载上。 故障原因 疑似虚拟机长时间运行(超过1年)后,libvirt无法执行live attach操作。 处理方法 将虚拟机关机,在关机状态下挂载卷,然后启动虚...
深入java虚拟机笔记之虚拟机即时编译详解... Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”,为了提高热点代码的执行效率,在运行时, 虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时...
Local Continuous Delivery Environment with Docker ... In this article I’m going to show you how to setup continuous delivery environment for building Docker images of our Java applications on the local...
【CIO知行社】何为制造业数字化转型的核心价值... 5月25日,由ENI经济和信息化网携手青岛CIO联盟共同举办的“2018制造业数字化转型之道CIO知行社”在青岛举行。山东科技大学计算机学院副教授徐建国、赛轮金宇集团制造IT信息部部长王海峰及多家制造业企业CIO以及来自销售易、中企通信、锐捷网络、广州视臻信息科技有限公司的服务专家齐聚一堂,共...
Bazel and Remote Caching Lately I have spent some time playing with remote caching of Bazel build artifacts. I am still exploring this, but here is a quick summary of what ...