Buildx构建异构docker平台镜像(x86-ARM)

一、Docker的安装与操作

Docker的安装、创建、等操作可以查看Docker 教程 | 菜鸟教程 (runoob.com),这里不再赘述。

常见问题1:**普通用户使用docker命令报错: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get “http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json”: dial unix /var/run/docker.sock: connect: permission denied?

原因:

docker进程使用Unix Socket而不是TCP端口,而默认情况下,Unix socket属于root用户,需要root权限才能访问。

解决方法:

docker守护进程启动的时候,会默认赋予名字为docker的用户组读写Unix socket的权限,因此只要创建docker用户组,并将当前用户加入到docker用户组中,那么当前用户就有权限访问Unix socket了,进而也就可以执行docker相关命令。

#添加docker用户组(如果docker用户组已存在会提示)
sudo groupadd docker 
#将登陆用户加入到docker用户组中
sudo gpasswd -a $USER docker  
#更新用户组
newgrp docker 
#测试docker命令是否可以直接使用
docker ps

二、Buildx构建多平台镜像

1、Buildx 简介

Docker Buildx 是 Docker的CLI插件,来自于Moby BuildKit 。自从Docker 18.06 开始这个插件直接集成到了Docker build 中,直至成文之日,它仍处于Experimental状态,所以想使用它需要显式地开启它。

Buildx 是一个构建工具, 它可以帮助用户快速、高效地构建 Docker 镜像, 并支持多种平台的构建。使用 buildx, 用户可以在单个命令中构建多种架构的镜像, 例如 x86 和 ARM 架构, 而无需手动操作多个构建命令。此外, buildx 还支持 Dockerfile 的多阶段构建和缓存, 这可以大大提高镜像构建的效率和速度。

大致流程为: docker --> buildx -->builder(moby/buildkit:buildx-stable-1)–>image(arm64)

2、Buildx的安装

提示:如果已经安装了buildx,无需额外安装,可通过命令docker buildx version 确认其是否安装成功。

#在线安装docker-buildx
sudo apt-get install docker-buildx
#查看是否安装成功
docker buildx version 

3、查看当前构建器支持的平台

#查看当前构建器的情况
 docker buildx ls
# NAME/NODE DRIVER/ENDPOINT STATUS  BUILDKIT             PLATFORMS
#default * docker                                       
#  default default         running v0.11.7+d3e6c1360f6e linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386

#回显内容Platforms列中的linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386默认构建器支持的架构平台。
#如果默认构建器包含了所需的平台则跳过这一节,可以直接拉取对应架构平台的docker镜像。
#这里我们要创建arm64的docker,显然不支持,所以要重新创建一个构建器。

4、创建Buildx构建容器

#创建构建器,名为mybuilder,可以任意起名
docker buildx create --name mybuilder
#buildx使用新建的构建器
docker buildx use mybuilder
#初始化构建器(这个过程比较久)
docker buildx inspect --bootstrap

当初始化成功,会拉下来moby/buildkit:buildx-stable-1的镜像,并启动构建容器。通过 docker ps 查看如下:

root@hz:~# docker ps
root@hz:~# docker ps
CONTAINER ID   IMAGE                           COMMAND       CREATED       STATUS          PORTS     NAMES
ba6651e07ab0   moby/buildkit:buildx-stable-1   "buildkitd"   5 weeks ago   Up 50 minutes             buildx_buildkit_mybuilder0

5、构建ARM64镜像

docker镜像命令参考Docker 教程 | 菜鸟教程 (runoob.com)

方法一

如果已经有arm64的docker image,可以直接导入image,启动docker。

导入容器

如果要导出其他设备的某个容器,可以使用 docker export 命令。

$ docker export 1e560fca3906 > ubuntu.tar

导入容器

可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:

$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1

(2) 获取镜像

Docker镜像的查询地址https://hub.docker.com/

#拉取arm架构镜像
docker pull  --platform=arm64  ubantu:latest

6、启动docker验证架构

启动容器

$ docker run -it ubuntu /bin/bash

验证

#进入docker查看docker架构
uname -m
#aarch64
#退出docker,查看外部内核架构信息
exit
uname -m
#x86_64

到这里就完成了。

常见问题1:

