验证 Manifest
什么是 Manifest
Docker 镜像的 Manifest(清单)是一个 JSON 文件,描述了镜像的组成:层(layers)、配置(configuration)和元数据。多架构镜像则使用 Manifest List(或 OCI Image Index)包含多个架构的 Manifest 引用。
查看 Manifest
基础 manifest 查看
# 查看镜像 manifest(默认格式)
docker manifest inspect nginx:latest
# 查看原始 JSON
docker manifest inspect --verbose nginx:latest
查看 OCI Image Index
# 查看多架构镜像的 manifest list
docker manifest inspect myapp:latest
输出示例:
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 942,
"digest": "sha256:abc123def456...",
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 942,
"digest": "sha256:789ghi...",
"platform": {
"architecture": "arm64",
"os": "linux",
"variant": "v8"
}
}
]
}
Buildx 中的 imagetools
Buildx 提供的 imagetools 命令可以查看和操作远程镜像:
# 查看镜像的 manifest 信息
docker buildx imagetools inspect myapp:latest
# 更详细的输出
docker buildx imagetools inspect --raw myapp:latest
输出:
Name: registry-1.docker.io/myapp:latest
MediaType: application/vnd.docker.distribution.manifest.list.v2+json
Digest: sha256:xyz...
Manifests:
linux/amd64 → sha256:abc...
linux/arm64 → sha256:def...
验证多架构镜像
# 按平台查看 digest
docker buildx imagetools inspect myapp:latest | grep "linux/arm64"
# 提取特定平台的 manifest
docker buildx imagetools inspect --raw myapp:latest | jq '.manifests[] | select(.platform.architecture=="arm64")'
验证镜像签名
# 安装 cosign
cosign verify myapp:latest
# 查看签名
cosign verify-attestation myapp:latest
验证镜像内容
# 在特定架构上运行
docker run --platform linux/arm64 myapp:latest uname -m
# 查看镜像层信息
docker history myapp:latest
# 查看镜像配置
docker image inspect myapp:latest
常见验证场景
场景一:确认多架构构建成功
docker buildx imagetools inspect myapp:latest
# 确认列出了所有目标架构
场景二:比较不同版本的镜像
docker buildx imagetools inspect myapp:v1
docker buildx imagetools inspect myapp:v2
# 对比 digest 确认内容差异
场景三:镜像大小验证
docker buildx imagetools inspect myapp:latest | grep -E "linux/amd64|linux/arm64"
# 注意:不同架构的镜像大小可能不同
调试镜像问题
# 使用 dive 工具分析镜像层
dive myapp:latest
# 查看每层的大小
docker history myapp:latest --no-trunc
# 验证 manifest digest
docker manifest inspect myapp:latest | jq -r '.manifests[].digest'
面试要点
docker manifest inspect查看原始 manifest,buildx imagetools inspect查看更友好的格式- Manifest List 是多架构镜像的核心数据结构
- 通过 inspect 可以确认多架构构建是否覆盖了所有目标平台
- Digest(SHA256)是镜像的唯一标识,比 tag 更可靠
- 镜像签名验证是企业级安全的关键环节
面试官常问:如何验证一个镜像是否是多架构镜像?如何验证镜像没有被篡改?
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END


暂无评论内容