注: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 版本,所以可以直接这么用:
[root@liqiang.io]# wget https://downloads.dockerslim.com/releases/1.26.1/dist_linux.tar.gz
[root@liqiang.io]# tar zxf dist_linux.tar.gz
[root@liqiang.io]# mv dist_linux/* /usr/local/bin/
[root@liqiang.io]# docker-slim --version
docker-slim version linux|Transformer|1.26.1|2ec04e169b12a87c5286aa09ef44eac1cea2c7a1|2019-11-28_04:37:59PM
这样就简单地下载安装好了。
2. 使用 docker-slim
使用 Docker Slim 就很简单了,你可以和 Docker 命令一样用它来 build 镜像:
[root@liqiang.io]# docker-slim build --from-dockerfile build/docker/Dockerfile --tag lukelau/laumonkey:release-8-g95cdcb3 .
这里需要注意的是,部分参数和 docker 有所区别,所以需要通过:docker-slim build --help
进行查看。我这里是一个简单的镜像,然后,来看一下用了 slim 和没用之间的镜像差别:
[root@liqiang.io]# docker images | grep laumonkey
lukelau/laumonkey release-8-g95cdcb3 96f41aa1382e 9 seconds ago 27.1MB
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)