容器生态系统的发展与演变之我见

随着Docker更名为Moby,其生态正经历变革。Moby项目提供模块化组件,允许用户自定义容器环境。同时,LinuxKit致力于打造轻量级的容器运行平台,目标是统一容器运行时,简化跨平台部署。LinuxKit通过容器化服务,甚至尝试将整个操作系统容器化。Docker的这些举措挑战了传统虚拟机,模糊了容器与虚拟机的界限,可能重塑容器操作系统市场,并对Kubernetes等管理平台产生影响。
摘要由CSDN通过智能技术生成

近期docker收回商标,开源项目docker改名为moby。这个无可厚非。docker期望复制redhat的成功模式,docker-moby的关系就对应着redhatlinux-fedora。Moby(https://github.com/moby/moby)包含很多容器化的后台组件(containerd,swarmkit等)。docker希望借助moby搭积木的方式,让容器爱好者进行各种各样的组合。完全由开源社区驱动。

docker公司推出linuxkit开源项目,剑指容器运行平台。容器诞生于linux平台,依赖LXC资源隔离。站稳linux后,docker进而想推广容器到win/mac平台。主要是依赖虚拟化软件,先创建linuxvm,然后在vm里配置docker环境。比如说起初的dockerfor mac。参考docker machine(https://docs.docker.com/machine/)项目。主要目的就是支持各大虚拟机provider,方便部署docker运行时。但这仅仅是解决了简单部署,用户使用起来感觉docker依赖虚拟机。而这点恰恰跟市场上的主流期望相反:docker不是下一个银弹,用来代替虚拟机的吗?
孰不可忍的情况下,docker推出linuxkit,希望借此一统容器运行平台的控制平面。最大的改变(亮点)有两种:

everything service is container
立足于linux平台,精简linuxkernel和服务启动流程。让docker containd变身id为1号的根进程。后续所有系统服务都采用容器方式运行。再后续的方向,无非裸机启动。容器已然演变成一个操作系统(任务会很艰巨,因为设备管理等常见os功能,这是另一项工程。)同时采用moby的“积木”模块,可以让用户迅速启动一套复杂的容器系统。

docker can run on all platform
扩展至所有平台。三大主流linux/win/mac一网打尽。利用linuxkit打包linuxkernel和initrd img,然后用平台虚拟化软件来启动这个docker os。这里容器和vm的界限已经很模糊,既是容器又是虚拟机。而linuxkit本身用go语言编程,运行在其他平台不是难事。
linuxkit初探案例:
http://feisky.xyz/2017/04/19/LinuxKit/
这种思路跟目前市场已经存在的
hypercontainer(https://hypercontainer.io/)

vSpherevic(https://vmware.github.io/vic/)
异曲同工。很难讲谁抄袭谁的思路。
假如linuxkit的原生运行容器方式大获成功,目前市场的各大容器os没有生存空间。docker基本平台一统天下,后面就到来发展生态圈的时刻。

kubernetes作为容器管理平台,完美的诠释来google的技术实力和战略眼光。但毕竟是容器的管理平台,需要定义在哪里运行容器。开源之后,各大IAAS平台纷纷支持,推出相应的cloudprovider,方便k8s进行控制平面。但google留了心眼,从一开始的插件设计,就考虑到支持不同的容器运行时。就是说docker那套运行时可以替换成第三方。这也从着侧面反应docker的亮点在于标准化的image。同时主导社区推出OCI基金会,标准化容器运行时,避免docker运行时一家独大。
Establishedin June 2015 by Docker and other leaders in the container industry, the OCIcurrently contains two specifications: the Runtime Specification (runtime-spec)and the Image Specification (image-spec). The Runtime Specification outlineshow to run a “filesystem bundle” that is unpacked on disk. At a high-level anOCI implementation would download an OCI Image then unpack that image into anOCI Runtime filesystem bundle. At this point the OCI Runtime Bundle would berun by an OCI Runtime.

容器运行时标准文档:
https://github.com/opencontainers/runtime-spec/blob/master/runtime.md
各家厂商按照标准接口实现自己的runtime。当然目前docker捐献的containerd是最主流支持。
比如hypercontainer采用hypervisor方式的运行时:
https://github.com/hyperhq/runv
采用标准意味着你可以用docker的命令来运行hyercontainer的容器方式。下面的例子实际上在运行hypercontainer。

interminal #1

$docker-containerd --debug -l/var/run/docker/libcontainerd/docker-containerd.sock \ --runtime /path/to/runv–runtime-args --debug --runtime-args --driver=libvirt \ --runtime-args–kernel=/opt/hyperstart/build/kernel \ --runtime-args–initrd=/opt/hyperstart/build/hyper-initrd.img \ --start-timeout 2m

interminal #2

$docker daemon -D -l debug–containerd=/var/run/docker/libcontainerd/docker-containerd.sock

interminal #3 for trying it

$docker run busybox ls bin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值