前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用docker-slim为你的docker镜像瘦身

使用docker-slim为你的docker镜像瘦身

原创
作者头像
贺春旸的技术博客
发布于 2024-07-09 08:23:43
发布于 2024-07-09 08:23:43
9700
举报
文章被收录于专栏:DBA 平台和工具DBA 平台和工具

当谈到技术和资源管理时,确实并非所有事物越大越好,这点尤其在 Docker 镜像的管理上体现得淋漓尽致。随着镜像大小的增加,云存储和运维成本也随之增加。因此,有效地减小 Docker 镜像的尺寸对于降低成本和提高效率至关重要。

举例来说,以hcymysql/mysql_slowquery:2024-07-04镜像为例,原始文件大小达到3.53GB。在这种情况下,使用 Docker-slim 工具可以显著地优化镜像,减少其占用的存储空间和资源。这种优化不仅可以节省云端存储成本,还能加速镜像的部署和传输过程,提升整体的效率和性能。

通过这种方式,不仅可以有效地管理资源消耗,还能够提高整体系统的可维护性和可扩展性,是现代云计算环境中不可或缺的一环。

docker原始镜像
docker原始镜像

瘦身操作

代码语言:bash
AI代码解释
复制
shell> wget https://github.com/slimtoolkit/slim/releases/download/1.40.11/dist_linux.tar.gz
shell> tar zxvf dist_linux.tar.gz
shell> cd dist_linux

shell> ./docker-slim build \
--http-probe=false \
--expose 80 \
--expose 3306 \
--include-path=/var/www/html \
--include-path=/var/log/httpd \
--include-path=/run/httpd \
--include-path=/tmp \
--include-path=/data \
--include-path=/etc \
--include-path=/usr/ \
--include-path=/sbin/ \
--include-path=/root/ \
--include-path=/bin/ \
--include-bin=/usr/sbin/httpd \
--include-bin=/usr/libexec/mysqld \
--include-bin=/usr/bin/php \
--include-bin=/usr/bin/systemctl \
--include-bin=/bin/bash \
--cmd "/usr/sbin/init" \
<IMAGE ID>

参数解读

1 ./docker-slim build

这是运行 docker-slim 以构建一个新的优化后的 Docker 镜像的主要命令。

2. --http-probe=false

禁用 HTTP 探测功能。HTTP 探测用于自动检测并包含容器公开的 HTTP 端点所需的任何依赖项。

将其设置为 false 禁用此行为。

3. --expose 80--expose 3306

显式公开端口 80(通常用于 HTTP)和 3306(通常用于 MySQL)。这是为了使这些端口可供外部访问。

4. --include-path=<path>: 指定文件系统中要包含在优化镜像中的路径。列出的路径有:

  • /var/www/html:通常是 Web 服务器的根目录。
  • /var/log/httpd:包含 HTTP 服务器日志的目录。
  • /run/httpd:HTTP 服务器在运行时使用的目录。
  • /tmp:临时文件存储
  • /data:通用数据目录。
  • /etc:配置文件。
  • /usr/:用户二进制文件和程序。
  • /sbin/:系统二进制文件。
  • /root/:root 用户的主目录。
  • /bin/:基本命令二进制文件。

5. --include-bin=<binary>: 指定要包含在优化镜像中的单个二进制文件。列出的二进制文件有:

  • /usr/sbin/httpd:Apache HTTP 服务器。
  • /usr/libexec/mysqld:MySQL 服务器。
  • /usr/bin/php:PHP 解释器
  • /usr/bin/systemctl:Systemd 服务管理器。
  • /bin/bash:Bash shell。

6. --cmd "/usr/sbin/init": 指定容器启动时要执行的命令。在本例中,是 init 进程,它是内核启动的第一个进程,并且是所有其他进程的祖先。

7. 7b0278943ae0: 这是要优化的 Docker 镜像的 ID。docker-slim 将使用这个镜像作为基础来创建一个更小、更优化的版本。

瘦身后docker镜像
瘦身后docker镜像

总结

