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
查看英文版说明,可跳转本人博客主页