[每周一更]-(第72期):Docker容器瘦身方式

在这里插入图片描述

Docker清理缓存操作

  • 在构建测试的过程中,由于是自家小服务器,资源紧张,发现磁盘一直爆满,删除一些大镜像还是会占满的情况,就想到是不是也是缓存问题。
    经过查询确实是build过程中的缓存启发的占用问题。

因此引出以下知识点,如何清除docker的构建过程中的缓存

Docker 18.09 引入了 BuildKit ,提升了构建过程的性能、安全、存储管理等能力。

docker system df 命令,类似于 Linux上的 df 命令,用于查看 Docker 的磁盘使用情况:
TYPE 列出了 Docker 使用磁盘的 4 种类型:

类型说明
Images所有镜像占用的空间,包括拉取下来的镜像,和本地构建的。
Containers运行的容器占用的空间,表示每个容器的读写层的空间。
Local Volumes容器挂载本地数据卷的空间。
Build Cache镜像构建过程中产生的缓存空间(只有在使用 BuildKit 时才有,Docker 18.09 以后可用)。
TYPEDocker 数据类型,包括镜像(Images)、容器(Containers)、本地卷(Local Volumes)等。
TOTAL每个数据类型的总大小。
ACTIVE获取的数据类型个数。
SIZE每个数据类型实际使用的大小。
USE%使用率,表示实际使用大小占总大小的百分比。

没清理前:

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          46        18        8.928GB   6.253GB (70%)
Containers      29        6         1.779GB   1.779GB (99%)
Local Volumes   5         5         759.8MB   0B (0%)
Build Cache     176       0         5.59GB    5.59GB

清理后:

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          46        18        8.928GB   6.253GB (70%)
Containers      29        6         1.779GB   1.779GB (99%)
Local Volumes   5         5         759.8MB   0B (0%)
Build Cache     111       0         0B        0B

获取完整的信息: docker system df -v

一键清理 Build Cache 缓存命令:

docker builder prune

如果你希望保留最近一定时间的缓存,删除时长更久的缓存,可以通过添加 --filter 参数实现,例如保留最近10天的缓存示例命令如下:

docker builder prune --filter 'until=240h'

另外,命令 docker system prune 可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。

添加参数 docker system prune -a 清理得更加彻底,可以将没有容器使用Docker镜像都删掉。

清理无用的容器

docker container prune

清理无用的镜像

docker image prune

镜像瘦身

容器固然由于时间的堆叠,会存在数据及日志越来越多的情况,根本上我们在构建镜像的时候,首先考虑镜像的最小化;

比如docker的多段构建,利用docker的最小化的系统alpine等,参考:[每周一更]-(第64期):Dockerfile构造php定制化镜像

采取一些策略来瘦身,详细操作如下:

  1. 使用轻量的基础镜像
  • 选择基于 Alpine Linux 或其他小型 Linux 发行版的基础镜像。这些基础镜像通常包含较少的组件,从而减小了镜像的大小。
  1. 多阶段构建
  • 使用多阶段构建(Multi-stage builds),这样可以在一个 Dockerfile 中包含多个 FROM 指令,每个指令对应一个构建阶段。在最终的镜像中只包含构建过程中必要的文件,减小了镜像的体积。
dockerfileCopy code
FROM golang:1.16 AS build
WORKDIR /app
COPY . .
RUN go build -o myapp

FROM alpine:latest
WORKDIR /app
COPY --from=build /app/myapp .
CMD ["./myapp"]
  1. 只复制必要的文件
  • 通过使用 .dockerignore 文件来排除不需要的文件,确保只有构建应用程序所需的文件被复制到镜像中。
  1. 减少层的数量
  • 每个 Dockerfile 中的指令都会创建一个新的镜像层,因此尽量将相关的指令合并到一起,以减少层的数量。
  1. 清理不需要的文件
  • 在 Dockerfile 中,使用 RUN 指令清理不需要的中间文件,确保镜像中只包含最终需要的文件。
  1. 使用更高效的命令
  • 在 Dockerfile 中使用一些高效的命令,例如将多个 RUN 指令合并成一个,使用 && 连接多个命令。
  1. 避免不必要的依赖
  • 检查应用程序的依赖关系,避免安装不必要的软件包或库。
  1. 压缩文件
  • 在 Dockerfile 中使用 COPY 指令时,可以将文件压缩成 tar 归档,然后在容器内解压。这可以减少网络传输的数据量,同时也可以减小最终镜像的大小。

参考地址:

  • docker builder prune
  • docker system df

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/157224.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习基础】对数几率回归(logistic回归)

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习 欢迎订阅!后面的内容会越来越有意思~ 💡往期推荐: 【机器学习基础】机器学习入门(1) 【机器学习基…

Java学习之路 —— 多线程

文章目录 1. 线程创建方式1.1 继承Thread1.2 声明一个实现Runnable接口的类1.3 利用Callable接口、FutureTask类来实现 2. 线程同步2.1 同步代码块2.2 同步方法2.3 Lock锁 3. 线程同步4. 线程池 1. 线程创建方式 1.1 继承Thread 定义子类,继承Thread,创…

系列一、请谈谈你对JVM的理解?Java8的虚拟机有什么更新?

