ubuntu docker 多平台镜像构建:Buildx + QEMU 完整部署教程

1、先清理旧的 docker.io

ubuntu自带的docker太旧了,卸载重新安装

sudo apt remove -y docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc
sudo apt autoremove -y

2、安装依赖 + 添加清华docker-ce源(国内速度快)

sudo apt update
sudo apt install -y ca-certificates curl

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL [https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg](https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg) | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] [https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu](https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu) \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

3、安装(重点:docker-buildx-plugin 一并装上)

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

4、配置镜像加速(解决拉hub超时)

sudo tee /etc/docker/daemon.json << 'EOF'
{
  "registry-mirrors": [
    "[https://docker.m.daocloud.io](https://docker.m.daocloud.io)",
    "[https://docker.1ms.run](https://docker.1ms.run)"
  ]
}
EOF

重启docker:

sudo systemctl daemon-reload
sudo systemctl restart docker

5、把当前用户加入docker组(以后不用每次sudo docker)

sudo usermod -aG docker $USER

⚠️ 加完组重新登录终端/重开ssh会话才生效!

6、验证

docker --version
docker buildx version
docker compose version

能正常输出版本号就成功。


初始化 Buildx 多平台镜像构建环境

初始化 Buildx 多平台镜像构建环境,支持一次性打包 amd64 / arm64 等多架构 Docker 镜像;使用 tonistiigi/binfmt 做跨架构二进制模拟,同时给 BuildKit 配置国内镜像加速,解决拉取基础镜像慢、超时问题。

安装跨架构二进制解释器(QEMU binfmt)

sudo docker run --privileged --rm tonistiigi/binfmt --install all

生成 BuildKit 专属配置文件 buildkitd.toml

注意:这个加速配置【只对 buildx 构建过程生效】,和Docker守护进程daemon.json是两套独立加速

mkdir -p deploy

cat > deploy/buildkitd.toml << 'EOF'
[registry."docker.io"]
mirrors = ["docker.m.daocloud.io", "docker.1ms.run"]
EOF

创建builder

sudo docker buildx create
--name multiarch
--use
--driver docker-container
--driver-opt network=host
--config deploy/buildkitd.toml

查看

sudo docker buildx ls