Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >24 May 2019 docker的manifest特性

24 May 2019 docker的manifest特性

作者头像
俊采
发布于 2023-10-17 02:47:00
发布于 2023-10-17 02:47:00
17000
代码可运行
举报
文章被收录于专栏:LEo的网络日志LEo的网络日志
运行总次数:0
代码可运行

一直都是在x86_64平台下编译docker镜像,最近因为需要在powerpc和z上面编译docker镜像,发现同一个镜像在不同的平台运行,结果竟然不一样,因为按docker的镜像机制,同一个镜像不应该出现不同行为,仔细分析后发现是docker提供了manifest功能,进而支持多平台,用户不需要根据平台不同而下载不同镜像,而是通过一个镜像就能覆盖各种平台。

例如,如果在amd64平台,拉取golang镜像,并允许go version命令,发现输出是go version go1.12.5 linux/amd64,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# docker run --rm golang go version
go version go1.12.5 linux/amd64
# docker pull golang
Using default tag: latest
latest: Pulling from library/golang
Digest: sha256:cf0b9f69ad1edd652a7f74a1586080b15bf6f688c545044407e28805066ef2cb
Status: Image is up to date for golang:latest

但是在powerpc和z平台上,输出却不同,如下:

z执行结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# docker run --rm golang go version
go version go1.12.5 linux/s390x
# docker pull golang
Using default tag: latest
latest: Pulling from library/golang
Digest: sha256:cf0b9f69ad1edd652a7f74a1586080b15bf6f688c545044407e28805066ef2cb
Status: Image is up to date for golang:latest

powerpc执行结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# docker run --rm golang go version
go version go1.12.5 linux/ppc64le
# docker pull golang
Using default tag: latest
latest: Pulling from library/golang
Digest: sha256:cf0b9f69ad1edd652a7f74a1586080b15bf6f688c545044407e28805066ef2cb
Status: Image is up to date for golang:latest

从镜像的digest可以看到,确实是同一个镜像,但是在不同平台运行结果却不一样,说明镜像可以自动识别平台,运行相应平台镜像文件。即不同平台下载的golang镜像的manifest文件确实是一样的,但是通过查看image id,会发现镜像id不同,不同平台上的镜像却不相同,是因为docker的引入的manifest功能,负责处理多个平台间的镜像兼容问题,在pull镜像过程中,会判断manifest中是否包含该平台的docker镜像,然后自动下载该平台的镜像到本地运行,所以如果需要镜像支持多平台,需要在镜像中添加每个平台镜像信息到manifest文件中,并提供该平台的镜像,方便镜像可以在不同平台运行,这里在提供3个关键概念,有助于理解docker镜像的组成。

  • image id:是所有层的文件的sha256sum,可以直接使用来下载镜像
  • layerid:是docker的每个层的所有文件的sha256sum
  • digest:是manifest文件的sha256sum

所以,在构建跨平台的docker镜像时,不需要在dockerfile中处理多平台问题,docker会自动按照manifest中的配置,下载和平台向匹配的镜像。具体可以参考:https://docs.docker.com/engine/reference/commandline/manifest/