一、请谈谈你对JVM的理解?Java8的虚拟机有什么更新? JVM是Java虚拟机的意思。它是建立在操作系统之上的,由类加载器子系统、本地方法栈、Java栈、程序计数器、方法区、堆、本地方法库、本地方法接口、执行引擎组成。 (1&#xff0…

Python系列:如何提高python程序代码的健壮性

前言 在编程的时候,我们难免会遇到一些不可靠的情况,比如网络请求失败,数据库连接超时等等。这些不确定性会让我们的程序容易出现各种错误和异常。那么如何来增加程序的容错性和健壮性呢? 可能大多数人会想到使用try except来进行异常捕捉进行失败重试(Retry)。虽然try-esc…

使用重建大师进行重建时,为什么引擎信息中显示只有一台主机能运行?

答:停止的引擎可以右键开始引擎,红字的可以看一下提示哪个文件夹没有权限,调整一下路径。由于截图不全,目前可以判断的就是以上解决办法。

音视频转换软件Permute mac中文板特点介绍

Permute mac是一款Mac平台上的媒体格式转换软件,由Chaotic Software开发。它可以帮助用户快速地将各种音频、视频和图像文件转换成所需格式,并提供了一些常用工具以便于用户进行编辑和处理。 Permute mac软件特点 - 支持大量格式:支持几乎所…

Postman启动问题:Could not open Postman

Postman启动问题:Could not open Postman 状态,在单击Postman之后一直在转圈圈,无法正常启动。 细心的朋友会发现,右下角 会经常出现防火墙关闭等提示信息,表示该程序,在向外链接。 Error Could not open…

仅需三行代码! C# 快速实现PDF转PPT

一般在会议、教学或培训活动中,我们都会选择PPT文档来进行内容展示。与PDF文档相比,PPT文档具有较强的可编辑性,可以随时增删元素,并且还可以设置丰富多样的动画效果来吸引观众注意。那么如何通过C#将PDF文档转为PPT文档呢&#x…

射频与微波综合测试仪-4958手持式微波综合测试仪

4958 微波综合测试仪 频率范围:1MHz~20GHz 4958手持式微波综合测试仪测量频率范围可达1MHz~20GHz,集电缆和天线驻波比测试、不连续点故障定位测试、插入损耗和增益测试、频谱分析、功率测量等多种功能于一体,携带方便&…

Spring Boot中使用MongoDB完成数据存储

我们在开发中用到的数据存储工具有许多种,我们常见的数据存储工具包括: 关系性数据库:使用表格来存储数据,支持事务和索引。(如:MySQL,Oracle,SQL Server等)。NoSQL数据…

【强化学习】时间循环最优决策:原理与Python实战

Python 如何在时间循环里最优决策?时间旅行和平行宇宙时间旅行引发的悖论强化学习策略梯度算法代码案例代码推荐阅读理论完备:实战性强:配套丰富: 如何在时间循环里最优决策? 时间循环是一类热门的影视题材&#xff0…

电源线虚接,导致信号线发烫

音频板的信号是经过隔直电容接到音频板的。

信创环境下高级威胁攻击层出不穷,信息化负责人该如何增强对抗与防御能力?

11月15日,以“加快推进智慧校园建设 赋能为党育才为党献策”为主题的2023年华东地区党校(行政学院)信息化和图书馆工作高质量发展专题研讨班顺利举办。 作为国内云原生安全领导厂商,安全狗受邀出席活动。 厦门服云信息科技有限公司…

【技术分享】EIGRP stub实验

【赠送】IT技术视频教程,白拿不谢!思科、华为、红帽、数据库、云计算等等https://xmws-it.blog.csdn.net/article/details/117297837?spm1001.2014.3001.5502【微/信/公/众/号:厦门微思网络】 拓扑图: R1配置: route…

Android源码分析 - Service启动流程

作者:dreamgyf 这次我们就来讲讲四大组件之一的Service是如何启动和绑定的 流程图 在查阅资料的过程中,我发现有些博主会将梳理好的流程图贴在开头,我觉得这样有助于从宏观上去理解源码的整个流程和设计理念,所以以后的文章我都…

【23真题】难!985难度第一梯队!

今天分享的是23年华南理工大学811的信号与系统试题及解析 本套试卷难度分析:22年华南理工大学811考研真题,我也发布过,若有需要,戳这里自取!本套试题难度中等偏上,只有十道大题,考察大家的综合…

袭击大型银行在美子公司的勒索元凶—LockBit,「诺亚」实战出击主动防御

“让勒索软件再次伟大” 2022年 最活跃猖獗 的勒索软件 ——LockBit 已在全球范围内造成严重破坏 世界知名企业和机构接连受创 11月10日,LockBit再次行凶作案 某大型银行在美全资子公司遭攻击 导致部分金融服务业务中断 美国国债市场交易受此影响&#xff01…

抠某区域地图方法

1.打开阿里云数据可视化平台DataV.GeoAtlas地理小工具系列 2. 选择要抠出来的区域,右侧选择要下载的json文件,如红框所示 3. 打开下载的文件,内容全部复制。 4. 打开百度地图示例Examples - Apache ECharts 5. 如下图所示,将下…

《Scratch等级考试(1~4级)历届真题解析》专栏总目录

❤️ 专栏名称:《Scratch等级考试(1~4级)历届真题解析》 🌸 专栏介绍:中国电子学会《全国青少年软件编程等级考试》Scratch等级考试(1~4级)历届真题解析。 🚀 订阅专栏:原…

循环购模式玩法,打造线上平台的闭环体系

​小编介绍:10年专注商业模式设计及软件开发,擅长企业生态商业模式,商业零售会员增长裂变模式策划、商业闭环模式设计及方案落地;扶持10余个电商平台做到营收过千万,数百个平台达到百万会员,欢迎咨询。 循…