编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

一条命令将容器镜像缩小10倍,不用改容器任何内容,Star 18.4K+!

wxchong 2025-04-09 21:33:23 开源技术 12 ℃ 0 评论

在很早之前我们分享过一篇关于如何分析和优化容器(docker)镜像的文章-《一条命令分析、优化 Docker 镜像,运维神器,Star 33K+ !》。文章中我们分享了 dive 命令和使用,dive

主要作用在于能够分析docker镜像分层内容以及发现缩小docker/OCI镜像大小的方法,换话句话说,dive属于优化方法告诉你了,如何操作自己来(和现在很多漏洞扫描工具一样)!那么有没有一个工具,能够自动分析镜像,分析后自动缩小容器镜像?

所以,我们今天给大家分享的是一个自动分析容器镜像,还能自动缩小容器镜像的命令工具-Slim,

主打一个能偷懒就绝不动手


01

Slim 介绍

一段话介绍Slim:一个不需要更改容器镜像中的任何内容,而能将其缩小多达 30 倍的命令工具(对于编译语言,缩小幅度甚至更大)。可以优化容器使用体验,让容器更好、更小、更安全,重点还能减少我们的工作量(容器优化分析这活,谁干谁知道,反正我是不想干了)!

项目信息

#Github地址
https://github.com/slimtoolkit/slim

DEMO演示和优化前后说明

1、Slim提供交互式 CLI 提示,方便用户快速使用:


3、目前官方给出了镜像的优化前后对比说明(本文展示部分):

Node.js 应用程序镜像:

  • 来自 ubuntu:14.04 - 432MB => 14MB (最小化30.85X )
  • 来自 debian:jessie - 406MB => 25.1MB (最小化16.21X )
  • 来自 node:alpine - 66.7MB => 34.7MB (缩小1.92 倍)
  • 来自 node:distroless - 72.7MB => 39.7MB (最小化1.83倍)


Python 应用程序镜像:

  • 来自 ubuntu:14.04 - 438MB => 16.8MB (最小化25.99X )
  • 来自 python:2.7-alpine - 84.3MB => 23.1MB (最小化3.65X )
  • 来自 python:2.7.15 - 916MB => 27.5MB (最小化33.29X )
  • 来自 centos:7 - 647MB => 23MB (最小化28.57X )
  • 来自 centos/python-27-centos7 - 700MB => 24MB (缩小至29.01X )
  • 来自 python2.7:distroless - 60.7MB => 18.3MB (最小化3.32X )


Ruby 应用程序镜像:

  • 来自 ubuntu:14.04 - 433MB => 13.8MB (最小化31.31X )
  • 来自 ruby:2.2-alpine - 319MB => 27MB (最小化11.88X )
  • 来自 ruby:2.5.3 - 978MB => 30MB (最小化32.74X )


Go 应用程序镜像:

  • 来自 golang:latest - 700MB => 1.56MB (最小化448.76X )
  • 来自 ubuntu:14.04 - 531MB => 1.87MB (最小化284.10X )
  • 来自 golang:alpine - 258MB => 1.56MB (最小化165.61X )
  • 来自 centos:7 - 615MB => 1.87MB (最小化329.14X )


Rust 应用镜像:

  • 来自 rust:1.31 - 2GB => 14MB (最小化到147.16X )


Java 应用程序镜像:

  • 来自 ubuntu:14.04 - 743.6 MB => 100.3 MB


PHP 应用程序镜像:

  • 来自 php:7.0-cli - 368MB => 26.6MB (最小化13.85X )


系统架构

Slim优化镜像的架构流程图:


02

Slim 安装

Slim的安装比较简单,主要就是下载可执行二进制文件:

本文采用的腾讯云主机,Ubuntu 22.04版本机型,直接下载的最新的Linux 二进制包进行安装。

#一、按照不同的操作系统下载ZIP包


#最新的 Mac 二进制文件
curl -L -o ds.zip https://github.com/slimtoolkit/slim/releases/download/1.40.11/dist_mac.zip


#最新的 Mac M1 二进制文件
curl -L -o ds.zip https://github.com/slimtoolkit/slim/releases/download/1.40.11/dist_mac_m1.zip


