【DockerCon2017最新技术解读】使用Moby工具和Linuxkit定制容器系统

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 在云栖TechDay34期:DockerCon2017最新的技术解读中,阿里巴巴技术专家王炳燊为大家解读了在DockerCon2017中新发布的Moby项目和Linuxkit项目,为大家详细地介绍了Moby与Docker的区别,以及Linuxkit的优势所在,并通过示例介绍了如何利用Moby工具和Linuxkit定制容器系统。
摘要:在云栖TechDay34期:DockerCon2017最新的技术解读中,阿里巴巴技术专家王炳燊为大家解读了在DockerCon2017中新发布的Moby项目和Linuxkit项目,为大家详细地介绍了Moby与Docker的区别,以及Linuxkit的优势所在,并通过示例介绍了如何利用Moby工具和Linuxkit定制容器系统。

以下内容根据演讲嘉宾现场视频以及速记整理而成。

演讲嘉宾介绍:
王炳燊(花名:溪恒),具有丰富的Linux开发经验,对Docker技术有深入研究,多次提交Docker Patch。之前从事阿里云容器服务网络方案的设计与实现,专注于容器技术的基础环境研究。

本次分享主要围绕以下三个方面:
  • 为什么产生Moby项目
  • Linuxkit项目
  • 利用Moby工具和Linuxkit定制容器系统
515fb84e14253395b7d1a0d50d640f07a79723ab
本次分享会对Docker在DockerCon里面发布的争议比较多的两个新项目——Moby和Linuxkit做一些分析。大家都知道在DockerCon上,Docker公司把Docker项目改名成了Moby,并且发布了Linuxkit项目。所以在本次分享中,首先会介绍一下Moby项目,然后再介绍一下Linuxkit项目,最后再结合这两个项目去构建自己的一个容器系统。

一、为什么产生Moby项目

f0bd8e73b28aef0881e5893e1467c63b1b979678
在DockerCon的时候,Docker公司前CEO Solomon改了PR之后,在官方PR上面可以看到很多的“黑人问号”表情,大家对Docker的这个行为十分不看好,认为Docker就是改名成了Moby,以后Docker Run是不是就是通过Moby去Run,Docker是不是以后就变成一个商业化产品了,大家对这些问题不是很了解。在很多QQ交流群里面,大家也是不明白这件事情,就以为Docker改名成了Moby。其实在后面对于Docker的介绍中,说明了为了和更多的场景适配,所以把Docker里面的场景化的东西都抽象到Moby这个项目中,用来构建一个更加完善的生态系统。

