暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Docker镜像瘦身:Slim精准删除无用内容,打造极致轻量容器

编程与架构 2024-10-09
686
关注下方公众号,获取更多热点资讯

Docker镜像瘦身:Slim精准删除无用内容,打造极致轻量容器

目录

  1. 1. 简介

  2. 2. Github地址

  3. 3. Slim的优势

  4. 4. 优化效果

  5. 5. 安装与配置

    • • 安装 Slim 工具

    • • Mac 系统安装

    • • Docker 安装

  6. 6. 基础操作

    • • 创建 Slim 镜像

  7. 7. 使用说明

    • • 基本用法

    • • 常用命令

    • • 全局选项

  8. 8. CI/CD集成

  9. 9. 常见问题与解决方案

    • • 无法优化镜像

    • • 性能下降问题

  10. 10. 实际使用案例

  11. 11. 总结

简介

Slim 是一个强大的开源工具,专为优化 Docker 容器镜像而设计,能够减少镜像大小、提升安全性和运行效率。通过分析应用程序的运行时依赖关系,Slim 可以剔除不必要的组件,生成更小、更安全的 Docker 镜像。Slim 对开发人员极为友好,能够快速集成到现有的 CI/CD 流水线中,极大提高部署效率。

Github地址

项目开源地址:https://github.com/slimtoolkit/slim

使用样例代码地址:https://github.com/slimtoolkit/examples

Slim 的优势

  • • 体积缩小:Slim 可将镜像体积缩减 30% - 90%,大幅提升部署效率。

  • • 安全加固:通过移除无用文件和潜在漏洞,显著提高容器的安全性。

  • • 自动化优化:简化镜像优化流程,自动化镜像精简过程,易于集成到 CI/CD 流水线。

  • • 广泛兼容:支持多种语言和框架,如 Java、Python、Node.js 等,兼容性极高。

优化效果

Slim 优化后的镜像不仅体积大幅缩小,同时保持了必要的功能。以下是常见场景中的优化效果展示:

应用类型基础镜像原始大小精简后大小精简倍数
Node.jsubuntu:14.04432MB14MB30.85X
Pythonubuntu:14.04438MB16.8MB25.99X
Rubyubuntu:14.04433MB13.8MB31.31X
Gogolang:latest700MB1.56MB448.76X
Rustrust:1.312GB14MB147.16X
Javaubuntu:14.04743.6MB100.3MB7.4X
Haskellhaskell:82.09GB16.6MB125.32X

从以上优化效果可以看到,Slim 可以显著减少 Docker 镜像的大小。

安装与配置

安装 Slim 工具

Slim 提供了多种安装方式,推荐使用官方二进制文件快速安装。以下是常规的安装步骤:

curl -L -o ds.tar.gz https://github.com/slimtoolkit/slim/releases/download/1.40.11/dist_linux.tar.gz
tar -xvf ds.tar.gz
mv dist_linux/slim /usr/local/bin/
mv dist_linux/slim-sensor /usr/local/bin/

复制

安装完成后,执行以下命令检查是否安装成功:

slim --version
复制

Mac系统安装

如果你使用的是 MacOS,可以通过 Homebrew 安装 Slim:

brew install docker-slim
复制

安装完成后同样可以通过 slim --version
 来验证安装是否成功。

Docker安装

也可以通过 Docker 直接运行 Slim 镜像:

docker pull dslim/slim
复制

此方式不需要手动安装 Slim,而是直接使用官方镜像。

基础操作

创建 Slim 镜像

Slim 的核心功能之一是帮助用户创建更加精简的 Docker 镜像。你可以通过 slim build
 命令优化一个现有镜像,以下是基本流程:

  1. 1. 使用现有的应用程序镜像,例如 my-app

  2. 2. 执行 Slim 工具来优化该镜像:

slim build my-app:latest
复制

Slim 会对 my-app
 镜像进行分析,识别其中不必要的部分,并生成一个更小的镜像。

执行过程会输出优化报告,报告中会详细列出哪些文件被移除,哪些部分得到优化。

使用说明

基本用法

Slim 的命令行工具提供了多种操作。基本命令格式为:

slim [全局选项] [命令] <目标镜像ID或名称>
复制

如果你在命令行中只输入 slim
 而没有指定任何参数,工具将进入交互式模式,指导用户进行操作。

常用命令

  • • xray:静态分析目标容器镜像,帮助开发者理解镜像的构建细节,反向工程 Dockerfile。

  • • lint:分析 Dockerfile 中的指令,检测潜在的问题。

  • • build:最常用的命令,用于分析并优化镜像,生成一个更小的安全镜像。

  • • debug:调试运行中的容器,适合用于解决镜像的最小化问题。

  • • registry:执行镜像仓库的相关操作,如拉取、推送等。

  • • profile:对镜像进行初步分析和动态容器分析,但不会生成优化后的镜像。

  • • run:直接运行指定的容器。

  • • merge:合并两个镜像,常用于合并经过 Slim 优化后的镜像。

  • • images:查看镜像列表及其信息。

  • • vulnerability:扫描并检测容器镜像中的安全漏洞。

  • • version:显示当前 Slim 工具的版本信息。

  • • appbom:生成应用程序的 BOM(构建材料清单),列出应用中的组件和依赖项。

  • • update:更新 Slim 工具到最新版本。

  • • help:显示帮助信息和所有可用命令。

全局选项

Slim 还支持一些高级选项,用于自定义运行环境,比如日志输出、TLS 设置、Docker 主机地址等。

CI/CD集成

