docker-slim 一个不需要更改容器镜像中的任何内容,而能将其缩小多达 30 倍的命令工具(对于编译语言,缩小幅度甚至更大)。可以优化容器使用体验,让容器更好、更小、更安全。
Slim优化镜像的架构流程图:
Slim 安装
mac上安装
1
2
3
4
5
6
7
8
9
10
|
brew install docker-slim
==> Fetching docker-slim
==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/docker-slim-1.40.11.m
################################################################################### 100.0%
==> Pouring docker-slim-1.40.11.monterey.bottle.tar.gz
🍺 /usr/local/Cellar/docker-slim/1.40.11: 7 files, 66.3MB
==> Running `brew cleanup docker-slim`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
|
查看安装版本
1
2
|
slim --version
slim version darwin/amd64|Transformer|1.40.11|latest|latest
|
二进制执行文件安装:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#一、按照不同的操作系统下载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 使用
基本参数说明:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#如果不输入任何,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- 显示可用的命令和全局标志
|
使用实践
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#查看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
|
参考