跨平台的ARM 和 x86 Docker 镜像:汇编语言实验环境搭建

一、安装和配置 Docker

1.安装 Docker

官网链接:https://www.docker.com/

以Debian(Ubuntu)系统为例:

复制代码
#安装依赖包
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release

#添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

#设置 Docker 的 APT 源
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

#安装 Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin

#启动 Docker 并设置开机自启
sudo systemctl enable --now docker

#验证 Docker 是否安装成功
sudo docker run hello-world

2.加速器配置(可选):

(1)创建或编辑 Docker 配置文件:

复制代码
sudo mkdir -p /etc/docker
sudo vim /etc/docker/daemon.json

(2)添加加速器地址:

在 daemon.json 文件中添加以下内容(以毫秒镜像等为例):

复制代码
{
    "registry-mirrors": [
        "https://docker.1ms.run",
        "docker.xuanyuan.me",
        "https://docker.mirrors.ustc.edu.cn"
    ]
}

阿里云:登录阿里云容器镜像服务,进入"镜像加速器"页面,获取专属加速器地址。

(3)重启 Docker 服务:

复制代码
sudo systemctl daemon-reload
sudo systemctl restart docker

(4)验证加速是否生效

复制代码
docker pull hello-world

如果加速器配置正确,镜像拉取速度会明显提升。

3.安装 buildx 插件:

Buildx 支持为不同的平台和架构构建镜像,例如同时构建适用于 linux/amd64 和 linux/arm64 的镜像。19.03版本后的docker会自带buildx。

查看docker版本:docker --version

4.安装 QEMU

QEMU 是一个硬件虚拟化工具,用于模拟不同架构的 CPU。

运行以下命令安装 QEMU:

复制代码
docker run --privileged --rm tonistiigi/binfmt --install all

这会安装所有支持的 QEMU 架构,包括 ARM 和 x86。

二、构建镜像

1.编写 Dockerfile

复制代码
# 使用基础的 Linux 发行版镜像
FROM ubuntu:20.04

# 安装必要的工具
RUN apt-get update && \
    apt-get install -y tzdata && \
    ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    dpkg-reconfigure --frontend noninteractive tzdata

RUN apt-get install -y \
    build-essential \
    gcc \
    binutils \
    gdb \
    nasm \
    vim

# 设置工作目录
WORKDIR /workspace

# 指定容器启动时运行的命令
CMD ["/bin/bash"]

2.构建镜像

使用 docker buildx build 命令构建镜像,指定目标平台为 ARM 和 x86:

复制代码
docker buildx build --platform linux/arm64 -t asm-arm64:v1.0  .
docker buildx build --platform linux/amd64 -t asm-amd64:v1.0  .

# 多平台镜像:
docker buildx build --platform linux/amd64,linux/arm64 -t asm_arm64_amd64:v1.0 .

• --platform 参数指定了目标平台为 x86_64 和 ARM64。

• -t 参数为镜像设置标签。

3.运行镜像

复制代码
# 在 x86 架构上运行
docker run -it -v ~/asm/x86:/workspace --platform linux/amd64 asm-amd64:v1.0

# 在 ARM 架构上运行
docker run -it -v ~/asm/arm:/workspace --platform linux/arm64 asm-arm64:v1.0

• -it:以交互模式运行容器,进入容器内部

• -v ~/asm/arm:/workspace:将~/asm/arm目录挂载到容器的/workspace上

• 输入exit或Ctrl D键退出

4.运行容器

复制代码
# 查看容器
docker ps -a

# 启动容器
docker start <container_id>

# 连接到容器
docker exec -it <container_id> /bin/bash
相关推荐
张3236 分钟前
K8s 容器启动全流程:从 kubelet 到 Linux 内核
linux·kubernetes·kubelet
碧寒16 分钟前
解决:linux开机报错:Invalid Partition Table
linux·服务器·经验分享
cyber_两只龙宝18 分钟前
【Nginx】Nginx反向代理之实现http的反向代理
linux·运维·nginx·http·云原生·反向代理
草莓熊Lotso25 分钟前
MySQL 事务管理全解:从 ACID 特性、隔离级别到 MVCC 底层原理
linux·运维·服务器·c语言·数据库·c++·mysql
斯普信云原生组32 分钟前
Docker 开源软件应急处理方案及操作手册——Docker 服务启动故障处理
运维·docker·容器
不才小强34 分钟前
GDB调试工具
linux
斯普信云原生组37 分钟前
Docker 开源软件应急处理方案及操作手册——存储卷与数据持久化问题
docker·容器·eureka
斯普信云原生组37 分钟前
Docker 开源软件应急处理方案及操作手册——Docker Compose 应急处理
docker·容器·eureka
文静小土豆1 小时前
Harbor容器化部署
docker·kubernetes
Traving Yu1 小时前
Kubernetes(K8s)
云原生·容器·kubernetes