Docker:使用x86平台Docker 拉取 arm版镜像
1. docker manifest简介
使用镜像创建一个容器,该镜像必须与 Docker 宿主机系统架构一致,例如x86_64 架构的系统中只能使用x86_64的镜像创建容器。
docker manifest特性可支持用户在不同系统架构的机器上分别运行不同的架构的镜像。这一点基本不需要用户做任何适配,非常的方便。
manifest list是一个镜像清单列表,用于存放多个不同os/arch的镜像信息;主要用到manifest的目的,其实还是多用于存放不同的os/arch信息,也就是方便我们在不同的CPU架构(arm或者x86)或者操作系统中,通过一个镜像名称拉取对应架构或者操作系统的镜像, ( 这个尤其是在K8S中,对于异构CPU的服务器中的镜像显得尤为有效。)
注:manifest文件仅仅是针对于已经在仓库中的镜像!!! 换句话说,就是这个镜像是刚从仓库中pull下来的!如果这个镜像是自己build的,需要先push到仓库中,否则,这个镜像是没有manifest文件的!!同样的,如果你pull了一个镜像,tag了一下,再去看这个manifest文件,也是没有的,因为tag后的镜像不在镜像仓库中。
2. docker manifest 开启
manifest是个实验功能,所以需要在docker中进行打开。
2.1 首先修改docker配置(如果文件不存在就新建,存在的话就追加配置,记得追加时检查下逗号别忘)
#如果没有配置文件的话,新建 mkdir /root/.docker #进入docker配置目录 cd /root/.docker/ #修改配置文件 vi config.json
添加如下配置信息
{
"auth": {}, "experimental": "enabled" }
2.2 开启manifest实验特性
#如果没有配置文件的话,新建 vi /etc/docker/daemon.json
添加如下配置信息
{ "experimental": "true" }
2.3 重加载服务配置并重启docker
#重新加载服务的配置文件 systemctl daemon-reload #重启docker systemctl restart docker
2.4 测试manifest是否开启
#测试manifest是否开启
docker manifest
如上显示已开启。
3. 拉取指定平台镜像
3.1 方法一
如上manifest实验功能开启后,可通过如下命令拉取其他CPU平台的镜像。
#X86平台docker拉取arm镜像 docker pull --platform=arm64 镜像名:版本 #示例 docker pull --platform=arm64 nginx:latest
--platform:该参数是用于拉取指定平台的镜像,也是实验性功能,在开启manifest功能后就会出现。通过该参数可以手动指定需要的CPU平台镜像,而不用自动去识别。
3.2 方法二
通过镜像的 sha256值拉取(大概率会失败)
#通过sha256值拉取镜像 docker pull nginx:stable-perl@sha256:a48175e7029f0ae21b8b4e2526d6c3dd7278a8479be0e666d729b6234108f4e1
4. docker manifest 常用命令及操作
4.1 查看已有镜像的manifest
#查看已有镜像的manifest
docker manifest inspect --insecure nginx
4.2 创建manifest镜像信息
#创建manifest镜像信息
docker manifest create --insecure xxx/nginx:latest xxx/nginx:nginx-arm64 xxx/nginx:nginx-x86
--insecure :这个命令主要是防止你远程仓库没有Https证书的问题,最好加上
xxx/nginx:latest :统一架构后的镜像地址,可有可无
xxx/nginx:nginx-arm64 :已经在仓库中有的镜像地址
xxx/nginx:nginx-x86 :已经在仓库中有的镜像地址
如果不想新建manifest list镜像地址,而是想用已有的镜像地址,那么可以参考这个命令:
# 使用已有的镜像地址
docker manifest create --insecure --amend xxx/nginx:nginx-arm64 xxx/nginx:nginx-x86
--amend选项,将x86的架构信息增加到了arm64架构中。
4.3 提交manifest镜像信息
将这个manifest提交到仓库中
#将manifest镜像信息提交到仓库中
docker manifest push xxx/nginx:latest
#验证下镜像信息是否被提交
docker manifest inspect xxx/nginx:latest
文章整合至:https://blog.csdn.net/lhc0602/article/details/116596006、https://blog.csdn.net/sullivan_jia/article/details/117520304
原文地址:https://www.cnblogs.com/nhdlb/p/15233410.html
- 区块链大热 价值近20万的Matrix.io被启用
- 比特币科普之什么是区块高度?
- 如何正确并快速理解MapReduce
- mysqldump的简单使用
- mac:在当前文件夹打开terminal终端
- 斯诺登研发黑客警报App上架 监测功能引发争议
- JMS + jboss EAP 6.2 示例
- Maven Compilation error [package org.testng.annotations does not exist]
- 查看jar包的jdk版本并降级
- ejb3: message drive bean(MDB)示例
- java提示找不到或无法加载主类
- 学Java有什么好方法?刻苦学技术让我最终成为自信的码农
- expect+scp传输文件发现文件丢失
- IBM WebSphere MQ 7.5基本用法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【Java】11 Set 集合
- 4.表格-HTML基础
- 2.语义化-HTML进阶
- MATLAB 与 C 语言的混合编程
- leetcode树之二叉树的层平均值
- C++雾中风景15:聊聊让人抓狂的Name Mangling
- 【Java】15 File 类
- seaborn更高效的统计图表制作工具
- 牛客2019跨年AK场题解(一)
- qiankun proxySand 沙箱
- MATLAB 与 C 语言的混合编程实战之辛普森积分法、自适应辛普森积分
- Java那些事之JDK环境配置及集成开发环境Eclipse安装
- 敲代码、作诗、写论文无所不能?史上最大AI模型GPT-3霸榜Github
- 数据结构实验——校园导游 实现最小生成树+最短路
- Salesforce LWC学习(二十六) 简单知识总结篇三