原创 陈然 Linux阅码场 2017-07-14
作者简介
陈然,开源爱好者,Linux/Fedora深度用户,2006年毕业之后从事Linux和虚拟化相关工作。2010年开始关注openstack等云计算技术,2014年开始学习docker等容器技术。目前就职于VMware vSAN项目组,业务时间积极参与开源相关项目。
感谢陈然参与Linux的征稿活动,《在Linuxer上把一个问题说清或者看懂有惊喜》,将获得人民邮电、电子工业、机械工业任意在销书一本。
-
近期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
...
- Linuxkit+Moby+Kubernetes组合形成
容器基础架构的闭环开源系统。正如docker自己所说:“if theecosystem succeeds, we succeed.” 技术改变世界,结尾彩蛋:
阮一峰: 技术的边界
https://ruanyf.github.io/survivor/future/boundary.html
来源:oschina
链接:https://my.oschina.net/u/4365362/blog/4766060