核心在于合并RUN指令并彻底清理:用&&串联安装与清理命令(如apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*),确保所有操作在同一层完成,避免残留缓存堆积,提升镜像精简度与构建可靠性。

核心在于让每条 RUN 指令干更多事、更干净,避免残留文件堆积在镜像层里。Docker 镜像体积膨胀,一大主因是中间层悄悄“藏”了不该留下的缓存、索引或临时文件——而这些几乎全出自未合并的 RUN 指令。
把安装+清理锁死在同一 RUN 中
这是最直接有效的压缩手段。apt、yum、apk 等包管理器会在系统中留下大量缓存(如 /var/lib/apt/lists/ 或 /var/cache/yum),若清理命令写在另一个 RUN 里,前一层已固化这些文件,后一层删不掉它们,只会多加一层“删除标记”,实际体积不变。
- ❌ 错误写法(两层,体积不减):
RUN apt-get updateRUN apt-get install -y curlRUN rm -rf /var/lib/apt/lists/* - ✅ 正确写法(单层,彻底清理):
RUN apt-get update && \apt-get install -y curl && \rm -rf /var/lib/apt/lists/*
用 && 连接命令,失败即中断
所有操作必须用 && 串联,不能用 ; 或换行分隔。这样任一命令失败,整条 RUN 就终止,不会留下半截状态的中间镜像。同时确保清理动作一定被执行——哪怕只是安装失败,缓存也已被清空,避免无效层累积。
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
- 推荐结构:
RUN command1 && command2 && command3 - 禁用结构:
RUN command1; command2; command3(失败后仍继续)
合并多个逻辑操作到一个 RUN
不只是包安装,任何连续的文件操作都应尽量归并:比如创建目录、下载文件、解压、校验、设权限、清理源包,全塞进一条 RUN。
- 示例(下载并精简安装 nginx):
RUN wget -O /tmp/nginx.tar.gz https://nginx.org/download/nginx-1.24.0.tar.gz && \tar -xzf /tmp/nginx.tar.gz -C /tmp && \cd /tmp/nginx-* && \./configure --prefix=/usr/local/nginx --without-http_rewrite_module && \make && make install && \rm -rf /tmp/nginx*
慎用 SHELL 指令替代复杂脚本
如果某段逻辑实在太长(比如多步构建+环境配置),与其写成外部 shell 脚本再 COPY 进去执行(会额外增加 COPY 层和脚本文件),不如用 SHELL 指令切换默认 shell,并在 RUN 中内联调用。
- 例如:
SHELL ["sh", "-c"]RUN set -eux && \echo "build start" && \npm ci --only=production && \npm prune --production
验证是否真正生效
别只看最终镜像大小,要查历史层:docker history your-image-name
观察每层大小,确认原本分散的几层现在被压成一层,且该层末尾没有明显残留(如几百 MB 的 lists 目录)。配合 dive your-image-name 可直观看到哪些文件被意外保留。

