LEo at 00:12

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Docker创建manifest镜像
首先在 amd64 机器构建 lovelonger**/**perf-test:amd 镜像,然后在 arm64 机器构建 lovelonger/perf-test:arm 镜像,构建完成 push 到 dockerhub。
tanmx
2023/10/18
7270
Docker创建manifest镜像
构建多架构镜像的最佳实践
在云时代,容器化已经成为一种事实,把软件产品打包、构建成 Docker 镜像是最基本、最关键的一步。在信创的大背景下,云环境中会存在 x86、arm 等不同的架构,所以在构建镜像时需要构建出多种架构的镜像,以适配不同架构的服务器。
xcbeyond
2022/01/23
2.5K0
构建多架构镜像的最佳实践
一次构建多平台docker镜像
Linux 有很多平台,有没有办法只构建一次就能构建出所有的平台镜像?答案是有的,下面介绍的工具刚好能解决这个问题。
YP小站
2020/06/04
3.2K0
Docker容器Registry私有镜像仓库安全配置与GC回收实践
描述:本来我想直接写Harbor的Docker镜像仓库搭建配置与使用,但是觉得还是应该从基础的Docker的Registry镜像讲起从安全构建到GC回收同时加深学习映像;
全栈工程师修炼指南
2022/09/29
2.5K0
Docker容器Registry私有镜像仓库安全配置与GC回收实践
Docker Review - docker images 常用命令
文档: https://docs.docker.com/engine/reference/commandline/docker/
小小工匠
2022/11/30
4320
Docker Review - docker images 常用命令
学习docker看此文足以
Docker 最初是 dotCloud 公司创始人  在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 ,主要项目代码在  上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 。
小陈运维
2021/11/22
4930
镜像标识这件小事?Tag VS Digest
今天,我们来聊下Docker/Podman 镜像该如何打标。究竟是用Tag好还是用Digest优秀
Markgogogo
2022/06/13
1.7K0
镜像标识这件小事?Tag VS Digest
K8S 1.20 弃用 Docker 评估之:Docker 和 OCI 镜像格式的差别
2020 年 12 月初,Kubernetes 在其最新的 Changelog 中宣布,自 Kubernetes 1.20 之后将弃用 Docker 作为容器运行时。
东风微鸣
2022/04/22
3.2K0
多平台容器镜像构建就看这一篇
孔矾建,腾讯高级工程师。多年云原生技术实践经验,聚焦容器镜像与存储领域,负责腾讯云容器镜像仓库产品开发,Harbor 社区 Maintainer,《Harbor 权威指南》联名作者。 前言 愿景与现实 早在1995年,就有“write once and run anywhere”(WORA,编写一次即可在任何地方运行)用于描述 Java 应用程序。时过20年,Docker 高声喊出了自己的口号——“Build Once, Run Anywhere”(一次构建,随处可用)。 愿望是美好的,然而,现实总比理想
腾讯云原生
2020/12/28
2.1K0
kubernetes 问题排查: 高版本 containerd 下载镜像失败
在 containerd 运行时的 kubernetes 线上环境中,出现了镜像无法下载的情况,具体报错如下:
CNCF
2021/05/27
9.9K2
kubernetes 问题排查: 高版本 containerd 下载镜像失败
Docker-Docker
在 云原生项目的 CI 中, 需要创建一个沙盒环境去创建和销毁CI环境用来 测试虚拟机环境或容器环境。几年前还是用 vagrant + libvirt + kvm,现在随着容器技术的发展,vagrant 虚拟机化的CI环境 已经基本不用了。取而代之的是容器化的CI环境。
后端云
2022/11/25
1.2K0
Docker-Docker
跨平台构建 Docker 镜像新姿势,x86、arm 一把梭
在工作和生活中,我们可能经常需要将某个程序跑在不同的 CPU 架构上,比如让某些不可描述的软件运行在树莓派或嵌入式路由器设备上。特别是 Docker 席卷全球之后,我们可以轻松地在 ARM 设备上通过容器部署各种好玩的应用,而不用在意各种系统的差异性。
米开朗基杨
2019/11/25
43.4K1
跨平台构建 Docker 镜像新姿势,x86、arm 一把梭
如何使用 registry 存储的特性
苦命打包工具人 ? 目前在负责公司 PaaS toB 产品的打包发布工作(苦命发版+打包工具人 ?)。日常的一项工作就是跑完自动化打包流水线,再将打出来的安装包更新到 QA 测试环境中。因为打包环境和
米开朗基杨
2021/04/22
1.1K0
如何使用 registry 存储的特性
Docker容器镜像仓库存储原理(前世今身)与搬运技巧
在深入学习镜像之前我们需要知道镜像是如何(炼制/搓)成的(等同于构建镜像),当然是通过我们DockerFile一条条指令为镜像生成每一层,按照执行顺序镜像文件系统复写封装从下到上;
全栈工程师修炼指南
2022/09/29
3.6K0
Docker容器镜像仓库存储原理(前世今身)与搬运技巧
Docker多架构容器镜像构建方式
在运行任何 docker 镜像或 Kubernetes pod 时,您是否在服务器上看到过exec /docker-entrypoint.sh: exec format error错误消息?这很可能是因为您正在服务器上运行一些其他 CPU 架构的容器镜像,或者您是否曾经 在 Apple Silicon M1、M2 MacBook 上使用过--platform linux/x86_64选项?如果是,那么您无法获得 Apple 芯片的本机性能,并且可能会耗尽 MacBook 的电池电量。为了避免这种错误和性能问题,我们需要运行正确的多架构容器镜像,或者我们可能需要构建自己的镜像,因为所有容器公共镜像都没有可用的多架构镜像。
DevOps云学堂
2023/08/22
1.7K0
Docker多架构容器镜像构建方式
Docker(二)——镜像
其中各个选项表示的含义如下表所示,同一个仓库可以有多个TAG,代表着当前仓库中的各个版本,ubuntu就是仓库名称。14.04/16.04/18.04就是ubuntu的各个发行的版本号。因此使用REPOSITORY:TAG来定义不同的镜像。如果不指定一个镜像的TAG 默认会拉取最新的版本镜像,即REPOSITORY:latest
羊羽shine
2019/05/28
5340
Docker快速入门(一)
Docker是Go语言开发实现的容器。2013年发布至今,备受推崇。相关文档、学习资料十分详尽。近期公司docker项目要推进,得重新学习一下。博客以笔记。
用户1432189
2018/09/05
1.1K0
Docker快速入门(一)
如何使用Skopeo做一个优雅的镜像搬运工
[TOC] 0x00 基础介绍 描述: 作为公司内部 PaaS toB 产品的打包发布人员,容器镜像对我们打工人而言就像是工地上的砖头 🧱,而我的一部分工作就是将这些砖头在各个仓库之间搬来搬去,最终
全栈工程师修炼指南
2022/09/29
4.8K0
如何使用Skopeo做一个优雅的镜像搬运工
Windows——Docker拉取Windows Server镜像
microsoft-windows-server: https://hub.docker.com/_/microsoft-windows-server
思索
2024/08/16
4510
Windows——Docker拉取Windows Server镜像
使用docker Registry快速搭建私有镜像仓库(内附干货)
私有仓库,就是本地(内网环境)组建的一个与公网公共库功能相似的镜像仓库。组建好之后,我们就可以将打包好的镜像提交到私有仓库中,这样内网其它用户也可以使用这个镜像文件。 本文使用官方提供的registry镜像来组建企业内网的私有镜像仓库
民工哥
2020/09/16
11.8K0
相关推荐
Docker创建manifest镜像
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验