为什么会产生Moby这个项目呢?可以看到最近几年里面,在2015年之后的Docker 1.17版本之后,引入了很多的新特性,比如Network、runC等,Docker的组件越来越多,提供支持的场景也越来越复杂,比如微服务、机器学习、物联网等,所以Docker镜像的下载量也呈现指数型上升,最终Docker运行的环境,也是越来越复杂,越来越多,比如在Linux,Windows,还有在嵌入式设备上。
1c76dea63151c46958f822b68ad92eab199796a2
所以Docker原本的发行版本已经不能适配于这些越来越复杂的场景了,举个例子,其实在IoT里面,树莓派的性能是比较好的,但是它去运行Docker的话,Docker就会占整个性能的一大部分,这样它上面就已经无法运行其他的一些自己的应用了,那用户要怎么去解决这些事情,难道自己去再写一个Docker容器引擎吗?这个成本是很高的,需要自己去造轮子。所以为了提供更加开放的生态,Docker公司把Docker项目中现在的一些组件抽象成Moby项目,这样系统构建者就可以通过Moby项目把现有的组件去进行组装,然后组装成自己所需要的一个容器引擎。
2d464737098ee55ba0bf5587c16f652514d0f261
Moby项目现在有80多个组件,通过这些组件,用户可以避免重复地去造轮子。用户可以按照自己的需要去组装组件,做出自己的一个容器系统。这些组件有一个标准化的调用方式,他们之间通过gRPC通信,它的语言也是可以去定制的,不会像之前一样必须用Go语言去写。通过标准化的方式,通过Moby这个项目就可以把这些组件进行组合,成为自己所依赖的容器系统。
a5b57df99ffe6be61da50474c705794db4868534
Moby项目的整个结构设计如下图所示。Moby里面会提供一个组件库的接口,这些组件就去实现这个组件库的接口,这些组件都是可以替换的,可以在不同的平台上有不同的实现。通过Moby的工具去把这些组件库的接口进行组装,比如现在Docker依赖了网络和Runtime这两个组件,然后就把这两个组件组装到一起,再去构建出来一个软件就是Docker。可能不需要依赖于很多Docker组件,就可以做出自己所需要的一个容器系统。
135805cdf464eaa09ae3ffdb111246f18c432a76
拿汽车发展史打个比方,最开始时就像是板车,整个系统由一个人完成,每个组件都要很紧密地耦合在一起,在Docker1.7之前就是这样子,只有单个的项目。在1.7之后它像老式汽车一样,很多东西会分到不同的厂房中去生产,最终去组装出来一个自己产品,当然这种方式只是说这些产品是分开制作的,不会相互影响,但是也没有做到很通用,在更多的场景中没有办法去适配。所以最终就会发展成现在这种汽车或者是说更广泛的应用场景,就是首先零件工厂去生产自己的零件,然后中间的组装工厂去采购不同的零件去组装成自己所需要的产品,这相当于Docker里面Moby项目。
591c020884770c80949a58d44c30badc68fd4627
Moby会带来哪些好处呢?首先它会提供更开放的生态,之前Docker的组件分布在不同的项目中,这样组件就可以单独去捐献给一些基金会,比如说containerd已经捐献给了CNCF,有了Moby这个生态之后,后续也会有更多的组件捐献给基金会,会为开发者提供更加开放的生态。其次可以通过不同的语言构建组件,因为组件之间是通过标准化的gRPC通信的,组件之间也允许客户通过自己的需求去定制不同的容器系统,比如说在IoT的环境下,用户就可以只把Runtime和网络去组装成一个它自己的容器系统,而不会受到Docker的限制。
4ee76fed579266c7308be60b50f9a611f9d38a32
大家最关心的是这会对Docker产生什么影响,Docker是不是变成了一个闭源的产品,以后会不会想要使用Docker就得买了。其实Docker官方也给出了下面的这个图,意思就是Docker项目现在改名成Moby项目,但是Docker会逐渐的从Moby项目中去抽象和剥离出来,作为Moby的一种组装方式,比如Docker依赖于这里面的一些库,它就特化成一种组装,组装成自己的Docker CE的版本,也就是Docker的社区版。Docker社区版后面也会继续做开源,所以用户和开发者不需要担心以后用Docker就会收费了,对于Docker用户来说,他也无须感知用户接口的变化,使用的命令还是Docker不是Moby,需要更多运维支持的可以选择Docker EE的版本,让Docker公司的工程师去替你去做运维和更复杂的线上支持,如果自己开发可以继续选择Docker社区版。对于架构师而言,现在就可以不强依赖于Docker项目,而是通过这些组件去拼装出来一个容器引擎去满足自己的需求。
42189d2be93fdb4b2e51e5937006e3b94a58567e
二、Linuxkit项目
接下来看一下最新发布组件——Linuxkit。Linuxkit是很多公司一起联合发布的容器时代的一个安全、精简、可移植的操作系统,那么它有哪些特性呢?首先Linuxkit是基于Moby构建出来一个操作系统,它可以包含Moby的组件生态,它的系统服务都是以容器方式运行的。可以对比一下以前的传统容器系统架构,就是以前可能在CentOS或者Ubuntu运行起来Docker引擎,在Docker引擎上面来去运行起来自己的服务,在这些容器引擎之外其实是有很多的系统服务,可能根本就使用不到,而他们也带来了很多的风险和系统负载。所以对于现在容器时代的这种操作系统而言,可以去抽象成更精简的系统,就是只有LinuxKit内核和容器引擎,系统服务也可以通过像Docker的应用一样去运行在容器引擎上面提供给整个系统,所有的系统服务也是以容器的方式插拔和升级或替换的。
ec3bcc3c03d5d6b20e32e09905f9393010b54cee
安全性
这种方式带来哪些好处呢?首先是对操作系统安全性的一个提升,对于很多企业来说,他们都会去买RedHat的系统,因为RedHat系统有官方支持,有很多的安全特性。其实它那些特性对Linuxkit来说是从根本上去就解决了的问题,比如说因为服务都是一些容器,所以在自己的系统中可以只组装需要的一些服务,这些服务也是在容器的沙箱中去运行的,比如说有一个DHCP的服务,它运行的时候可以去指定有哪些权限,就算有一些漏洞,可能它根本就没有权限去对系统去做那些操作,所以也从根本上解决了安全问题。其次如果这个服务真的存在漏洞,而且它能调动网络影响整个操作系统,对它进行升级也很方便,因为它就是一个容器,也可以对它进行替换。最后它的安全性还体现在它是由社区共建的,所有的Linuxkit组件都是开源的,有什么问题都会及时地得到解决。
540e407a98ea28606e72bd2f2383aebb7a3bc9e6
精简系统
它带来的另一个好处是比较精简。可以看一下正常系统大小,Ubuntu是1.4G,CentOS是680M,Linuxkit的裸系统的大小只有34M,因为它只有Kernel和一个容器引擎,所以系统特别小。而且服务少带来的好处就是启动很快,基本上在2至3秒钟就可以启动起来,这样就可以用到IoT设备上,可以不依赖很多的系统服务,所以它可以很快启动,而且会消耗更少的资源。Linuxkit也可以用到云计算场景上,这主要是看中它的动态可扩展性,比如哪一天要抢红包了,突然来了很多流量,用Linuxkit系统2至3秒钟就可以扩容出来一个实例,就可以更好地去应对。
48be55d1c6afd82c46173b5f46d574703e3d9936
可移植性
Linuxkit系统可能运行在很多环境上面,比如桌面、服务器以及大型主机等,架构上面可以有英特尔或者ARM,还有就是可能在裸机上或者在云平台的虚拟机上去运行。因为Linuxkit可以使用同一份配置,通过Moby去构建不同的参数去打出来不同的镜像,比如打出来ISO镜像适配于物理机,打出VHD去适配于虚拟机。
8aeb9bb62fc1f97f517980c62c6ea5ca3fbe8354
三、利用Moby工具和Linuxkit定制容器系统
然后看一下实际的描述文件要怎样写。它里面包含几个组件,它的操作系统里面的内核是哪一个镜像,它下面的容器引擎是哪些,然后还有就是下面去描述系统所依赖的服务容器,比如说例子里面加了DHCP,让它可以动态去获取网络配置,然后通过Moby的工具就可以一键去构建出来,还可以构建出不同格式,比如ISO、云平台的RAW和VHD。
bb1d654e8046afba412c22769db7093fa4fa7826
下面就是一个通过Moby工具和Linuxkit定制容器操作系统例子。左边是一个操作系统描述,用了一个Redis数据库的服务,导出出来一个ISO格式,通过Moby命令直接去构建镜像,这个镜像的大小只有41M,和其他的操作系统不是一个数量级的。
feb1dc3d71a187fc5be6d0a48bc6f2fd6ecfb7a3

