• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
导航菜单
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx
您的位置:首页 > 服务器 >虚拟化 > 谷歌技术人员解决Docker镜像体积太大问题的方法

谷歌技术人员解决Docker镜像体积太大问题的方法

作者: 字体:[增加 减小] 来源:互联网

本文主要包含docker,镜像等服务器相关知识,希望可以进行参考

虚拟机的问题

最初,大家都使用虚拟机作为软件的运行环境,对外提供服务。为了在虚拟机上运行你的 Service,你不得不运行一大堆程序:

系统进程
定时任务
SSH
安装 Agent
安装 Bash
安装一大堆 libs

其实,你仅仅只是想让你的 Service运行起来,但你不得不维护一个 40GB的虚拟机。

然后你开始试用 Docker

开始试用 Docker,你毫不犹豫选择了和之前虚拟机一样的镜像:Ubuntu 1404,将之前的虚机的内容复制到了 Docker镜像,安装了一堆软件,最后发现你的 Docker镜像有 8GB。

谷歌的 Docker镜像构建实践

找到最小的基础镜像

Alpine Linux是基于 musl和 BusyBox的操作系统,目的是为了为用户提供更高效的资源使用效率。它的特性是体积小,最小的 Alpine Linux体积可以只有 5MB。谷歌某些团队使用 Alpine Linux作为 Docker Build的基础镜像。

目的:仅仅为了运行 Service

谷歌认为,为了运行一个 Service,并不需要将那些无关联的包、程序打包到容器里,换句话说,Docker镜像里只留下需要用到的,其他的都删除,从而得到一个最小的镜像。这需要考虑以下几点:

1、程序编译后的二进制文件(从 Artifactory获取)

2、程序的所有依赖(从 Artifactory获取)

3、程序语言的运行时(libc,JRE,node,…)

4、任何程序和 Kernel之间的中间件

其实这一切的信息,构建工具都已经知道。

谷歌的构建工具 Bazel

介绍 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镜像构建文件

Distroless (https://github.com/GoogleCloudPlatform/distroless)是谷歌内部使用的镜像构建文件,包括 Java、Node、Python等镜像构建文件,Distroless仅仅只包含运行服务所需要的最小镜像,不包含包管理工具、shell命令行等其他功能。

为什么你需要这些镜像?这些镜像是谷歌和其他大公司的最佳实践的产物,经过了漏洞扫描,镜像会持续更新,保持安全性。

如何使用?Distroless提供的构建镜像的 BUILD文件,通过 Bazel可以直接进行构建。

谷歌为大家介绍了内部如何解决镜像过大的问题,以及进行大规模并发构建、测试所用到的构建工具 Bazel,并且开源了 Docker镜像构建文件 Distroless项目。如果你认为你的镜像也存在体积太大的问题,可以参考谷歌的实践,体验他们的工具。

总结

以上就是本文关于谷歌技术人员解决Docker镜像体积太大问题的方法的全部内容,希望对大家有所帮助。感兴趣的朋友可以可以继续参阅本站:

Docker探索namespace详解

详解Docker使用Linux iptables 和 Interfaces管理容器网络

浅谈Docker安全机制内核安全与容器之间的网络安全

如有不足之处,欢迎留言指出。

您可能感兴趣的文章:

  • docker中修改镜像容器的存放目录的方法
  • 在 docker 之间导出导入镜像的方法
  • Docker配置国内加速器加速镜像下载的方法
  • Dockerfile制作官方Tomcat镜像及镜像使用详解
  • 详解Docker 国内镜像的配置及使用
  • 详解在docker中制作自己的JDK+tomcat镜像
  • 如何给Docker配置官方国内加速镜像
  • docker 如何删除none镜像
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Docker实践8:Compose,docker实践compose
  • Docker buildx构建多平台镜像并推送到私有仓库的方法
  • Docker三个基本概念镜像(Image)容器(Container)仓库(Repository)
  • 什么是Docker?为什么要使用Docker
  • docker 开源的应用容器引擎
  • 如何给docker设置http代理
  • docker官方mysql镜像自定义配置详解
  • 详解Docker数据管理(数据卷&数据卷容器)
  • 如何利用Docker容器实现代理转发与数据备份详解
  • 详解Docker Swarm 在持续集成测试中的应用

相关文章

  • 详解nodejs之创建最小docker镜像
  • 谷歌技术人员解决Docker镜像体积太大问题的方法
  • 详解Docker方式实现MySql 主从复制(实践篇)
  • 编写最佳的Dockerfile的方法
  • Docker下mysql设置字符集的方法
  • Docker 配置固定IP及桥接的实现方法
  • 211高校利用红帽虚拟化方案 高效地集成IT系统
  • 如何通过vs2017的Dockerfile来生成镜像
  • 详解QEMU网络配置的方法
  • Openstack安装过程中遇到的问题汇总

文章分类

  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx

最近更新的内容

    • Docker 配置固定IP及桥接的实现方法
    • docker基础知识之挂载本地目录的方法
    • docker如何使用阿里加速器的方法
    • Hadoop编程基于MR程序实现倒排索引示例
    • 梦工厂数据中心:云和虚拟化不到20%
    • 详解如何利用docker快速构建MySQL主从复制环境
    • Docker创建MySQL容器的方法
    • docker pure-ftp 搭建ftp服务器的方法
    • 如何给docker设置http代理
    • Docker学习笔记之容器查看启动终止删除的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有