**点击上方蓝字 关注我**
在很早之前我们分享过一篇关于如何分析和优化容器(docker)镜像的文章-《》。文章中我们分享了 dive 命令和使用,dive 主要作用在于能够分析docker镜像分层内容以及发现缩小docker/OCI镜像大小的方法,换话句话说,dive属于优化方法告诉你了,如何操作自己来(和现在很多漏洞扫描工具一样)!那么有没有一个工具,能够自动分析镜像,分析后自动缩小容器镜像?
Slim 介绍
一段话介绍Slim:一个不需要更改容器镜像中的任何内容,而能将其缩小多达 30 倍的命令工具(对于编译语言,缩小幅度甚至更大)。可以优化容器使用体验,让容器更好、更小、更安全,重点还能减少我们的工作量(容器优化分析这活,谁干谁知道,反正我是不想干了)!
🏠 项目信息
#Github地址
https://github.com/slimtoolkit/slim
🚀DEMO演示和优化前后说明
1、Slim提供交互式 CLI 提示,方便用户快速使用:
2、此视频演示了如何将镜像缩小 30 倍以上:
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优化镜像的架构流程图:
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
Slim 使用
一、基本参数说明:
#如果不输入任何,slim则将以交互提示模式启动,交互模式下自带命令提示。
slim [global flags]
[xray|build|profile|run|debug|lint|merge|images|registry|vulnerability|update|version|appbom|help] [command-specific flags] <IMAGE_ID_OR_NAME>
#参数详解
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- 显示可用的命令和全局标志
二、实践操作:
基于我们以前分享文章《》中的 https 网站镜像进行优化操作:
docker images|grep nginx
nginx latest 4f67c83422ec 3 weeks ago 188MB
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
docker images|grep nginx
nginx.slim latest f9ce92b996ba 44 seconds ago 13.3MB
nginx latest 4f67c83422ec 3 weeks ago 188MB
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
最后,我打开用优化后镜像启动的网站页面,网站正常:
最后
使用Slim优化镜像,无需我们手动优化 Dockerfile 文件,无需更改容器镜像的任何内容,可以继续使用基础构建镜像和检测包管理器等,这也代表着,无需为了优化容器镜像,而修改我们现有的构建工具和工作流程,简直完美(运维稳定才是第一要素)!
最后祝大家周末愉快,最近最雨水太多,大家出门注意安全!
往期文章推荐:
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...