这里使用GitHub的CI来举例,在 GitHub Actions 中集成 Slim Toolkit 可以帮助自动化 Docker 镜像的优化流程。以下是如何设置一个基本的工作流,将 Slim Toolkit 集成到 GitHub Actions 中进行镜像构建和优化的过程。

基本步骤

  1. 1. 安装 Docker:确保 GitHub Actions 的运行器上已经安装了 Docker。

  2. 2. 安装 Slim Toolkit:下载并安装 Slim Toolkit。

  3. 3. 构建基础镜像:使用 Dockerfile
     构建应用的基础 Docker 镜像。

  4. 4. 优化镜像:使用 Slim 对构建的基础镜像进行分析和优化。

  5. 5. 推送优化后的镜像:将优化后的镜像推送到容器注册表(如 Docker Hub、GitHub Container Registry)。

示例工作流配置

下面是一个 .github/workflows/slim-docker.yml
 文件的示例,它展示了如何在 GitHub Actions 中设置上述流程:

name: Build and Optimize Docker Image with Slim

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  build-and-optimize:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout repository
      uses: actions/checkout@v3

    - name: Set up Docker Buildx
      id: buildx
      uses: docker/setup-buildx-action@v2

    - name: Log in to Docker Hub
      run: echo "${{ secrets.DOCKER_HUB_PASSWORD }}" | docker login -u ${{ secrets.DOCKER_HUB_USERNAME }} --password-stdin

    - name: Build the Docker image
      run: |
        docker build -t my-app:latest .

    - name: Install Slim
      run: |
        curl -L -o ds.tar.gz https://github.com/slimtoolkit/slim/releases/download/1.40.11/dist_linux.tar.gz
        tar -xvf ds.tar.gz
        mv dist_linux/slim /usr/local/bin/
        mv dist_linux/slim-sensor /usr/local/bin/
        rm -rf ds.tar.gz dist_linux

    - name: Optimize Docker image using Slim
      run: |
        slim build --http-probe --continue-after 20 --tag my-app:slim my-app:latest

    - name: Push the optimized Docker image
      run: |
        docker tag my-app:slim ${{ secrets.DOCKER_HUB_USERNAME }}/my-app:slim
        docker push ${{ secrets.DOCKER_HUB_USERNAME }}/my-app:slim

复制

解释

  • • 触发条件 (on
    )
    : 当有代码推送到 main
     分支或针对 main
     分支发起拉取请求时,该工作流会被触发。

  • • 运行器选择 (runs-on
    )
    : 使用 Ubuntu 最新版本作为 CI 环境。

  • • 检出仓库: 获取最新的代码。

  • • 设置 Docker Buildx: 设置 Docker Buildx 用于多平台镜像构建(如果需要的话)。

  • • 登录 Docker Hub: 使用存储在 GitHub Secrets 中的凭据登录 Docker Hub。

  • • 构建基础镜像: 根据当前目录下的 Dockerfile
     构建基础镜像。

  • • 安装 Slim Toolkit: 下载并安装 Slim Toolkit。

  • • 优化镜像: 使用 Slim 对基础镜像进行优化,并标记为 my-app:slim

  • • 推送优化后的镜像: 将优化后的镜像推送到 Docker Hub 或其他指定的镜像仓库。

常见问题与解决方案

无法优化镜像

在某些情况下,Slim 可能无法正确优化镜像。此时可以采取以下步骤解决:

  • • 检查依赖项:如果应用程序依赖动态库,请确保这些库在优化过程中没有被删除。

  • • 指定保留路径:使用 --include-path
     参数指定需要保留的路径,例如:

    slim build --include-path /app/config my-app:latest
    复制

性能下降问题

有时,优化后的镜像可能会出现性能下降的情况。为避免这种情况,可以尝试以下操作:

  • • 启用 HTTP 探测:使用 --http-probe
     参数,确保在优化时自动检测应用的所有 HTTP 端点,确保应用的正常访问。

    slim build --http-probe my-app:latest
    复制
  • • 分析优化报告:检查 Slim 的分析报告,确保关键文件没有被删除。如果发现重要文件被错误地删除,可以使用 --include-path
     或 --exclude-path
     参数来调整。

实际使用案例

案例背景

开发团队使用了 python:3.8-slim-buster
 作为基础镜像,初始镜像大小约为 126MB。随着应用的增长,镜像中的依赖项越来越多,镜像大小膨胀至 500MB。

镜像优化步骤

  1. 1. 安装 Slim 工具团队决定在本地进行初步测试,并在本地环境中安装 Slim:

    curl -L -o ds.tar.gz https://github.com/slimtoolkit/slim/releases/download/1.40.11/dist_linux.tar.gz
    tar -xvf ds.tar.gz
    mv dist_linux/slim /usr/local/bin/
    mv dist_linux/slim-sensor /usr/local/bin/

    复制
  2. 2. 优化 Docker 镜像在优化镜像之前,首先确保应用程序可以在 python:3.8-slim-buster
     镜像中正常运行。确认应用能够运行后,执行 Slim 工具:

    slim build --include-path /app/config --http-probe my-flask-app:latest
    复制
  3. 3. 结果优化后,镜像大小从 500MB 减少至 80MB,体积减少了 84%。同时,自动化的 HTTP 探测确保了应用在优化后仍能正常运行。

总结

Slim 是一个功能强大的工具,可以显著减少 Docker 镜像的体积,提高应用程序的安全性和运行效率。通过有效使用 Slim 工具,开发人员可以轻松优化镜像,提升 CI/CD 的效率,尤其在 Kubernetes 等云原生环境中,Slim 能显著改善部署和运行性能。


欢迎关注我的公众号“编程与架构”,原创技术文章第一时间推送。



文章转载自编程与架构,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论