docker:记录如何在x86架构上构造和使用arm架构的镜像

简介: 为了实现国产化适配,需将原x86平台上的Docker镜像转换为适用于ARM平台的镜像。本文介绍了如何配置Docker buildx环境,包括检查Docker版本、安装buildx插件、启用实验性功能及构建多平台镜像的具体步骤。通过这些操作,可以在x86平台上成功构建并运行ARM64镜像,实现跨平台的应用部署。

为了国产化适配,要求讲原先在x86上的docker镜像重新打包为能够在arm上使用的docker镜像。

docker提供了构建多平台镜像的插件buildx

配置 Docker buildx 环境

1、确保 Docker 版本不低于 19.03,才能使用 buildx

1
docker --version

2、检查 buildx 插件

1
docker buildx version

通过apt或者yum等包管理方式安装的Docker,默认是带有 buildx 插件的。


如果我们使用的 Docker 版本中没有包含 buildx,或者想要安装最新版本的 buildx,可以访问 github - docker/buildx 获取安装指南。


3、安装 buildx 插件

wget https://github.com/docker/buildx/releases/download/v0.14.0/buildx-v0.14.0.linux-amd64
chmod a+x buildx-v0.14.0.linux-amd64
mkdir -p /usr/libexec/docker/cli-plugins
mv buildx-v0.14.0.linux-amd64 /usr/libexec/docker/cli-plugins/docker-buildx

4.启用实验性功能

为了构建多平台镜像,需要确保 Docker 的实验性功能被启用,因为 buildx 依赖这些功能。

我们可以通过修改 Docker 配置文件(通常位于 /etc/docker/daemon.json)来启用实验功能。

sudo vi /etc/docker/daemon.json
 
#追加填入以下内容,确保json格式正确
 
{
  "experimental": true
 
}
 
#保存并退出
 
###因为我添加了代理,所以我的格式是下面这样的,没添加代理的话不需要以下
{
  "experimental": true,
    "proxies": {
      "http-proxy": "http://127.0.0.1:7890",
      "https-proxy": "http://127.0.0.1:7890",
      "no-proxy": "127.0.0.0/8"
    }
}

5.执行以下命令

sudo systemctl daemon-reload
 
sudo systemctl restart docker

6.查看是否开启实验特性以及是否安装成功buildx

docker version --format '{{.Server.Experimental}}'
 
#如果结果为true则实验特性已经开启
 
docker buildx version

7.成功安装完成buildx插件之后需要创建

#正常创建方式
docker buildx create --name image_buildx  --use
 
#添加代理方式,docker buildx插件和docker的代理不通用,如果需要拉取docker hub的镜像,需要添加为你自己的代理端口
docker buildx create --name image_buildx --driver-opt env.http_proxy=127.0.0.1:7890 --driver-opt env.https_proxy=127.0.0.1:7890 --use

8.接下来就可以在x86平台构造arm的docker镜像了

docker buildx build  \
    --platform linux/arm64 \
    --tag ${IMAGE_TAG} \
    -f Dockerfile \
    --load \
    .

9.直接在X86架构的机器上运行构建好的ARM64镜像是不可能的,因为不同架构的机器无法直接执行其他架构的二进制代码。ARM64镜像包含的是为ARM处理器编译的代码,而X86架构的CPU无法理解这些指令。 在x86上运行arm架构的镜像需要使用QEMU仿真


确保你的docker实验特性已经开启


docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

仿真开启成功后就可以使用arm镜像了,使用方式如下:

docker run -it --platform=linux/arm64 your-arm64-image
目录
相关文章
|
9月前
|
存储 机器学习/深度学习 数据库
阿里云服务器X86/ARM/GPU/裸金属/超算五大架构技术特点、场景适配参考
在云计算技术飞速发展的当下,云计算已经渗透到各个行业,成为企业数字化转型的关键驱动力。选择合适的云服务器架构对于提升业务效率、降低成本至关重要。阿里云提供了多样化的云服务器架构选择,包括X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器以及高性能计算等。本文将深入解析这些架构的特点、优势及适用场景,以供大家了解和选择参考。
1318 61
|
4月前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
458 2
|
Java Linux C语言
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
998 90
|
9月前
|
消息中间件 数据可视化 Kafka
docker arm架构部署kafka要点
本内容介绍了基于 Docker 的容器化解决方案,包含以下部分: 1. **Docker 容器管理**:通过 Portainer 可视化管理工具实现对主节点和代理节点的统一管理。 2. **Kafka 可视化工具**:部署 Kafka-UI 以图形化方式监控和管理 Kafka 集群,支持动态配置功能, 3. **Kafka 安装与配置**:基于 Bitnami Kafka 镜像,提供完整的 Kafka 集群配置示例,涵盖 KRaft 模式、性能调优参数及数据持久化设置,适用于高可用生产环境。 以上方案适合 ARM64 架构,为用户提供了一站式的容器化管理和消息队列解决方案。
840 10
|
10月前
|
存储 机器学习/深度学习 算法
阿里云X86/ARM/GPU/裸金属/超算等五大服务器架构技术特点、场景适配与选型策略
在我们选购阿里云服务器的时候,云服务器架构有X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、高性能计算可选,有的用户并不清楚他们之间有何区别。本文将深入解析这些架构的特点、优势及适用场景,帮助用户更好地根据实际需求做出选择。
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
474 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
11月前
|
存储 机器学习/深度学习 应用服务中间件
阿里云服务器架构解析:从X86到高性能计算、异构计算等不同架构性能、适用场景及选择参考
当我们准备选购阿里云服务器时,阿里云提供了X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器以及高性能计算等多种架构,每种架构都有其独特的特点和适用场景。本文将详细解析这些架构的区别,探讨它们的主要特点和适用场景,并为用户提供选择云服务器架构的全面指南。
1121 18
|
12月前
|
JSON 数据格式 Python
X86架构属于国产化架构吗
在信息时代,处理器架构至关重要。本文通过简单流程和代码示例,帮助初学者理解X86架构是否属于国产化架构。首先明确国产化架构指本土研发的处理器架构,如龙芯、飞腾等。X86架构由Intel设计,主要由外资公司开发,通常不被视为国产架构。文章提供了一个判断X86架构是否国产化的流程图,并用Python代码实现判断过程。Architecture类描述架构来源和类型,App类负责获取和判定架构信息。通过这些步骤,初学者可以更好地掌握相关知识并提升开发技能。
1044 5
|
机器学习/深度学习 弹性计算 人工智能
阿里云服务器ECS架构区别及选择参考:X86计算、ARM计算等架构介绍
在我们选购阿里云服务器的时候,云服务器架构有X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、高性能计算可选,有的用户并不清楚他们之间有何区别,本文主要简单介绍下这些架构各自的主要性能及适用场景,以便大家了解不同类型的架构有何不同,主要特点及适用场景有哪些。
1818 10