使用 DockerSlim 优化/精简 Docker容器镜像

在日常 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

官方项目地址:https://github.com/slimtoolkit/slim

» 本文链接:使用 DockerSlim 优化/精简 Docker容器镜像
» 转载请注明来源:刺客博客
» 如果文章失效或者安装失败,请留言进行反馈。