前往小程序,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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
聊聊flink的Allowed Lateness
flink-streaming-java_2.11-1.7.0-sources.jar!/org/apache/flink/streaming/api/datastream/WindowedStream.java
code4it
2019/01/23
1.2K0
Flink1.7.2 local WordCount源码分析
概述 Flink 环境 local,版本 Flink.1.7.2 用官网示例WordCount Scala程序分析源码 本文从source、operator、sink三个方面详细分析源码实现 源码: https://github.com/opensourceteams/fink-maven-scala-2 时序图 https://github.com/opensourceteams/fink-maven-scala-2/blob/master/md/images/005-source-operation-s
thinktothings
2019/02/28
9980
Flink1.7.2 local WordCount源码分析
聊聊flink的window操作
flink-streaming-java_2.11-1.7.0-sources.jar!/org/apache/flink/streaming/api/datastream/DataStream.java
code4it
2019/01/01
2.8K0
聊聊flink的window操作
一文搞懂 Flink window 元素的顺序问题
1. 起因 在我们使用 evictor 算子的时候,官网有这样的一句话: Flink provides no guarantees about the order of the elements within a window. This implies that although an evictor may remove elements from the beginning of the window, these are not necessarily the ones that arrive
shengjk1
2020/05/28
9970
写给大忙人看的 Flink Window原理
Window 可以说是 Flink 中必不可少的 operator 之一,在很多场合都有很非凡的表现。今天呢,我们就一起来看一下 window 是如何实现的。
shengjk1
2020/06/11
7320
[源码分析] 从源码入手看 Flink Watermark 之传播过程
本文将通过源码分析,带领大家熟悉Flink Watermark 之传播过程,顺便也可以对Flink整体逻辑有一个大致把握。
罗西的思考
2020/09/07
2K0
聊聊flink的consecutive windowed operations
本文主要研究一下flink的consecutive windowed operations
code4it
2019/01/09
1.1K0
聊聊flink的consecutive windowed operations
一网打尽Flink中的时间、窗口和流Join
首先,我们会学习如何定义时间属性,时间戳和水位线。然后我们将会学习底层操作process function,它可以让我们访问时间戳和水位线,以及注册定时器事件。接下来,我们将会使用Flink的window API,它提供了通常使用的各种窗口类型的内置实现。我们将会学到如何进行用户自定义窗口操作符,以及窗口的核心功能:assigners(分配器)、triggers(触发器)和evictors(清理器)。最后,我们将讨论如何基于时间来做流的联结查询,以及处理迟到事件的策略。
王知无-import_bigdata
2021/09/22
1.9K0
聊聊Flink必知必会(五)
对数据流执行keyBy()操作后,再调用window()方法,就会返回WindowedStream,表示分区后又加窗的数据流。如果数据流没有经过分区,直接调用window()方法则会返回AllWindowedStream。
Ryan_OVO
2023/11/18
2510
聊聊Flink必知必会(五)
Flink滑动窗口原理与细粒度滑动窗口的性能问题
Flink的窗口机制是其底层核心之一,也是高效流处理的关键。Flink窗口分配的基类是WindowAssigner抽象类,下面的类图示出了Flink能够提供的所有窗口类型。
王知无-import_bigdata
2019/12/18
5.3K1
聊聊flink DataStream的join操作
flink-streaming-java_2.11-1.7.0-sources.jar!/org/apache/flink/streaming/api/datastream/DataStream.java
code4it
2019/01/10
2.8K0
聊聊flink DataStream的join操作
聊聊flink DataStream的window coGroup操作
本文主要研究一下flink DataStream的window coGroup操作
code4it
2019/01/12
2.4K0
聊聊flink DataStream的window coGroup操作
一文搞懂 flink 处理水印全过程
前面,我们已经学过了 一文搞懂 Flink 处理 Barrier 全过程,今天我们一起来看一下 flink 是如何处理水印的,以 Flink 消费 kafka 为例
shengjk1
2020/12/29
1.4K0
一文搞懂 Flink Stream Join原理
然后调用 Where 类的 equalTo 方法,保证了 stream1 stream2 相同的 key 进入到同一个窗口
shengjk1
2020/12/02
7820
一文搞懂 Flink Stream Join原理
Flink DataStream多样化
GitHub源码(https://github.com/echo9509/flink-learning)
shysh95
2022/10/31
2720
flink window 实现机制分析
在flink streaming 处理中窗口是比较常见的操作, 例如窗口sum、max、min等,窗口构建主要包含:Assigner、Trigger、Function、Evictor, Assigner: 窗口分配器, 当有一个元素到达判断窗口属于哪一个窗口,对于滚动窗口分配给一个窗口, 对于滑动窗口可能会分配给多个窗口; Trigger: 窗口触发器, 决定什么时候触发窗口操作; Function: 窗口函数, 对窗口中数据执行的操作; Evictor: 窗口驱逐器, 并不常用,在Function 前后可以做一些额外的数据 处理工作。其整体工作流程就是:Assigner决定数据所属的窗口, 当满足一定条件Trigger触发窗口执行窗口Function, 在Function前后可以执行一些Evictor操作。
Flink实战剖析
2022/04/18
5550
[白话解析] Flink的Watermark机制
对于Flink来说,Watermark是个很难绕过去的概念。本文将从整体的思路上来说,运用感性直觉的思考来帮大家梳理Watermark概念。
罗西的思考
2020/09/07
5.7K1
Flink会话窗口和定时器原理详解
在我们使用Flink DataStream API编写业务代码时,aggregate()算子、AggregateFunction、KeyedProcessFunction是非常常用的。下面我们把这两个知识点详细的讲解一下。
王知无-import_bigdata
2021/04/21
2.3K0
Flink会话窗口和定时器原理详解
Flink窗口全解析:三种时间窗口、窗口处理函数使用及案例
我们经常需要在一个时间窗口维度上对数据进行聚合,窗口是流处理应用中经常需要解决的问题。Flink的窗口算子为我们提供了方便易用的API,我们可以将数据流切分成一个个窗口,对窗口内的数据进行处理。本文将介绍如何在Flink上进行窗口的计算。
PP鲁
2020/02/17
7.9K0
Flink窗口全解析:三种时间窗口、窗口处理函数使用及案例
Flink 滑动窗口优化
Flink 的窗口功能非常强大,因为要支持各种各样的窗口,像滑动窗口和滚动窗口这样的对齐窗口,像会话窗口这样的非对齐窗口,复杂度也会比较高。其中在超长滑动窗口的性能上也不尽如人意。这篇文章首先会阐述为什么在超长滑动窗口下 Flink 的性能会降级的很严重,以及在有赞我们是如何解决这个问题的。此外,在优化中并没有去兼顾 Evictor 的逻辑,因为在业务中并没有相应的需求。
有赞coder
2020/08/25
1.8K0
Flink 滑动窗口优化
相关推荐
聊聊flink的Allowed Lateness
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档