然后去直接配置它的启动,可以看到它在三秒钟之内就能够启动完成。

b4023c35d8f8a77540c155adad697c09210628cc

相关文章
|
24天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
22天前
|
安全 持续交付 云计算
揭秘云计算中的容器化技术及其优势
揭秘云计算中的容器化技术及其优势
28 1
|
23天前
|
缓存 监控 开发者
掌握Docker容器化技术:提升开发效率的利器
在现代软件开发中,Docker容器化技术成为提升开发效率和应用部署灵活性的重要工具。本文介绍Docker的基本概念,并分享Dockerfile最佳实践、容器网络配置、环境变量和秘密管理、容器监控与日志管理、Docker Compose以及CI/CD集成等技巧,帮助开发者更高效地利用Docker。
|
25天前
|
Kubernetes Cloud Native Docker
云原生技术探索:容器化与微服务的实践之道
【10月更文挑战第36天】在云计算的浪潮中,云原生技术以其高效、灵活和可靠的特性成为企业数字化转型的重要推手。本文将深入探讨云原生的两大核心概念——容器化与微服务架构,并通过实际代码示例,揭示如何通过Docker和Kubernetes实现服务的快速部署和管理。我们将从基础概念入手,逐步引导读者理解并实践云原生技术,最终掌握如何构建和维护一个高效、可扩展的云原生应用。
|
26天前
|
Cloud Native 持续交付 Docker
Docker容器化技术:从入门到实践
Docker容器化技术:从入门到实践
|
6天前
|
人工智能 Kubernetes Cloud Native
荣获2024年AI Cloud Native典型案例,阿里云容器产品技术能力获认可
2024全球数字经济大会云·AI·计算创新发展大会,阿里云容器服务团队携手客户,荣获“2024年AI Cloud Native典型案例”。
|
19天前
|
Kubernetes Linux Docker
容器化技术Docker入门与实践
容器化技术Docker入门与实践
42 0
|
24天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
76 2
|
2天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
19 3
|
14天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
43 5