**初始化构建器失败:**ERROR: Error response from daemon: No such image: moby/buildkit:buildx-stable-1

请添加图片描述

原因: Docker默认去https://registry-1.docker.io拉镜像,因为不能联网,所有连接错误。

解决方法: 外网下载镜像,再导入内网。

# 外网节点拉取镜像
$ docker pull moby/buildkit:buildx-stable-1@sha256:273b61ca4f538c120c8555b4e7c59e903bd5bdfc72d93439e75f46fcf1f4e135

# 外网节点导出镜像
$ docker save -o moby_buildkit_buildx-stable-x-arm64.tar 9b3c7392ac9e

# 内网节点导入镜像
$ docker load -i moby_buildkit_buildx-stable-x-arm64.tar 9b3c7392ac9e
$ docker tag 9b3c7392ac9e moby/buildkit:buildx-stable-1

三、另一种方法:buildx和binfmt

Binfmt 使用了流行的容器技术——Docker,构建和分发模拟器。它可以构建并安装QEMU-user模拟器的本地版本,让你能够执行非本机架构的程序。该项目提供了便捷的命令行工具,用于安装、卸载和管理这些模拟器。此外,它还与 BuildKit 集成,为自动化构建过程中的多平台仿真提供支持。

Binfmt 对应的仓库名称是:tonistiigi/binfmt:latest

buildx的安装参考上面第二章。

1、在线安装binfmt

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

# 验证模拟器是否安装成功
$ docker buildx ls 
default       docker
  default     default    running   linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6

# 查看某个,检查aarch64是否安装成功
$ cat /proc/sys/fs/binfmt_misc/qemu-aarch64
enabled
interpreter /usr/bin/qemu-aarch64
flags: OCF
offset 0
magic 7f454c460201010000000000000000000200b7

2、离线安装

# 外网下载镜像,注意(如果你的内网环境机器是arm架构,就下载arm版本,如果你的内网环境机器是amd架构,就下载amd版本;这里我下载的是arm版本)
$ docker pull tonistiigi/binfmt:latest@sha256:01882a96113f38b1928a5797c52f7eaa7e39acf6cc15ec541c6e8428f3c2347d
# 导出镜像
$ docker save -o tonistiigi_binfmt_arm64.tar f1d8c13be37e
# 将导出的镜像上传至内网服务器
$ scp tonistiigi_binfmt_arm64.tar xxxx:/xxx
# 在内网机器执行如下命令,导入镜像
$ docker load -i tonistiigi_binfmt_arm64.tar
# 安装模拟器
$ docker run --privileged --rm tonistiigi/binfmt --install all

# 验证是否安装成功
$ docker buildx ls 
default       docker
  default     default    running   linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6

# 验证arm机器上的amd模拟器是否安装成功,则执行如下命令,输出结果包含enable即可
$ cat /proc/sys/fs/binfmt_misc/qemu-x86_64
enabled

# 如果你是amd机器,需要验证arm模拟器是否安装成功,则执行如下命令,输出结果包含enable即可
$ cat /proc/sys/fs/binfmt_misc/qemu-aarch64
enabled

