在日常 DevOps 与容器运维中,我们经常面对的问题是:容器镜像太大。在国外服务器上下载镜像还能接受,但是在国内服务器以及内网服务器上,每次通过国外服务器docker save后,发送到国内服务器,然后存储到本地,会非常麻烦。一个简单的 Python 应用可能会生成一个几百 MB 的镜像,而这直接影响了部署速度、安全性和资源利用率。今天要介绍的开源项目 SlimToolkit/slim,就是为了解决这个问题而生。
DockerSlim 是一个开源工具,它可以自动分析你的 Docker 镜像,移除不必要的内容,从而生成一个超小、安全、高性能的容器镜像,且不影响应用功能。官方宣称最大可优化30倍大小。
一、SlimToolkit 的核心特点
镜像瘦身:减少 10~30 倍的镜像大小。 自动化分析:无需修改源码或 Dockerfile。 提升安全性:去除未使用的二进制、库和配置。 跨语言支持:支持 Python、Node.js、Go、Java、.NET 等多种应用。
二、安装 DockerSlim
DockerSlim 提供了预编译的二进制文件,也可以使用 Docker 运行。推荐方式如下:
方式一:使用主机二进制(适用于 Linux/macOS)
curl -sL https://downloads.dockerslim.com/releases/1.40.0/dist_linux.tar.gz | tar -xz sudo mv dist_linux/docker-slim /usr/local/bin/
也可以使用官方一键脚本:
curl -sL https://raw.githubusercontent.com/slimtoolkit/slim/master/scripts/install-slim.sh | sudo -E bash -
方式二:通过 Docker 启动
docker run -it --rm \ -v /var/run/docker.sock:/var/run/docker.sock \ -v $(pwd):/work \ slimtoolkit/slim
三、快速上手:压缩一个 Python 应用镜像
假设我们有一个基于 Flask 的 Python 应用,Dockerfile 如下:
FROM python:3.9-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . CMD ["python", "app.py"]
构建镜像:
docker build -t flask-app .
现在我们用 DockerSlim 来“瘦身”:
docker-slim build flask-app
执行完后,你会看到输出中提示生成了一个名为 flask-app.slim 的镜像。我们来对比一下大小:
docker images | grep flask-app REPOSITORY TAG IMAGE ID CREATED SIZE flask-app.slim latest 4d2e0cc78 5 minutes ago 25MB flask-app latest 1c1f86e6a 10 minutes ago 300MB
同样的方式,我们可以对nginx镜像进行瘦身测试:
docker pull nginx docker-slim build nginx docker images|grep nginx nginx.slim latest 0e2f8367fca4 17 seconds ago 13.4MB nginx latest 1e5f3c5b981a 2 months ago 192MB
四、Slim 的工作原理简述
DockerSlim 采用“动态分析”技术:运行你的镜像应用,收集它实际使用的二进制、库、配置等,然后自动裁剪掉未用部分。
它其实是通过自动启动容器、探测端口、运行健康检查等方式,让应用“自举”,以识别其运行所需的最小依赖集。
Slim 还会自动生成瘦身报告、分析文件变化等内容,便于安全审查。
如何导出瘦身报告?
docker-slim build --report nginx