文章目录
基础知识,及 安装并启用 QEMU 多架构支持
# Buildx 限制和应对
1、使用 buildx 作为docker CLI 插件要求 Docker 版本 >= 19.03
2、构建的宿主机 内核版本 要求 >= 4.8
# Tips: 即便内核版本大于 Linux kernel >= 4.8,也有可能还没有开启内核相关的特性支持,需要手动开启
# 安装并启用 QEMU 多架构支持
docker run --privileged --rm tonistiigi/binfmt --install all
# 查看binfmt_misc是否存在(Buildx 会依赖内核的 binfmt_misc 支持)
ls -al /proc/sys/fs/binfmt_misc/
# 列出已有 builder,确认一下(你会看到原本有一个默认的default 构建器)
docker buildx ls
# 新建一个 multi-arch builder(仅需做一次)(可以显示指定 --driver docker-container )
# Tips: 创建成功后状态是 Status: inactive 需要使用 --bootstrap 参数来启动构建器(--use 表示设置为默认构建器)
docker buildx create --name mybuilder --use
# docker buildx create --name mybuilder --use --driver docker-container
# 启动 mybuilder 构建器
docker buildx inspect --bootstrap --builder mybuilder
# 查看 支持的异构平台有哪些
# docker buildx inspect --bootstrap
准备一个阿里云ACR容器服务个人版(个人版支持多架构镜像,并登录)
## 1、选择大区 如"中国香港" >> 创建 命名空间 "wsfnk" (会自动设置为 私有,并开启 自动创建仓库)
## 2、点击 "访问凭证" >> 设置 "固定密码" >> 你会获得如下格式的登录方式(修正你的账户信息)
docker login --username=189******@189.com registry.cn-hongkong.aliyuncs.com
## 3、上述命令在终端执行 出现 "Login Succeeded" 表示登录成功,认证信息回保存在如下文件中
cat ~/.docker/config.json
开始构建docker images,并导出镜像 或者推送到远端仓库
# 准备Dockerfile,并执行构建
cat > Dockerfile <<"EOF"
FROM debian:11
RUN apt-get update && apt-get install -y \
tcpdump iproute2 \
&& rm -rf /var/lib/apt/lists/*
CMD ["bash"]
EOF
# 本地构建镜像,并导出;使用指定dockerfile构建 amd64架构的镜像
docker buildx build -f ./Dockerfile --platform linux/amd64 -t my-debain11:latest --load .
# docker buildx build --platform linux/arm/v7,linux/arm64,linux/amd64 -t my-debian11:latest --load .
# 导出构建的images
docker save -o my-debian11.tar.gz my-debain11:latest
# 构建arm32
docker buildx build -f ./Dockerfile --platform linux/arm/v7 -t my-debian11:latest .
# 异构场景,构建完成后,并推送到仓库(以阿里ACR个人版为例)
# 先登录阿里云Docker Registry(会让你输入密码)
docker login --username=189******@189.com registry.cn-hongkong.aliyuncs.com
# 用指定dockerfile构建多个架构平台镜像,并推送到ACR容器仓库
# 格式 registry_url/namespace/image_name:tag
docker buildx build -f ./Dockerfile --platform linux/arm/v7,linux/arm64,linux/amd64 -t registry.cn-hongkong.aliyuncs.com/wsfnk/my-debian11:latest --push .
# 构建命令(同时打多个tag,并推送)
docker buildx build -f ./Dockerfile \
--platform linux/arm/v7,linux/arm64,linux/amd64 \
-t registry.cn-hongkong.aliyuncs.com/wsfnk/my-debian11:2025.05.13 \
-t registry.cn-hongkong.aliyuncs.com/wsfnk/my-debian11:latest \
--push .
# 附、构建的同时打上多个tag,并都推送到不通的仓库中
# 登录多个 Registry
docker login registry.cn-hongkong.aliyuncs.com
docker login docker.io
# 构建并推送
docker buildx build -f ./Dockerfile \
--platform linux/arm/v7,linux/arm64,linux/amd64 \
-t registry.cn-hongkong.aliyuncs.com/wsfnk/my-debian11:2025.05.13 \
-t registry.cn-hongkong.aliyuncs.com/wsfnk/my-debian11:latest \
-t docker.io/myhahaha/my-debian11:2025.05.13 \
-t docker.io/myhahaha/my-debian11:latest \
--push .
## 查看镜像信息(主要看有不有不同的架构平台 Platform)
# 可以支持查看远程仓库内 镜像的 架构平台信息
docker buildx imagetools inspect my-debian11:latest
docker buildx imagetools inspect registry.cn-hongkong.aliyuncs.com/wsfnk/my-debian11:latest
# 若想要被公网拉取(请将仓库设置为 "公开")
docker pull registry.cn-hongkong.aliyuncs.com/wsfnk/my-debian11:latest
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论