使用Docker-Slim对Docker镜像进行瘦身打包

注:Docker-Slim默认压缩会把镜像里面的一些核心文件、文件夹删掉,会导致压缩后的镜像在容器中运行时报错,用--include-path参数可以解决该问题,保护路径不被剔除,该参数可以多次使用,如下示例是压缩mysql镜像,压缩后体积缩小了10倍,仍然可以成功运行

docker-slim build --http-probe=false --include-path=/var/lib/mysql-files --include-path=/var/run/mysqld mysql:5.7

 

 


 

0. 概述

经常使用 Docker build 镜像的同学可能会有个感受,很多情况下明明我的应用很简单,为什么 build 出来的镜像就那么大,动不动就几百M。也许你像我一样,也曾经去学习了一下如何通过减少 build 的层数来瘦身,但是,当遇到使用 alphine:python 的时候,实在是打不动了。

后面我遇到了一款工具:Docker-Slim,事情似乎有所好转了,例如,alphine:python 虽然打不动了,那么用 python:slim 不好么?本文就介绍一下这款可以自动帮我们瘦身的镜像工具。

1. 安装 docker-slim

默认得,docker-slim 提供各种平台的编译包,这里我用的是 Linux 的 AMD64 版本,所以可以直接这么用:

  1. [root@liqiang.io]# wget https://downloads.dockerslim.com/releases/1.26.1/dist_linux.tar.gz
  2. [root@liqiang.io]# tar zxf dist_linux.tar.gz
  3. [root@liqiang.io]# mv dist_linux/* /usr/local/bin/
  4. [root@liqiang.io]# docker-slim --version
  5. docker-slim version linux|Transformer|1.26.1|2ec04e169b12a87c5286aa09ef44eac1cea2c7a1|2019-11-28_04:37:59PM

这样就简单地下载安装好了。

2. 使用 docker-slim

使用 Docker Slim 就很简单了,你可以和 Docker 命令一样用它来 build 镜像:

  1. [root@liqiang.io]# docker-slim build --from-dockerfile build/docker/Dockerfile --tag lukelau/laumonkey:release-8-g95cdcb3 .

这里需要注意的是,部分参数和 docker 有所区别,所以需要通过:docker-slim build --help 进行查看。我这里是一个简单的镜像,然后,来看一下用了 slim 和没用之间的镜像差别:

  1. [root@liqiang.io]# docker images | grep laumonkey
  2. lukelau/laumonkey release-8-g95cdcb3 96f41aa1382e 9 seconds ago 27.1MB
  3. lukelau/laumonkey release-8-g95cdcb3 e8f375463825 12 days ago 34.5MB

可以发现,本来就很简单的一个镜像,它也能强行帮你瘦身一波。

3. docker-slim 原理

我很好奇为什么 docker-slim 这么厉害能够进行瘦身,然后看了一下它的介绍,发现还挺复杂的,它会进行这些操作:

  • 检查容器的元数据(静态分析)
  • 检查容器的数据 (静态分析)
  • 检查运行中的应用 (动态分析)
  • 构建应用制品图
  • 通过收集到的应用数据来构建一个小的镜像
  • 通过收集到的应用数据自动生成各种安全框架

好吧,听上去比较厉害,以至于我都没有探究的欲望了。

4. Ref

 

如果你担心你的 Docker 镜像的大小,docker-slim 可以帮你排忧解难。

docker-slim 工具使用静态和动态分析方法来为你臃肿的镜像瘦身。要使用 docker-slim,可以从 Github 下载 Linux 或者 Mac 的二进制安装包。成功下载之后,将它加入到你的系统变量 PATH 中。

为举例需要,我参考 Docker 官方文档创建了一个名为 friendlyhello 的 Docker 镜像,该镜像大小为 194MB(如下所示):

你可以看到,对于一个简单的应用程序,我们必须下载 194 MB 的数据。让我们用 docker-slim 来看看它能减掉多少脂肪。

$ docker-slim build --http-probe friendlyhello 

docker-slim 工具对胖镜像进行一系列的检查、测量,最终创建一个瘦版本的镜像。让我们看看这个减过肥的大小吧。

正如你所看到的,镜像大小被减少到 24.9 MB。你可以启动这个容器,它将以同样的方式运行。docker-slim 工具支持 Java、Python、Ruby 和 Node.js 应用。

你自己试试,看看能减下来多少。在我的个人项目中,我发现它在大多数情况下都适用。你可以从其文档中了解更多关于 docker-slim 的信息:

https://github.com/docker-slim/docker-slim/blob/master/README.md

GitHub 地址:

https://github.com/docker-slim/docker-slim

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值