当前位置: 首页 > news >正文

Docker Overlay2 空间优化

docker_logo


目录

    • 分析
    • 优化
      • 数据路径规划
      • 日志大小限制
      • overlay2 大小限制
      • 清理冗余数据
    • 总结


分析

overlay2 目录占用磁盘空间较大的原因通常与 Docker 容器和镜像的存储机制以及它们的长期累积相关,其实我之前在 Docker 原理那里已经提到过了。

通常时以下几种原因导致:

  • 大量的镜像和容器层

    每次运行一个 Docker 容器时,它都会从镜像中创建一个新的写层(之前提到的写时复制机制),这个层存储了容器运行时的所有文件修改。如果有很多容器运行或停止,但未被删除,overlay2 目录中的层(例如 diffmerged 目录)会占用大量空间。

    注意的是:每次启动或停止容器,Docker 会创建新的层,这些层没有被清理会长期占用空间,即使容器不再运行,其数据层依然占据磁盘空间。

  • 未删除的旧镜像

    Docker 会将所有拉取的镜像保存在本地,如果没有及时删除不再使用的镜像,这些镜像的层也会持续占用空间。因为每个 Docker 镜像都由多个层组成,每一层都会占用磁盘空间,且这些层存储在 overlay2 目录下。

  • 容器内文件的增多

    容器内的写操作(例如应用日志、临时文件等)都会写入 overlay2diff 层。如果某些容器产生了大量文件(例如日志文件、缓存等),这些文件会导致存储层膨胀。

  • 日志文件过大

    如果 Docker 容器产生了大量日志,特别是在没有对日志大小进行限制的情况下,日志文件会持续增长,占用大量空间。

  • 未清理的缓存和未使用的镜像层

    Docker 在构建镜像或运行容器时,会生成大量的缓存数据。这些数据在 overlay2 中存储,如果没有定期清理,长期累积会占用大量磁盘空间。

  • 挂载卷中的数据未清理

    容器运行时,挂载到容器中的数据卷可能存储了大量的数据,特别是当某些服务(如数据库、文件处理应用)生成大量数据时。

优化

数据路径规划

我们可在 Docker 配置文件中进行指定:

vim /etc/docker/daemon.json
{..."data-root": "/data/docker","log-driver": "json-file",...
}
systemctl daemon-reload
systemctl restart docker.service

配置后,重启 Docker 服务即可生效。

日志大小限制

有时,对于频繁产生大量日志的应用程序来说,如果你 Docker 服务没有对容器日志做限制,那必将会占用宿主机磁盘容量。

我们可在 Docker 配置文件中进行限制:

vim /etc/docker/daemon.json
{..."log-opts": {"max-size": "60m","max-file": "3"},...
}
systemctl daemon-reload
systemctl restart docker.service

配置后,重启 Docker 服务即可生效。

overlay2 大小限制

verlay2 是 Docker 默认的存储驱动之一,它将文件系统的多个层叠加在一起,并使用写时复制 (CoW) 来实现容器文件系统的管理。

查找 overlay2 目录中占用空间最多的文件:

du -sh /data/docker/overlay2/* | sort -h

image-20241011170044140

这样可以通过 overlay2 ID 匹配对应的容器 ID,就可以找出产生大数据的容器,进行快速定位:

docker inspect --format='{{.GraphDriver.Data.MergedDir}} {{.ID}}' $(docker ps -aq)

image-20241011173944396

此时就可以找出这个容器了:

docker ps

image-20241011174524496

但要注意的是,overlay2 目录下的数据不能轻易手动删除,否则容器异常。虽然 overlay2 本身并没有直接的大小限制,但由于它依赖于底层文件系统(通常是 ext4xfs),存储大小的限制通常由底层文件系统决定。

可以通过 storage-opts 配置来限制每个容器的写层大小。这样可以防止容器无限制地增长,占用所有的磁盘空间。

{..."storage-opts": ["overlay2.override_kernel_check=true","overlay2.size=10G"]...
}

这个配置会为每个容器的写层分配 10GB 的空间。当容器超过此限制时,会出现磁盘已满的错误。

注意,overlay2.size 仅在 Docker 使用 xfs 文件系统并启用 d_type 支持时有效。但是不建议通过此方法限制 overlay2 大小,而是部署服务前就应该做好了服务器磁盘容量规划,并实时监控服务器健康状态。

清理冗余数据

1、查看 docker 整体数据容量

du -sh /data/docker

image-20241008110407239

2、查看镜像、容器、数据卷和构建缓存大小

docker system df

image-20241008110533916

a. 可释放 15.63GB 未使用的容器镜像空间

docker image prune

如果想删除所有未使用的镜像(包括无标签的 dangling 镜像),可以使用:

docker image prune -a

b. 停止并删除未使用的容器

docker container prune

c. 清理未使用的网络

docker network prune

d. 清理系统缓存(移除未使用的网络、卷和构建缓存)

docker system prune -a

总结

一切的优化均基于理论+实践。

相关文章:

Docker Overlay2 空间优化

目录 分析优化数据路径规划日志大小限制overlay2 大小限制清理冗余数据 总结 分析 overlay2 目录占用磁盘空间较大的原因通常与 Docker 容器和镜像的存储机制以及它们的长期累积相关,其实我之前在 Docker 原理那里已经提到过了。 通常时以下几种原因导致&#xff…...

第 3 章:使用 Vue 脚手架

1. 初始化脚手架 1.1 说明 Vue 脚手架是 Vue 官方提供的标准化开发工具(开发平台)。最新的版本是 5.x。文档: https://cli.vuejs.org/zh/ 1.2 具体步骤 第一步(仅第一次执行):全局安装vue/cli。 npm install -g vu…...

Spring 循环依赖详解:问题分析与三级缓存解决方案

在Spring框架中,循环依赖(Circular Dependency)是指多个Bean相互依赖,形成一个循环引用。例如,Bean A依赖于Bean B,而Bean B又依赖于Bean A。这种情况在Bean创建时可能导致Spring容器无法正常完成初始化&am…...

爬虫prc技术----小红书爬取解决xs

知识星球:知识星球 | 深度连接铁杆粉丝,运营高品质社群,知识变现的工具知识星球是创作者连接铁杆粉丝,实现知识变现的工具。任何从事创作或艺术的人,例如艺术家、工匠、教师、学术研究、科普等,只要能获得一…...

uni-app之旅-day06-加入购物车

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言8.0 创建 cart 分支8.1 配置 vuex8.2 创建购物车的 store 模块8.3 在商品详情页中使用 Store 中的数据8.4 实现加入购物车的功能8.5 动态统计购物车中商品的总数…...

【Kubernetes】常见面试题汇总(五十六)

目录 123. pod 创建失败? 124. kube-flannel-ds-amd64-ndsf7 插件 pod 的 status 为 Init:0/1 ? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题,即 “ 汇总(一)~(二十二&#x…...

LabVIEW激光诱导击穿光谱识别与分析系统

LabVIEW激光诱导击穿光谱(LIBS)分析系统利用高能量脉冲激光产生高温等离子体,通过分析等离子体发出的光谱来定性分析样品中的元素种类。该系统的开发集成了软件与硬件的设计,实现了自动识别和定性分析功能,适用于环境监…...

Redis的基础篇

Redis的基础篇 1.在CentOs7上安装Redis(最好不要在windows上装,版本少) 1.安装gcc --> yum install gcc tcl(可能会报错,重新安装yum就行了) 2.下载redis --> 最好是6.2上的版本 3.解压redis --> tar -zxvf redis-6.2.…...

java和python哪个好

Java和Python各有优缺点,适合不同的应用场景,具体看你需要在哪种情况下使用编程语言。以下是Java和Python的一些对比,帮助你决定哪种更适合你的需求: 性能 Java:编译型语言,编译成字节码运行在Java虚拟机&…...

Electron + ts + vue3 + vite

正常搭建脚手架:npm create vitelatest 项目名称 安装electron的相关依赖:注:安装时终端url要项目名那一层 安装npm install electron -D安装打包工具:npm install electron-builder -D开发工具:npm install electron-…...

《大规模语言模型从理论到实践》第一轮学习--分布式训练

基础知识 5分钟看懂电脑硬件配置 - 知乎 (zhihu.com) 显存 定义:显存是显卡上的专用高速缓存,用于存储图形处理器(GPU)在处理图像和视频数据时所需的临时数据。 功能:显存的主要作用是提供GPU快速访问的数据存储&a…...

多模态智能

研究背景: 深度学习从1.0的端到端走向2.0的预训练,通过大规模预训练来记忆多模态数据中共性知识,增强对下游任务的学习能力。 深度学习1.0:特定任务有标注训练数据->随机初始化训练->最终模型 深度学习2.0:大规…...

【机器学习(十三)】机器学习回归案例之股票价格预测分析—Sentosa_DSML社区版

文章目录 一、背景描述二、Python代码和Sentosa_DSML社区版算法实现对比(一) 数据读入(二) 特征工程(三) 样本分区(四) 模型训练和评估(五) 模型可视化 三、总结 一、背景描述 股票价格是一种不稳定的时间序列,受多种因素的影响。影响股市的外部因素很多,主要有经济因素、政治因…...

大模型微调

概述 什么是模型微调? 模型微调是通过微调工具,使用独特的场景数据对平台的基础模型进行调整,帮助你快速定制一个更符合业务需求的大型模型。其优势在于对基础模型进行小幅调整以满足特定需求,相比于训练一个新模型,…...

240607 继承

面向对象三大特性:封装、继承、多态 RE: 封装 C把数据和方法封装在类里面迭代器和适配器 继承 1 基类 & 派生类 一个类可以派生自多个类,这意味着,它可以从多个基类继承数据和函数。定义一个派生类,我们使用一个类派生列表…...

轻松应对意外丢失:高效电脑数据恢复指南!

有时候由于误操作、硬件故障、病毒攻击等原因,电脑里的重要文件可能会突然消失不见。面对这样的情况,很多人会感到手足无措。其实,借助专业的电脑数据恢复软件,我们可以较为轻松地找回丢失的数据。今天,我们就来介绍几…...

vue项目中播放rtsp视频流

一、下载webrtc-streamer 下载地址:https://github.com/mpromonet/webrtc-streamer/releases 根据设备型号下载对应的版本到本地直接解压就行,我下载的是webrtc-streamer-v0.8.6-dirty-Windows-AMD64-Release.tar版本。 双击webrtc-streamer.exe可执行文…...

tomcat部署web配置环境变量

在Tomcat中设置环境变量通常涉及以下步骤: 找到Tomcat的启动脚本(如catalina.sh或catalina.bat)。 在启动脚本中设置环境变量。 对于catalina.sh(Linux/Unix系统),你可以在文件顶部添加环境变量&#xf…...

数据仓库技术及应用(练习1)

1.创表 (1)customers.csv CREATE EXTERNAL TABLE IF NOT EXISTS customers ( customer_id int, customer_fname varchar(45), customer_lname varchar(45), customer_email varchar(45), customer_password varchar(45), customer_street …...

老板的“神助攻”:公司电脑监控软件

在当今的商业世界中,企业管理者都希望员工能全身心投入工作,为企业创造更多价值。然而,员工上班摸鱼的现象却让许多老板头疼不已。公司电脑监控软件的出现,为解决这一问题提供了可能。接下来,我们将详细介绍几款优质的…...

XCTF-web-easyupload

试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...