#最新的 Linux 二进制文件(本文机器采用)
curl -L -o ds.tar.gz https://github.com/slimtoolkit/slim/releases/download/1.40.11/dist_linux.tar.gz


#最新的 Linux ARM 二进制文件
curl -L -o ds.tar.gz https://github.com/slimtoolkit/slim/releases/download/1.40.11/dist_linux_arm.tar.gz


#最新的 Linux ARM64 二进制文件
curl -L -o ds.tar.gz https://github.com/slimtoolkit/slim/releases/download/1.40.11/dist_linux_arm64.tar.gz


#二、解压该包并将其移动到 bin 目录
tar -xvf ds.tar.gz  or unzip  ds.zip
mv  dist_linux/slim /usr/local/bin/
mv  dist_linux/slim-sensor /usr/local/bin/


#或者采用一键安装脚本安装Slim
curl -sL https://raw.githubusercontent.com/slimtoolkit/slim/master/scripts/install-slim.sh | sudo -E bash -

后续Slim的升级,也是通过命令进行升级:

slim update

03

Slim 使用

一、基本参数说明:

#如果不输入任何,slim则将以交互提示模式启动,交互模式下自带命令提示。
slim [global flags] 
[xray|build|profile|run|debug|lint|merge|images|registry|vulnerability|update|version|appbom|help] [command-specific flags] 


#参数详解
xray- 对目标容器镜像执行静态分析(包括对镜像的 Dockerfile 进行“逆向工程”)
lint- 分析 Dockerfiles 中的容器指令(Docker 镜像支持正在开发中)
build- 分析、分析和优化容器镜像,生成支持的安全配置文件。这是最常用的命令
debug- 调试正在运行的目标容器。此命令对于排除从最小/缩小或常规容器映像创建的正在运行的容器的故障很有用
registry- 执行注册表操作(pull)
profile- 执行基本的容器镜像分析和动态容器分析,但不会生成优化的镜像
run- 运行一个或多个容器(目前运行类似于的单个容器docker run)
merge- 合并两个容器镜像(优化以合并最小化镜像)
images- 获取有关容器镜像的信息(例如slim --quiet images:)
vulnerability- 执行漏洞相关的工具和操作(epss)
version- 显示版本信息
appbom- 显示应用程序 BOM(应用程序组成/依赖项)
update- 将 Slim 更新至最新版本
help- 显示可用的命令和全局标志

二、实践操作:

基于我们以前分享文章《一个一键即可生成SSL证书的工具,零配置,从此告别繁琐,Star 46K+!》中的 https 网站镜像进行优化操作:

#查看Nginx进行的大小,可以看到镜像有188M
docker images|grep nginx                     
nginx  latest 4f67c83422ec   3 weeks ago     188MB


#我们采用Slim进行优化
slim build 52f6af495b48


md=build info=param.http.probe message='using default probe' 
cmd=build state=started
.............................
cmd=build info=results artifacts.seccomp='nginx-seccomp.json' 
cmd=build info=results artifacts.apparmor='nginx-apparmor-profile' 
cmd=build state=done


#大概持续20S左右,优化完成后,我们从新查看下镜像大小
docker images|grep nginx 
nginx.slim    latest   f9ce92b996ba   44 seconds ago   13.3MB
nginx         latest   4f67c83422ec   3 weeks ago      188MB


#由原来188M缩小到14M不到,缩小10x,我们在重试用优化后的镜像启动网站
docker run -d -p 443:443 -v /opt/https-nginx/etc/nginx.conf:/etc/nginx/nginx.conf -v /opt/https-nginx/index.html:/usr/share/nginx/html/index.html -v /opt/https-nginx/cert/:/etc/nginx/ssl/ --name https-nginx nginx.slim:latest


#通过日志观察启动情况,输出日志正常
docker logs  -f https-nginx


/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up

最后,我打开用优化后镜像启动的网站页面,网站正常:

04

最后

使用Slim优化镜像,无需我们手动优化 Dockerfile 文件,无需更改容器镜像的任何内容,可以继续使用基础构建镜像和检测包管理器等,这也代表着,无需为了优化容器镜像,而

修改我们现有的构建工具和工作流程,简直完美(运维稳定才是第一要素)!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表