cat /etc/os-release NAME="Amazon Linux" VERSION="2023" ID="amzn" ID_LIKE="fedora" VERSION_ID="2023" PLATFORM_ID="platform:al2023" PRETTY_NAME="Amazon Linux 2023.6.20241212" ANSI_COLOR="0;33" CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2023" HOME_URL="https://aws.amazon.com/linux/amazon-linux-2023/" DOCUMENTATION_URL="https://docs.aws.amazon.com/linux/" SUPPORT_URL="https://aws.amazon.com/premiumsupport/" BUG_REPORT_URL="https://github.com/amazonlinux/amazon-linux-2023" VENDOR_NAME="AWS" VENDOR_URL="https://aws.amazon.com/" SUPPORT_END="2028-03-15" |

如果在一个 x86 的服务器上,去构建 dockerfile 镜像,那么只有 x86 的服务器才可以使用。
同理,如果是在 arm 服务器上,去构建 dockerfile 镜像,那么也只有 arm 的服务器才可以用。
有没有一种方法,在 x86 服务器上面构建两种镜像,让 arm 和 x86 的都可以使用呢?
这就是本文的一个目的:借助于 BuildX 这个工具来实现
buildx 是 Docker 官方提供的一个构建工具,它可以帮助用户快速、高效地构建 Docker 镜像,并支持多种平台的构建。使用 buildx,用户可以在单个命令中构建多种架构的镜像,例如 x86 和 ARM 架构,而无需手动操作多个构建命令。此外,buildx 还支持 Dockerfile 的多阶段构建和缓存,这可以大大提高镜像构建的效率和速度。
yum update yum -y install docker # 启动 docker systemctl start docker && systemctl enable docker |

# 创建一个新的 buildx builder docker buildx create --name mybuilder # 启用我们刚刚创建的 builder docker buildx use mybuilder # 启动 builder docker buildx inspect --bootstrap |

# 创建一个文件夹
mkdir ./demo-docker && cd ./demo-docker
# 使用最小化的 alpine
FROM alpine:3.18
# 配置时区 / 安装环境可按需选择
RUN apk --no-cache add ca-certificates tzdata
# 创建一个简单的 hello.sh 脚本
RUN echo '#!/bin/sh' > /hello.sh && \
echo 'echo "Hello from $(uname -m) container!"' >> /hello.sh && \
chmod +x /hello.sh
ENTRYPOINT ["/hello.sh"]EOF |

# 配置环境变量
AWS_REGION=us-east-1
ACCOUNT_ID=893420598334
# 创建 ecr
aws ecr create-repository --repository-name raymond-docker-demo \
--region ${AWS_REGION}### 登录ecr
aws ecr get-login-password --region ${AWS_REGION} \
| docker login --username AWS \
--password-stdin ${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com |

docker buildx build \
--tag ${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/raymond-docker-demo:latest \
--platform linux/amd64,linux/arm64 \
--push . |

docker run --rm --name docker-demo 893420598334.dkr.ecr.us-east-1.amazonaws.com/raymond-docker-demo:latest |


使用 buildx 构建镜像之后,在 x86 服务器上面,也可以构建 arm 架构的镜像。
# | 判定描述 | 自我判定(是/否) | 备注 |
|---|---|---|---|
| 1 | 在各搜索引擎中是否能找到知识信息(包括但不限于Google、百度、Bing) | 是 | |
2 | 是否需要代码集成开发 | 否 | |
3 | 是有有相关文章 | 否 |