背景
默认情况下,x86_64平台只能构建x86_64镜像,如果需要在X86_64平台构建多平台镜像(比如ARM64),我们可以用Docker官方提供的Buildx工具来完成多平台镜像构建。ARM 架构与X86相比,ARM 低功耗、移动市场占比高,X86 高性能、服务器市场占比高。
构建时要用到 docker buildx 命令,Docker 版本需要 19.03+
初始化Docker Buildx
Docker Buildx属于实验性功能,默认并没有开启,需要修改
vim /etc/docker/daemon.json
添加一行
"experimental": true
由于Docker默认的builder实例不支持同时指定多个–platform,所以必须先创建一个新的builder实例,并使用。
docker buildx create --name builderx
docker buildx use builderx
docker buildx inspect --bootstrap
Docker 在 Linux/AMD64 系统架构下是不支持 ARM 架构镜像,因此我们可以运行一个新的容器(Emulator)让其支持该特性。
docker run --rm --privileged tonistiigi/binfmt:latest --install all
制作镜像
制作一个简单的Nginx多架构镜像
vim Dockerfile
FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
镜像构建后默认保存在构建缓存中,没有保存在本地,所以将 type 指定为 docker,必须分别为不同的 CPU 架构构建不同的镜像,不能合并成一个镜像。
docker buildx build -t harbor.yutao.co/library/nginx-arm64 --platform=linux/arm64 -o type=docker .
docker buildx build -t harbor.yutao.co/library/nginx-amd64 --platform=linux/amd64 -o type=docker .
看到我们制作的镜像
检验镜像架构
上传到Harbor仓库
上传镜像到私有仓库进行检验
docker login harbor.yutao.co
#填写自己的私有仓库地址
docker push harbor.yutao.co/library/nginx-amd64
docker push harbor.yutao.co/library/nginx-arm64
上传成功后查看属性看到架构为amd64
可以看到架构的不同
上传到Docker hub仓库
在Docker Hub创建library仓库
docker login
docker buildx build --platform linux/arm64,linux/amd64 -t yutao517/library . --push
上传到阿里云镜像仓库
创建library本地仓库
docker login --username=tao30564 registry.cn-hangzhou.aliyuncs.com