-
一个把 COPY . . 写在 npm install 前面的 Dockerfile,让我每改一行代码都要重装全部依赖、构建十几分钟:一次 Docker 层缓存与镜像瘦身的深度复盘
CI 构建每次十几分钟、镜像 2.3GB,折腾网络和机器都没用。逐行读那个用了快一年的 Dockerfile 才发现:它把 COPY . . 写在了 npm install 前面——源码一改,Docker 层缓存全失效,每次都重装几百个依赖;又没有 .dockerignore,把 node_modules/.git/日志全打进了镜像。本文讲透 Docker 层缓存机制与指令顺序的关系,给出先装依赖…- 0
- 0
-
我图省事一直用 :latest 标签部署,本以为全集群跑的都是同一个镜像,直到线上几台机器行为各异、想回滚却发现根本回不去的深度复盘
我们用 Docker 部署,我图省事全程用 :latest:CI 构建打成 myapp:latest 推上去,各机器拉 latest。用了很久没出事,直到一个诡异 bug:同样的请求打到不同机器行为竟不一样!登上去才惊出冷汗——这些机器上的 latest 根本不是同一个镜像,各自在不同时间拉取,而 latest 被 CI 反复覆盖过。更糟的是想回滚时傻眼了:所有版本都叫 latest,旧的早被覆盖…- 0
- 0
-
改一行代码,Docker 镜像重新构建要等十分钟,镜像还有 3 个 G:我把 Dockerfile 的层缓存彻底用反了的那次折腾复盘
只改一行业务代码,docker build 也要等十分钟,镜像还有 3GB。研究了 Docker 分层与层缓存机制才发现是我自己的锅:一是没写 .dockerignore,COPY . . 把 node_modules、.git、日志全打进了镜像;二是把 COPY . . 放在了 npm install 前面,改代码就让 COPY 层失效、连带最耗时的装依赖缓存作废,被迫每次重装。这篇从层缓存铁律…- 10
- 0
-
Docker 镜像从 1.4GB 瘦到 90MB:多阶段构建、层缓存与 BuildKit 提速实战
真正逼我们下决心治理镜像的是一次线上回滚:发布出问题要紧急回滚,光是把上个版本 1.4GB 的镜像重新拉到没缓存的节点上再起容器就等了将近十二分钟,故障一直挂在线上,运营和老板的消息一条接一条——复盘时大家一致认为,一个连「快速回滚」都做不到的交付体系本身就是最大的风险。于是我们把这个构建一次要十二分钟的 1.4GB 镜像,系统地优化到了 90MB、构建九十秒。这篇是一篇实打实的优化实录:先用 d…- 0
- 0
-
从粗放发布一个看似无害的小改动全量上线后因一个只在生产才触发的配置差异瞬间让所有用户白屏既无版本化旧制品又无一键回滚只能手忙脚乱翻找旧包 scp 覆盖全站不可用三十多分钟 + 本地手工 build 环境不一致包不可复现出了线上问题对不上是哪次构建产物根本无从查起 + scp 覆盖式部署新包直接盖掉旧包旧版本被销毁得无影无踪想回退连个可用旧制品都找不到 + 人肉点测全凭测试同学手点漏点了边缘功能带 bug 代码因无强制门禁就被合并上线 + SSH 登录到一台台机器凭记忆手工敲停服务传包覆盖改配置起服务的命令漏一步敲错一字多机不一致就酿故障还不可重复不可审计 + 一次性全量上线把新包往所有机器一覆盖所有用户同一瞬间切到新版本一有潜藏 bug 就同时对 100% 用户全面爆发无缓冲无试错损失即全员损失 + 出事才手忙脚乱满世界翻找旧包还可能已被覆盖没了再在火急火燎手抖中重做整套手工部署几十分钟全站瘫痪 + 配置散落各服务器各角落全凭 SSH 上去 vim 手工改改错没人拦改了没记录多机改得不一致诡异故障频发 + 开发测试生产环境各自手工搭野蛮生长成孤岛运行时依赖系统库版本处处不同在我机器上是好的一上生产就诡异崩溃 + 发布完看进程起来日志没刷红就以为成功转身忙别的错误率延迟悄悄劣化全然不知靠用户投诉报障才知翻车 → 2026 现代 CI/CD 流水线与发布工程 CI 统一环境自动构建 + 制品仓库版本化归档关联 commit 可追溯 + 自动化质量门禁编译测试覆盖率安全扫描全绿才许合 + 声明式部署描述期望状态工具自动收敛可重复可审计多机绝对一致 + 金丝雀渐进放量先 1% 验证再逐级加码蓝绿瞬时切换 + 历史制品归档加声明式部署让回滚一键确定性秒级退回稳定版本 + 配置即代码集中加版本化加评审加自动下发 + 容器化加 IaC 让开发测试生产环境处处一致铲除环境幽灵 + 发布与监控联动对比基线指标劣化即时告警自动回滚 87 天战役复盘:47 套工程修法 + 7 个 P0 复盘 + 6 条工程哲学
8 人的平台工程团队 87 天把一套支撑几十个服务构建测试发布、五年里规模翻了几番、却一直停留在本地手工打包 scp 覆盖人肉点测 SSH 手敲部署全量上线靠用户报障原始阶段的发布体系——绝大多数构建还在开发各自机器上手工 mvn package 出包环境五花八门产物不可复现出了线上问题对不上是哪一次构建的哪个产物、部署还是把新包 scp 上去直接覆盖旧包旧版本被销毁得无影无踪想回退连个可用的旧制…- 0
- 0
-
从古老交付运维体系 手动 SSH 上服务器跑命令部署 + 在我机器上能跑物理机手装环境 + 手动管理进程没有编排 + 手点云控制台开机器无基础设施代码化 + 手改配置文件到处漂移 + 没有 CI 靠人肉构建测试 + 停机部署中断用户 + 出事手动翻日志手动回滚 + 没有监控告警靠用户打电话才知道挂了 + 密钥明文写在配置里 → 2026 现代云原生交付运维体系 容器化 Docker 统一环境 + Kubernetes 编排调度自愈 + Terraform/Ansible 基础设施即代码 + GitHub Actions CI/CD 流水线全自动 + 不可变基础设施 + 蓝绿与金丝雀零停机发布 + ArgoCD GitOps 声明式交付 + Prometheus/Grafana/Loki/Jaeger 可观测三件套 + Vault 密钥集中管理 + 自动回滚 87 天战役复盘:47 套工程修法 + 7 个 P0 复盘 + 6 条工程哲学
14 位平台工程与 SRE 工程师 87 天把一套跑了七年的粗放交付运维体系——上线要手动 SSH 登服务器一条条敲命令、scp 传包改配置启动几十步全靠人记忆一步手抖就是事故、应用裸跑在机器上环境靠手装这台 JDK8 那台 JDK11"在我机器上能跑"一上线就挂、几十个进程靠人肉盯着挂了手动重启、服务器网络全在云控制台手点出来没人说得清线上有啥、配置手改到处漂移、没有 CI …- 0
- 0
-
Terraform state 死锁导致 12 团队 CI/CD pipeline 全线卡死 7 小时的 5 天复盘:残留 lock + force-unlock 滥用 + state 并发写竞争三重叠加 + 12 条 IaC 工程纪律
我们 60 人工程团队共用的 Terraform 仓库,因 CI runner 被 K8s 滚动更新 kill 后 DynamoDB 残留 lock,后续 12 个团队 plan/apply 全线卡死 7 小时,4 个 release window 受影响。5 天复盘找到三重根因:Terraform 无自动 lock TTL、SRE 未验证 owner 状态就 force-unlock、单 sta…- 0
- 0
-
Node.js+TSmonorepoCI/CD流水线从28分钟压到4分钟的3周复盘:6大方向30项优化+Turborepo/oxlint/BuildKit实战
前端 monorepo CI 跑了 28 分钟,RFC 截止前实在受不了。3 周 6 大方向 30 项优化,每一项都标了具体收益和适用条件。Turborepo 远程缓存、oxlint 替 ESLint、Vite 取 webpack、BuildKit cache mount、并行矩阵 sharding——讲清楚什么场景该上、什么场景没必要折腾。- 13
- 0
-
Docker 镜像分层缓存完全指南:从一次"改一行代码、构建却重跑 5 分钟 npm install"看懂层缓存
2022 年我把一个 Node.js 后端服务容器化写人生第一个正经的 Dockerfile 怎么写这件事我压根没多想第一版我做得很顺手 FROM node 设好工作目录 COPY 把整个项目拷进去 RUN npm install 装依赖 RUN npm run build 打包最后 CMD 启动就完事了本地构建一次真不错虽然 npm install 跑了四五分钟但毕竟装这么多包慢点正常镜像也确实…- 2
- 0
-
Docker 镜像 1.8GB 瘦身到 180MB:多阶段构建 + 层缓存实战
80 微服务 CI/CD,Java 镜像 1.8GB 构建 8min,K8s 拉取慢,节点磁盘告警。两周治理:多阶段构建 + jlink 裁剪 JRE + distroless/scratch + 层缓存指令排序 + BuildKit cache mount + Trivy 安全扫描。镜像 180MB,构建 90s,流水线提速 60%。- 4
- 0
-
Docker 镜像瘦身实录:80 服务从 800MB 平均降到 120MB
80 个微服务镜像平均 800MB,CI 25min。三周瘦身实录覆盖 Java/Node/Python/Go 四个栈:distroless + scratch + 多阶段 + BuildKit 缓存挂载 + jlink + Spring AOT + dive/Trivy 扫描。平均降到 120MB,CI 25min→6min,扩容 60s→8s。- 0
- 0
-
Docker 镜像从 1.2GB 瘦到 80MB:我们做的 7 步优化和 10 条黄金法则
Node.js 服务镜像 1.2GB,CI 4 分钟,Pod 启动 3 分钟。本文复盘 7 步优化:alpine 基础、多阶段构建、.dockerignore、缓存友好 COPY、distroless / scratch、BuildKit cache mount、镜像扫描。最终 78MB,CI 12 秒。附 10 条 Dockerfile 黄金法则。- 0
- 0
CI/CD
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!












