×

如何在M1芯片的macOS上编译x86/amd64架构的镜像

2024-01-15 15:16:50 Falcon

使用GPT3.5:

在M1芯片的macOS上编译x86/amd64架构的镜像,您可以使用 docker buildx 工具,该工具提供了对多架构构建的支持。

以下是基本步骤:

  1. 安装 Docker Desktop for Mac(Apple Silicon): 确保您的Docker Desktop安装是适用于M1芯片的版本。

  2. 启用实验性功能: 打开Docker Desktop,进入 "Preferences" -> "Docker Engine",启用 "Use the new virtualization framework" 和 "Enable Apple M1 Tech Preview"。

  3. 安装 buildx 插件: 在终端中执行以下命令来安装 buildx 插件:

    docker buildx install
    
  4. 创建并配置 buildx 构建器: 在终端中执行以下命令:

    docker buildx create --use
    

    这将创建一个名为 default 的 buildx 构建器,并将其设置为当前使用。

  5. 编写 Dockerfile: 编写您的Dockerfile,确保它不包含特定于某一架构的指令。

  6. 使用 buildx 构建多架构镜像: 在终端中执行以下命令,使用 --platform 选项指定您想要构建的架构:

    docker buildx build --platform linux/amd64,linux/arm64 -t your-image-name:your-tag .
    

    这个例子中,your-image-name 是您的镜像名称,your-tag 是您的标签。通过 --platform 选项,您可以指定要构建的架构,这里同时包含了x86/amd64和arm64。

请注意,使用 docker buildx 构建多架构镜像可能会比单一架构构建慢一些,因为它需要为每个架构生成相应的镜像。

使用GPT4

在 M1 芯片的 macOS 上,构建面向 x86/amd64 架构的 Docker 镜像时,您需要注意 Docker Desktop for Mac (Apple Silicon) 默认使用 arm64 架构。您可以使用下面的方法来构建面向 x86/amd64 架构的镜像:

  1. 使用多平台构建 从 Docker Desktop for Mac 3.0.0 版本开始,Docker 引入了一个名为 buildx 的实验性特性,它支持针对不同的平台(包括 x86/amd64 和 arm64)构建和推送多平台镜像。您可以使用如下的命令来创建一个支持多平台构建的构建器实例:
docker buildx create --use --name mybuilder

然后,就能够通过 --platform 参数为 docker buildx build 命令指定目标平台,例如:

docker buildx build --platform linux/amd64 -t username/imagename .
  1. 使用 QEMU 模拟器 Docker Desktop includes a version of the QEMU emulator that lets you build and run x86 containers on Apple Silicon. You can use docker run --platform linux/amd64 ... command to build and run x86 containers on M1 chip.

请注意,这种方法可能无法适用于所有情况,因为 QEMU 不是原生运行,它可能会带来一定的性能损失,而且某些特殊情况下可能出现兼容性问题。在考虑在生产环境中使用时应当谨慎。

  1. 使用 Rosetta 2 运行 Docker Rosetta 2 是 Apple 提供的一种转码服务,可以让您在新的 Apple Silicon Mac 上运行旧的 Intel 应用程序。你可以打开 Terminal 在 Rosetta 2 模式下运行 Docker,这样可以使得 Docker 运行在 x86 模式下,编译出来的镜像默认就是 x86/amd64 架构。

都尝试过后,建议选择适合自己的方法。不过必须注意,以上方法可能会带来性能损失,并且不能保证100%的兼容性。在进行构建之前,应该仔细评估您的需求和对应方法的适用性。

本文收录于