为什么Google不存在Docker镜像体积太大的问题?

Matthew Moore 是谷歌公司的资深工程师,专注于谷歌 Docker 技术的应用,他是谷歌最早落地 Docker 技术团队的核心成员。在 2017 swampUP 大会的演讲上,他为大家介绍了谷歌使用 Docker 技术的心得。本文对演讲视频进行了整理和归纳,原视频地址:
https://www.youtube.com/watch?v=lviLZFciDv4&list=PLY0Zjn5rFo4MFIwbYtQx4wD1KK7HleIzk&index=15
最初,大家都使用虚拟机作为软件的运行环境,对外提供服务。为了在虚拟机上运行你的 Service,你不得不运行一大堆程序:
系统进程
定时任务
SSH
安装 Agent
安装 Bash
安装一大堆 libs
其实,你仅仅只是想让你的 Service 运行起来,但你不得不维护一个 40GB 的虚拟机。
开始试用 Docker,你毫不犹豫选择了和之前虚拟机一样的镜像:Ubuntu 1404, 将之前的虚机的内容复制到了 Docker 镜像,安装了一堆软件,最后发现你的 Docker 镜像有 8GB。
Alpine Linux 是基于 musl 和 BusyBox 的操作系统,目的是为了为用户提供更高效的资源使用效率。它的特性是体积小,最小的 Alpine Linux 体积可以只有 5MB。谷歌某些团队使用 Alpine Linux 作为 Docker Build 的基础镜像。
谷歌认为,为了运行一个 Service,并不需要将那些无关联的包、程序打包到容器里,换句话说,Docker 镜像里只留下需要用到的,其他的都删除,从而得到一个最小的镜像。这需要考虑以下几点:
1、程序编译后的二进制文件(从 Artifactory 获取)
2、程序的所有依赖(从 Artifactory 获取)
3、程序语言的运行时(libc,JRE,node,...)
4、任何程序和 Kernel 之间的中间件
其实这一切的信息,构建工具都已经知道。
介绍 Bazel 之前,先介绍下谷歌的开发模式,对于服务器端代码库,谷歌的开发流程如下:
1、所有的服务器端代码库都在一个巨大的版本控制系统里
2、每个人都用 Bazel 构建软件
3、不同的组负责源码树的不同部分,所有的组件都是作为 BUILD 目标来用
4、分支主要是用来管理发布,所以每个人都在最新版本上开发软件
Bazel(https://bazel.build/)是 Google 内部用来构建自己的服务器端软件的工具。目前变成谷歌公司贡献的一个开源项目,目的是帮助开发者将软件的构建和测试变得更快、更可靠。
从上图可以看到,Bazel 有 WORDSPACE 的概念,WORDSPACE 文件用来准备 Docker 镜像构建所依赖的所有材料和来源。BUILD 文件用来告诉 Bazel 这个镜像应该使用什么命令进行构建,以及如何构建、如何测试。
使用 Bazel 的声明式语言: WORKSPACE 和 BUILD,开发者可以用文件描述整个构建和部署的环境。谷歌使用 Bazel 进行 Docker 的构建已经很多年,它为谷歌带来以下收益:
1、支持跨平台构建,分布式缓存,优化依赖解析,并行构建,增量构建。
2、支持多语言(Java, C++, Android, iOS, Go 等等)。
3、跨平台。
4、水平扩展和自定义扩展。
Bazel 是以下理念的奠基石:由于 Bazel 需要所有的依赖都被完整地指定,我们可以预测改动影响了哪些程序和测试,并在提交前执行他们。
Distroless (https://github.com/GoogleCloudPlatform/distroless) 是谷歌内部使用的镜像构建文件,包括 Java、Node、Python 等镜像构建文件,Distroless 仅仅只包含运行服务所需要的最小镜像,不包含包管理工具、shell 命令行等其他功能。
为什么你需要这些镜像?这些镜像是谷歌和其他大公司的最佳实践的产物,经过了漏洞扫描,镜像会持续更新,保持安全性。
如何使用?Distroless 提供的构建镜像的 BUILD 文件,通过 Bazel 可以直接进行构建。
谷歌为大家介绍了内部如何解决镜像过大的问题,以及进行大规模并发构建、测试所用到的构建工具 Bazel,并且开源了 Docker 镜像构建文件 Distroless 项目。如果你认为你的镜像也存在体积太大的问题,可以参考谷歌的实践,体验他们的工具。
https://www.bazel.build/
https://github.com/GoogleCloudPlatform/distroless
王青,目前任职 JFrog 中国首席架构师,之前在 IBM,HPE,爱奇艺,新浪,VIPKID 等公司做过研发和架构,是有十多年开发经验的互联网老兵,专注于软件生命周期管理,微服务架构,云原生应用,容器化等领域。
国际化架构体系架构、大数据平台架构、微服务架构、数据库架构等等,在这场全球架构师峰会里,我们邀请到 Microsoft、Google、Facebook、Twitter、Uber、Tumblr、Twitch、Snapchat 等资深架构师为你一一解惑。目前大会 9 折报名中,上百个技术案例,欢迎点击 阅读原文 了解。

关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

随时掌握互联网精彩
- 1 习近平和青年朋友的10个暖心瞬间 7904317
- 2 贵州游船倾覆事故已造成3人死亡 7809112
- 3 外交部国防部罕见接连发声 7714078
- 4 这个五一的文旅体验不要太丰富 7619019
- 5 300亿饮料巨头进军半导体 7523974
- 6 乙游逐渐成年轻人的恋爱代餐 7427970
- 7 女子在沙滩玩20分钟捡了小半兜钉子 7334238
- 8 景区飞天魔毯失控 多名游客被甩出 7236774
- 9 网红猫爷掀起猫步模仿潮 7138981
- 10 三个“爆品” 藏着中国外贸秘籍 7046925