Docker-slim 是一款强大的工具,它能够在不改变 Docker 容器映像内容的情况下,将其缩小多达 30 倍。它利用先进的分析技术来理解应用程序,从而精准地优化容器。这种优化过程包括丢弃不必要的组件和资源,从而减少容器的攻击面和资源占用。通过这种精准的优化,Docker-slim 不仅能有效节省存储空间和云端成本,还能提升容器的整体性能和安全性。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
从封装 Nginx NJS 工具镜像聊起
最近发现有不少需求可以通过 Nginx JavaScript (NJS)来完成,相比较运行一套完整的 Web 服务来说,轻量高效的方案总是惹人喜爱,更何况这套方案是由 Nginx 官方团队推出,并搭上了繁荣的 JavaScript 生态。
soulteary
2021/01/10
8350
从封装 Nginx NJS 工具镜像聊起
docker 镜像瘦身工具docker-slim 的使用
现在互联网公司大都是容器化管理,在服务构建容器化的过程中大都是自己编写dockerfile 。但是开发人员一般都不太关心服务器资源的使用问题.没有共用基础镜像什么的,这个导致每一个镜像都很大。 最近在github上面找到了一个https://github.com/docker-slim/docker-slim. 发现比dive 好使用。
分享干货的你
2022/09/22
5.7K0
docker 镜像瘦身工具docker-slim 的使用
Docker容器学习梳理-Dockerfile构建镜像
在Docker的运用中,从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低。所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其中,然后让docker读取并分析、执行,那么重复构建、更新将变得很方便,所以Dockerfile就此诞生了。Docker提供了Dockerfile作为构建Docker镜像脚本,避免人们一行一行的输入,真是善莫大焉。Dockerfile脚本可以做到随时维护修改,即可以分享,更有利于在模板化,更不用说传输了,好处那
洗尽了浮华
2018/01/23
1.6K0
Docker容器学习梳理-Dockerfile构建镜像
openshift/origin学习记录(9)——S2I镜像定制(基于Git)
本文介绍如何使用S2I技术构建一个基于Tomcat的Java Web应用,并将其部署到OpenShift上。文章首先介绍了S2I的基本概念和工作原理,然后详细描述了如何利用S2I工具快速生成Tomcat镜像,并基于此镜像快速构建一个可运行的Web应用。最后,文章介绍了如何将应用部署到OpenShift上,并给出了在OpenShift上运行Tomcat的详细步骤和示例。
胡了了
2017/12/28
1.9K1
openshift/origin学习记录(9)——S2I镜像定制(基于Git)
docker瘦身,可以试下这个开源的17.1kstar的项目
docker镜像大小瘦身项目,建议充分测试后在用于生产,这里有一些官方瘦身的案例,可以作为参考
大侠之运维
2024/09/22
1250
【Java】程序制作Docker镜像 推荐方案
随着我们分布式的观念在各个领域使用,docker容器也逐渐的背大家所认可和使用,那么我们想制作容器就得有镜像如何制作镜像呢?请往下看,Dockerfile就是制作镜像的原始武器: Dockerfile由一行行命令语句组成,并且支持用“#”开头作为注释,一般的,Dockerfile分为四部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时执行的指令。
瑞新
2021/12/06
2K0
【Java】程序制作Docker镜像 推荐方案
5个你必须知道的Docker实用工具
原文:5 Docker Utilities You Should Know 作者:Shekhar Gulati 翻译:Vincent Docker社区已经创建了许多开源的工具,更多的用例使得它比您想像的更有用。你可以在这里查阅它们。 你在网上能找到很多酷炫的Docker工具。绝大多数是开源的。 过去两年,我已经积极地将Docker用到我的对大多数开发项目中。在你开始使用 Docker的时候,你会发现,它比你预想的更加适用在很多用例里。 你会希望Docker为你做的更多,而且它不会让你失望! Doc
小小科
2018/05/03
1.4K0
5个你必须知道的Docker实用工具
构建 Docker Nodejs Base (Node.js + NPM + PM2) 镜像
Docker 账号可以关联 Github 账号,进而借助 Github Webhooks 能力,实现镜像自动构建。点击开始关联
Yorkyu
2022/03/22
2K0
构建 Docker Nodejs Base (Node.js + NPM + PM2) 镜像
这就是你日日夜夜想要的docker!!!---------Dockerfile构建nginx、Tomcat、MySQL镜像
2、CMD是开启容器时,要执行的指令,设置容器启动后默认执行的命令及其参数,但 CMD 能够被 docker run 后面跟的命令行参数替换
不吃小白菜
2020/09/24
5170
Docker 基于Dockerfile创建镜像实践
简单说,就是创建一个服务型的镜像,即运行基于该镜像创建的容器时,基于该容器自动开启一个服务。具体来说,是创建一个部署了nginx,uwsgi,python,django项目代码的镜像,运行基于该镜像创建的容器时,自动开启nginx,uwsgi等服务。简单理解就是在容器内部,通过nginx+uwsgi部署Django项目
授客
2021/08/18
9040
docker入门篇
docker pull centos       # 从docker仓库下载一个镜像例如:docker pull centos:6.7
保持热爱奔赴山海
2019/09/18
6060
Docker容器虚拟化(四)—dockerfile的格式与应用(with实例)
RUN和CMD看起来挺像,但是CMD用来指定容器启动时用到的命令,只能有一条,如: CMD ["/bin/bash", "/usr/local/nginx/sbin/nginx", "-c", "/usr/local/nginx/conf/nginx.conf"]
阿dai学长
2019/04/03
5870
自制GreatSQL Docker镜像
近期打算制作一个GreatSQL的docker镜像,方便社区用户使用GreatSQL。
老叶茶馆
2021/07/30
4980
私有docker registry镜像的制作-busybox based
我们通过hub.docker网站可以发现official的registry基于alphine base image, 其实我们也可以基于busybox image来创建registry, 本文带你一步步基于busybox 来构建自己的"registry" docker image,下面跟我来实现这个基于busybox的“registry" image. 以下是制作过程:
qsjs
2020/06/09
8120
02.docker镜像制作
基于centos7制作docker镜像 docker镜像是企业非常常用的一种应用打包,应用交付的方式. docker天生优势,一处构建处处运行,在任何机器构建的服务均可以在任意一台安装有docker的主机上运行 1. docker构建nginx镜像 1. 首先安装centos7平台环境 docker run -itd --name centos7 cenots:7 docker run -it --name centos7 centos:7 2. 进入cenots7 docker exec -it cen
陈雷雷
2020/03/18
1.5K0
02.docker镜像制作
这就是你日日夜夜想要的docker!!!---------Docker Compose容器编排理论+实操
Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。它是一个定义和运行多容器的docker应用工具。使用compose,你能通过YMAL文件配置你自己的服务,然后通过一个命令,你能使用配置文件创建和运行所有的服务。
不吃小白菜
2020/09/24
7020
这就是你日日夜夜想要的docker!!!---------Docker Compose容器编排理论+实操
Dockefile文件创建Docker镜像
FROM 表示的是这个 dockerfile 构建镜像的基础镜像是什么,有点像代码里面类的继承那样的关系,基础镜像所拥有的功能在新构建出来的镜像中也是存在的,一般用作于基础镜像都是最干净的没有经过任何三方修改过的,比如我用的就是最基础的 centos,这里有必要说明一下,因为我用的镜像加速源是阿里云的,所以我 pull 下来的 centos 是自带阿里云的 yum 源的镜像,如果你用的不是阿里云的镜像加速源,pull 下来的镜像 yum 源也不一样,到时 yum 安装软件的时候可能会遇到很多问题(你懂得)。
java干货
2021/02/19
1K0
Docker学习以及镜像制作流程
一、何为Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。 Docker的应用场景 Web 应用的自动化打包和发布。 自动化测试和持续集成、发布。 在服务型环境中部署和调整数据库或其他的后
互联网金融打杂
2018/06/13
1.5K0
dotNet 5 中执行 Node.js
在低代码产品中为了扩展功能,我们在业务编排中会扩展代码块的功能,允许用户直接在界面中进行代码(Node.js、 Python)的编写,来实现取数或者赋值的一些功能。本文简单介绍下在 dotNET 5 中怎么样进行 Node.js 的调用以及怎样部署到 CentOS 和 Docker 容器中。
oec2003
2021/08/23
1.7K0
dotNet 5 中执行 Node.js
开源 Docker 工具分享
Docker 社区已经创建了许多开源工具,它们所能帮你处理的用例甚至会超出你的想象。
二哥聊运营工具
2021/12/17
5220
开源 Docker 工具分享
相关推荐
从封装 Nginx NJS 工具镜像聊起
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档