<think>好的,我现在需要帮用户解决在Linux上安装Docker Buildx的问题。首先,我得回顾用户之前的问题,看看有没有相关的背景信息。用户之前询问过如何排查Linux网络问题,现在转向Docker Buildx的安装,可能是在搭建开发或部署环境时遇到了问题。 用户可能已经安装了Docker,但需要Buildx来扩展构建功能,比如多平台构建BuildxDocker的一个插件,所以首先要确认Docker版本是否支持。通常Docker 19.03及以上版本自带Buildx,但可能需要手动启用或安装。 接下来,我需要考虑用户的操作系统环境。不同的Linux发行版安装方式可能略有不同,比如Debian/Ubuntu和CentOS/RHEL的包管理工具不同。但Docker官方通常推荐使用下载二进制文件的方式安装插件,这可能更通用。 用户可能遇到的问题包括:如何确认Buildx是否已经安装,如何启用实验性功能,或者如何配置Buildx使用不同的驱动程序,比如docker-container来支持多平台构建。此外,权限问题也可能出现,比如用户是否在docker组中,是否需要sudo等。 需要分步骤说明安装过程,包括检查Docker版本,安装Buildx,启用实验性功能,验证安装,以及可能的进阶配置。还要提醒用户注意常见问题,比如权限错误或无法使用多平台构建的情况。 另外,用户可能不知道Buildx需要Docker的实验性功能,所以需要指导如何编辑配置文件,如/etc/docker/daemon.json,并重启服务。还要提到创建builder实例,因为默认的builder可能不支持多平台。 最后,要确保命令的正确性,使用代码块标注,并给出示例输出,帮助用户确认每一步是否成功。同时,提供验证命令,如docker buildx version和docker buildx inspect,确保用户安装正确。</think>在 Linux 系统中安装并使用 `docker buildx`(Docker 的多平台构建工具)的完整流程如下: --- ### 一、前置条件 1. **已安装 Docker 引擎** 要求 Docker 版本 ≥ 19.03(推荐使用最新稳定版)。 验证 Docker 版本: ```bash docker --version ``` 2. **启用 Docker 实验性功能**(部分旧版本需要) - 编辑 Docker 配置文件: ```bash sudo nano /etc/docker/daemon.json ``` - 添加以下内容(若文件不存在则新建): ```json { "experimental": true } ``` - 重启 Docker 服务: ```bash sudo systemctl restart docker ``` --- ### 二、安装 Buildx #### 方法 1:自动安装(Docker ≥ 20.10) - Docker 20.10+ 已内置 `buildx`,但需手动创建符号链接: ```bash mkdir -p ~/.docker/cli-plugins ln -s /usr/lib/docker/cli-plugins/docker-buildx ~/.docker/cli-plugins/ ``` #### 方法 2:手动安装(通用) 1. **下载二进制文件** ```bash # 获取最新版本号 BUILDX_VERSION=$(curl -s https://api.github.com/repos/docker/buildx/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/') # 下载并安装 wget https://github.com/docker/buildx/releases/download/v${BUILDX_VERSION}/buildx-v${BUILDX_VERSION}.linux-amd64 mkdir -p ~/.docker/cli-plugins mv buildx-v${BUILDX_VERSION}.linux-amd64 ~/.docker/cli-plugins/docker-buildx chmod +x ~/.docker/cli-plugins/docker-buildx ``` 2. **验证安装** ```bash docker buildx version ``` ✔️ 成功输出示例: ``` github.com/docker/buildx v0.11.2 4484c8c6 ``` --- ### 三、配置 Buildx平台构建 1. **创建并激活 Buildx 构建器** ```bash docker buildx create --name multiarch-builder --driver docker-container --use docker buildx inspect --bootstrap # 初始化构建器 ``` 2. **验证多平台支持** ```bash docker buildx ls ``` ✔️ 输出中应包含 `multiarch-builder` 且 `PLATFORMS` 列显示支持的系统架构(如 `linux/amd64, linux/arm64`)。 --- ### 四、使用 Buildx 构建平台镜像 ```bash # 示例:同时构建 AMD64 和 ARM64 架构镜像 docker buildx build \ --platform linux/amd64,linux/arm64 \ -t your-image:tag \ --push . # 若需推送至镜像仓库,保留 --push 参数 ``` --- ### 五、常见问题解决 #### 1. 权限不足错误 ```bash # 将用户加入 docker 组 sudo usermod -aG docker $USER newgrp docker # 刷新组权限 ``` #### 2. 未启用实验性功能 - 确保 `/etc/docker/daemon.json` 已配置 `"experimental": true` - 重启 Docker:`sudo systemctl restart docker` #### 3. 多平台构建失败 - 安装 QEMU 模拟器: ```bash docker run --privileged --rm tonistiigi/binfmt --install all ``` - 确认内核支持: ```bash cat /proc/sys/fs/binfmt_misc/qemu-* ``` --- ### 六、进阶配置 | 场景 | 操作 | |--------------------------|----------------------------------------------------------------------| | 切换默认构建器 | `docker buildx use multiarch-builder` | | 删除构建器 | `docker buildx rm multiarch-builder` | | 查看构建器详情 | `docker buildx inspect --bootstrap` | | 本地构建缓存优化 | 添加 `--cache-from type=local,src=/path/to/cache` 参数 | --- 通过以上步骤,您可以在 Linux 系统中完整配置 `docker buildx`,并实现跨平台镜像构建
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青铜发条

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值