docker 不同架构下迁移问题

2022-10-20  本文已影响0人  dc的梦呓

遇到一个场景,在amd64架构服务器上的导出的docker镜像,需要导入到arm64上,会遇到问题,运行失败。此是由于不同cpu架构下docker的运行问题。可以先在相同的cpu架构上build,再导到相同架构上服务器,这是一种处理方法,但是若没有相同cpu架构的服务器,会比较麻烦。docker提供了一种解决方案,支持不同cpu架构的镜像构建,目前是实验性的,可以一试。

1、docker 版本

docker 版本需>=19.03

2、docker开启实验性功能:

docker客户端开启实验室特性
在客户端的配置文件/.docker/config.json中加入如下配置项,如果/.docker/config.json文件不存在,则创建该文件。

{
    "experimental": "enabled"
}

docker服务端开启实验室特性
在配置文件/etc/docker/daemon.json中加入如下配置项即可,如果/etc/docker/daemon.json文件不存在,则创建该文件。

{
    "experimental": true
}

注意:内容不一样,一个是 “enable”、一个是 true。
完成后,重新载入docker:

systemctl daemon-reload
systemctl restart docker

查看docker版本:

docker version
image.png

3、buildx 安装

下载机器对应的二进制安装包docker buildx download
将其拷贝至可执行目录下;

mkdir -p ~/.docker/cli-plugins
mv buildx-v0.9.1.linux-xxx ~/.docker/cli-plugins/docker-buildx
chmod +x ~/.docker/cli-plugins/docker-buildx

验证安装是否成功:

docker buildx version
docker buildx ls
image.png

4、安装架构模拟器

检查是否已安装:

$ docker buildx ls 
NAME/NODE     DRIVER/ENDPOINT   STATUS   PLATFORMS
default       docker
  default     default           running   linux/amd64

# 如果Platforms列只有一个本机架构,则需要继续执行下面步骤;如果已经包含了多种平台,且包含你想要的平台,则你无需再安装。

安装模拟器:

docker run --privileged --rm tonistiigi/binfmt --install all

5、build多平台

先创建一个新的构建器:

docker buildx create --use --name mybuilder

启动构建器:

docker buildx inspect mybuilder --bootstrap

构建多平台镜像:

docker buildx build --platform linux/amd64,linux/arm64 --push -t repo/hello .

构建后的镜像image中看不到,参考:Where did the built multi-platform image go? · Issue #166 · docker/buildx · GitHub
也可执行脚本:

for arch in amd64 arm64 arm  ; do 
    docker buildx build \
    --platform $arch \
    --output "type=docker,push=false,name=me/myimage:mytag-$arch,dest=myimage.tar" \
    $path_to_dockerfile/
done

参考资料:
Docker buildx 安装codefreestyle的博客-CSDN博客安装buildx

跨平台构建 Docker 镜像新姿势,x86、arm 一把梭 - 腾讯云开发者社区-腾讯云 (tencent.com)

How to Build Multi-Arch Docker Images - Speedscale

如何使用 docker buildx 构建跨平台 Go 镜像 | Shall We Code? (waynerv.com)

上一篇 下一篇

猜你喜欢

热点阅读