通过Docker运行跨平台的容器
# docker 使用
# 在x86_64 系统使用docker 运行arm64 容器
# 1. 启用docker manifest
docker manifest特性可支持用户在不同系统架构的机器上分别运行不同的架构的镜像。
manifest list是一个镜像清单列表,用于存放多个不同os/arch的镜像信息;主要用到manifest的目的,其实还是多用于存放不同的os/arch信息,也就是方便我们在不同的CPU架构(arm或者x86)或者操作系统中,通过一个镜像名称拉取对应架构或者操作系统的镜像, ( 这个尤其是在K8S中,对于异构CPU的服务器中的镜像显得尤为有效。)
#如果没有配置文件的话,新建
mkdir /root/.docker
#进入docker配置目录
cd /root/.docker/
#修改配置文件
vi config.json
#添加如下配置信息
{
"auth": {},
"experimental": "enabled"
}
#测试manifest是否开启
docker manifest
#查看docker是否开启experimental功能
docker version
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 2. 使用docker获取arm镜像
#X86平台docker拉取arm镜像
#方法一:
docker pull --platform=arm64 镜像名:版本
#示例
docker pull --platform=arm64 nginx:latest
#方法二:
docker pull arm64v8/ubuntu:20.04
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 3. 启用docker Buildx 新特性
Docker在19.03引入了一个新的特性,使得Docker可以构建不同CPU体系结构的镜像,比如ARM镜像
# 编辑 /etc/docker/daemon.json,增加下面的内容:
{
"experimental": true
}
# 编辑 ~/.docker/config.json 文件,增加下面的内容
{
"experimental": "enabled"
}
# 重启Docker使生效:
sudo systemctl daemon-reload
sudo systemctl restart docker
#确认是否开启:如果输出true,则表示开启成功
docker version -f'{{.Server.Experimental}}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 4. 获取QEMU
QEMU是一个通用的开源的跨平台仿真模拟器,提供user和system两种模式。其模拟的作用可是可以模拟在特定的体系结构下的应用的执行或者构建,比如在x86的体系结构的操作系统上运行ARM的应用。
- 下载地址:
https://github.com/multiarch/qemu-user-static/releases
# 配置QEMU
sudo cp qemu-aarch64-static /usr/bin/
sudo chmod+x /usr/bin/qemu-aarch64-static
1
2
3
4
2
3
4
# 5. 注册QEMU虚拟机(注意:重启电脑需要重新执行注册)
#方式一
docker run --rm --privileged multiarch/qemu-user-static:register
#方式二
docker run --rm --privileged multiarch/qemu-user-static --reset --persistent yes
1
2
3
4
5
6
2
3
4
5
6
# 6. 创建arm架构容器,并运行
docker run --rm -it -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static -v /etc/timezone:/etc/timezone:ro \
-v /etc/localtime:/etc/localtime:ro arm64v8/ubuntu:20.04 bash
1
2
3
2
3
# 7. 查看容器架构
在运行后的容器内部执行以下命令:uname -m
可查看容器系统所属架构。