MacOS M1 芯片安装 linux/amd64 版本Docker镜像

4,270 阅读2分钟

M1 Chip

ARM架构无法编译基于AMD64/x86_64架构的项目,只能通过Docker 间接去使用对应版本的系统。

第一次使用Mac操作系统,以为可以使用Parallel DeskTop 起个windows或者linux的虚拟机,就可以解决的,没想到它居然只能使用arm版本的,浪费600多块。(PD 有破解版,需要可私信,免费的~)

Install

Build & Run 多种类型架构的镜像

  • 列出默认配置builder
# docker buildx ls 

NAME/NODE DRIVER/ENDPOINT STATUS  PLATFORMS
default * docker                  
  default default         running linux/amd64, linux/386
  • 创建新的builder容器, 并切换使用当前构建的容器
# docker buildx create --name mybuilder --use
  • 检查创建的容器信息
# docker buildx inspect --bootstrap

 => CANCELED [internal] booting buildkit                                                                 14.8s
 => => pulling image moby/buildkit:buildx-stable-1                                                       14.8s
Name:   mybuilder
Driver: docker-container

测试工作流以确保可以生成、推送和运行多体系结构映像。创建一个简单的示例 Dockerfile,构建镜像,并将它们推送到 Docker Hub

FROM ubuntu:20.04
RUN apt-get update && apt-get install -y curl

使用 buildx 构建 Dockerfile & push

#docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t username/demo:latest --push .
 => pushing layers                                                             2.7s
 => pushing manifest for docker.io/username/demo:latest                       2.2

使用 docker buildx imagetools ,检查镜像

# docker buildx imagetools inspect username/demo:latest

完成上述操作,可在Docker Hub上查看打tag版本的镜像

Test

run SHA tag 镜像,校验架构版本,可在macOS 上输入一下命令行

# docker run --rm docker.io/username/demo:latest@sha256:2b77acdfea5dc5baa489ffab2a0b4a387666d1d526490e31845eb64e3e73ed20 uname -m


# docker run --rm docker.io/username/demo:latest@sha256:723c22f366ae44e419d12706453a544ae92711ae52f510e226f6467d8228d191 uname -m

uname -m 返回构建架构类型 aarch64 and armv7l

Run Docker container

tag本地镜像

# docker tag local-image:tagname new-repo:tagname
# docker push new-repo:tagname

push 本地镜像 & docker buildx

# docker push 1020460168/kiga:tagname
# docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t 1020460168/kiga:latest --push 

在macOS M1 arm64 机器上 运行amd64 架构的linux版本

# docker buildx build -t 1020460168/kiga:latest --platform linux/amd64
# docker run -p80:80 1020460168/kiga:latest

1020460168/kiga 是我上传到Docker Hub 上的镜像, 可以pull下来进行测试

Blog

查看英文版说明,可跳转本人博客主页

Building Multi-Architecture Docker images