使用 diving 精简 docker 镜像 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
treexie
V2EX    Docker

使用 diving 精简 docker 镜像

  •  
  •   treexie 2023-09-17 21:14:36 +08:00 1329 次点击
    这是一个创建于 754 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 docker 支持多阶段构建(multi-stage builds)之后,构建运行时的镜像仅将在最后阶段复制依赖的文件即可,对于golangrust等仅需要复制运行文件即可,基于alpine为基础镜像构建,或者可直接使用slim精简化镜像,使用方式简单快捷。

    那么在生成镜像之后,如果想了解镜像的具体内容,细化分析优化镜像,那么可以尝试使用 diving ,它可展示 docker 镜像的每一层文件列表,它支持两种模式:命令行(默认模式)以及 web 模式,使用 rust 语言开发编译出的可执行文件,无需依赖任何东西,包括 docker 客户端。

    镜像 Layer 汇总

    docker 镜像由一层层的 layer 构成,第一层为基础镜像,而后面的镜像为构建脚本时生成的,在针对 layer 分析时需要一层层的来优化考虑。

    基础镜像为运行镜像的最底层,建议考虑选择alpine或各发行版的slim等精简的镜像,也仅安装运行时所依赖的模块,减少引入各种漏洞的风险。

    首先可以先看镜像汇总,其包括 4 项指标:

    • 分数: 根据 layer 中浪费的空间等数据计算的分值,可作为镜像优化的直观指标
    • 镜像大小: 镜像所有层级的汇总以及保存时压缩的大小
    • 其它层级总大小: 除基础镜像层的其它层级汇总,等同于项目构建所有添加的数据大小
    • 浪费的空间大小: 其它层级重复出现、修改或删除的文件汇总大小,此为主要优化点

    由上面的 4 点指标可快速得出 Layer 的分析结论,明确第一层基础镜像是否过大(如果是可选择基于 alpine ),其它层级总大小是否符合预期(如果比项目预期过大则按层分析所添加数据),浪费的空间大小是否可避免(对于后续层级重复更新、删除等文件是否无效操作),后续创建的层级是否需要每次创建等。

    镜像 Layer 层级分析

    若感觉某个 layer 数据不合理时,如何针对其做具体分析呢?docker hub提供了构建镜像每个 layer 对应的命令,简单的分析可直接查看命令是否合理。而 layer 包括了哪些文件,以及具体相关文件的具体信息则需要具体解析 layer 的目录树才可获取,docker运行时则是将所有 layer 解析后层级重叠汇总完整目录树。

    如上所示,镜像分层数据可按层级选择、按文件大小过滤、按是否更新或删除过滤(每层的文件均为新增,因此无需提供是否新增过滤)、文件名称搜索等功能,通过以上的筛选配置,则可快速分析该层数据是否有优化空间。常用的方法如下:

    • 选择分层+勾选更新或删除选项+展开所有目录: 查看每层更新或者删除了的文件,确认此类操作是否可以精简,避免无效数据的产生
    • 选择分层+勾选文件大小>=1MB+展开所有目录: 查看每层较大的文件(可按场景选择不同的大小过滤),判断此类文件是否应用运行时所需,若非必须可在生成时避免此类大文件的生产
    • 选择分层+关键字筛选: 可以筛选每层中的无效文件,例如压缩包、文本文件等(需要注意明确是否的确无需使用) ,也可下载该文件确认内容

    小结

    diving 提供快速便捷的镜像分析方式,可以定期针对项目镜像汇总生成分析报告,优化镜像构建逻辑,精简避免无效镜像数据。diving 提供了 terminal 与以 web 形式,web 的测试地址可以直接使用以下地址:https://diving.npmtrend.com/

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5192 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 09:28 PVG 17:28 LAX 02:28 JFK 05:28
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86