最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
怎么用 docker save 将基础镜像与其补丁包打成一个
时间:2026-07-11 09:05:46 编辑:袖梨 来源:一聚教程网
docker save 仅导出已有镜像的全部层为 tar 文件,无法直接打补丁;补丁必须通过构建新镜像(如 Dockerfile 或 commit)固化,再用 docker save 导出,生成的 tar 包含基础层与新增补丁层,可 docker load 恢复使用。
docker save 本身不能直接“打补丁”或合并镜像层,它只是把已有镜像(包括其全部层)导出为 tar 文件。所谓“基础镜像 + 补丁包”,实际是指:先基于基础镜像构建一个新镜像(比如应用了安全更新、配置变更或软件升级),再用 docker save 导出这个新镜像——它天然包含所有依赖层,视觉上就是“基础镜像叠加上补丁内容”。
确认补丁已落实为新镜像
补丁不是单独文件,必须通过构建操作固化到镜像中。常见方式有:
- 写 Dockerfile,FROM 基础镜像,RUN 执行更新命令(如 apt update && apt upgrade -y 或 yum update -y)
- 启动容器后手动修改(不推荐),再 docker commit 生成新镜像
- 使用 buildkit 或自定义构建工具注入补丁逻辑,最终仍产出一个新镜像 ID
只有生成了新的镜像(例如命名为 my-ubuntu-patched:22.04),后续 save 才有意义。
用 docker save 导出完整镜像
运行以下命令即可打包该镜像及其所有层(含基础镜像层和新增层):
docker save my-ubuntu-patched:22.04 -o patched-image.tar生成的 patched-image.tar 是标准 OCI 兼容归档,可用 docker load 恢复,也可解压查看 layers/ 目录验证是否包含多层。
验证是否包含基础层与补丁层
不需要解压整个 tar,可快速检查结构:
- tar -tf patched-image.tar | head -10 查看顶层文件(manifest.json、version、各 layer 的 .tar.gz)
- tar -xOxf patched-image.tar manifest.json | jq '.[] | .Layers' 显示所有层路径
- 对比基础镜像的 layers 和当前镜像的 layers,新增的 .tar.gz 就是补丁对应层
注意:Docker 自动复用未变动的基础层,所以导出包里不会重复存储相同内容,体积更小。
导入与使用
在目标机器上执行:
docker load -i patched-image.tar加载后会自动恢复镜像名和 tag,之后就能像普通镜像一样 run、push 或 inspect。若需重命名,可在 load 后用 docker tag。