✅ 原理

docker构建多架构镜像原理是在主机上起一个容器,通过buildctl构建多架构镜像,注意,容器里是没有docker命令的,docker是通过接口调用buildkit来构建多架构镜像。

✅ 跳过证书认证

buildkit.toml
[registry."11.11.11.11:9443"]
  insecure = true
  skip_verify = true

docker buildx rm xxx
docker buildx ls
docker buildx create --name mybuilder --config ./buildkit.toml --use

Dockerfile 里根据 buildx 的目标架构拷贝不同的二进制文件是很常见的需求(多架构镜像)。
buildx 自动提供变量

变量含义
TARGETARCHamd64 / arm64 / 386 / arm / ppc64le …
TARGETOSlinux / darwin / windows …
TARGETPLATFORMlinux/amd64、linux/arm64…

你可以直接在 Dockerfile 里用这些变量 做条件判断


✅ 方法 1:使用 --platform + TARGETARCH 选择不同文件

你的文件结构例如:

bin/
  ├── app-amd64
  ├── app-arm64

Dockerfile:

FROM alpine

ARG TARGETARCH

# 根据平台复制不同的二进制文件
COPY bin/app-${TARGETARCH} /usr/local/bin/app

RUN chmod +x /usr/local/bin/app

CMD ["app"]

构建:

docker buildx build --platform linux/amd64,linux/arm64 -t myapp:v1.0 .

buildx 会自动把 TARGETARCH 注入为:

  • amd64
  • arm64

🚀 最推荐的写法(简单 + 可维护)

FROM alpine
ARG TARGETARCH

RUN mkdir /app
COPY bin/app-${TARGETARCH} /usr/local/bin/app
RUN chmod +x /usr/local/bin/app

CMD ["app"]

如果你愿意 发一下你的目录结构 + 二进制文件命名格式
我可以帮你写出 完全适配你项目的 Dockerfile 多架构模板

更多推荐