Docker buildx 安装

article/2025/9/26 20:03:34

文章目录

    • 推荐
    • 简介
    • 开启实验室特性
    • 安装docker buildx
    • 安装模拟器
    • Build多平台image
    • 问题及解决方法
      • 问题一
      • 问题二
    • 参考链接

推荐

欢迎关注公众号9500后,围观技术、生活和日常。

简介

Docker buildx是docker的一个插件,它包含如下作用:

  1. 支持Moby BuildKit的所有特性;
  2. 可以跨CPU架构编译镜像;
  3. 可以在跨多节点同时编译镜像。

本文主要介绍其在Linux上的安装过程。

备注:在Windows和macOs上,Docker Desktop已经包含了Docker Buildx,无需额外安装,可通过命令docker buildx version 确认其是否安装成功。

开启实验室特性

  1. 首先查看是否已经开启实验室特性,如下图所示,如果都为true,说明Client和Server都已经开启完毕,跳过此小节即可。

在这里插入图片描述

  1. docker客户端开启实验室特性。在客户端的配置文件~/.docker/config.json中加入如下配置项,如果~/.docker/config.json文件不存在,则创建该文件。

    $ cat ~/.docker/config.json
    {"experimental": "enabled"
    }# 确认实验室性能开启。
    $ docker version
    
  2. docker服务端开启实验室特性。在配置文件/etc/docker/daemon.json中加入如下配置项即可,如果/etc/docker/daemon.json文件不存在,则创建该文件。

    cat /etc/docker/daemon.json
    {"experimental": true
    }systemctl daemon-reload
    systemctl restart docker# 确认实验室性能开启。
    docker version
    

安装docker buildx

  1. 下载机器对应的二进制安装包docker buildx download;

  2. 将其拷贝至$HOME/.docker/cli-plugins

    mkdir -p ~/.docker/cli-plugins
    mv buildx-v0.8.2.linux-xxx ~/.docker/cli-plugins/docker-buildx
    chmod +x ~/.docker/cli-plugins/docker-buildx
    
  3. 如果想让其在系统级别可用,可将其拷贝至如下路径:

    • /usr/local/lib/docker/cli-plugins OR /usr/local/libexec/docker/cli-plugins

    • /usr/lib/docker/cli-plugins OR /usr/libexec/docker/cli-plugins

  4. 确认安装成功

    docker buildx version
    docker buildx ls
    

安装模拟器

安装模拟器的主要作用是让buildx支持跨CPU架构编译。

  1. 首先查看是否已经安装模拟器

    $ docker buildx ls 
    NAME/NODE     DRIVER/ENDPOINT   STATUS   PLATFORMS
    default       dockerdefault     default           running   linux/amd64# 如果Platforms列只有一个本机架构,则需要继续执行下面步骤;如果已经包含了多种平台,且包含你想要的平台,则你无需再安装。
    
  2. 模拟器对饮的仓库名称是:tonistiigi/binfmt:latest ,如果你的环境能联网,最简单的方法是

    $ docker run --privileged --rm tonistiigi/binfmt --install all# 验证模拟器是否安装成功
    $ docker buildx ls 
    default       dockerdefault     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
    
  3. 如果你的环境不能联网,则需先在外网环境下载好镜像,导入内网之后,再安装:

    # 外网下载镜像,注意(如果你的内网环境机器是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       dockerdefault     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
    

Build多平台image

命令如下:

# 创建builder
$ docker buildx create --use --name mybuilder# build镜像
$ docker buildx build --platform linux/amd64,linux/arm64 --push -t repo/hello .

问题及解决方法

由于本人是在内网环境下安装执行buildx命令,因此,遇到一些问题。

问题一

描述:

$ docker buildx build --platform linux/amd64,linux/arm64 -t repo/hello . --push
[+] Building 10.0s (1/1) FINISHED
=> ERROR [internal] booting buildkit 10.0s
=> => pulling image moby/buildkit:buildx-stable-1 10.0s> [internal] booting buildkit:error: Error response from daemon: Get [https://registry-1.docker.io/v2/:](https://registry-1.docker.io/v2/:) dial tcp: lookup r

原因: 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

问题二

描述:

error: failed to solve: a.b.c:5000/centos8_gcc11_download: failed to do request: Head "[https://a.b.c:5000/v2/centos8_gcc11_download/manifests/latest]": dial tcp: lookup a.b.c on 192.168.0.3:53: read udp 172.17.0.3:48437->192.168.0.3:53: i/o timeout

原因:

  1. 它默认去网址https请求元数据,但是自己搭建的仓库没提供https的服务;
  2. 机器不能解析a.b.c的IP地址。

针对原因一,解决方法如下

参考github issures 336,主要步骤如下:

  1. 创建buildkitd.toml文件,模板可参考buildkitd.toml.md

  2. 以上模板不需要的内容可去掉,添加如下内容:(注意http的值为true)

[registry."a.b.c:5000"]mirrors = ["a.b.c:5000"]http = trueinsecure = true
  1. 删除旧的builder,重新创建新的builder。
docker buildx rm mybuilder
docker buildx create --use --name newbuilder --config buildkitd.toml

针对原因二,解决方法如下:

参考github issues 191

  • 如果你的机器安装了DNS服务,请确保该服务可用,主要涉及文件 /etc/resolv.conf/etc/hosts
  • 如果未安装DNS服务,可能需要将Dockerfile中的域名a.b.c改为真实的IP地址即可。

参考链接

docker buildx安装

  • https://goodcommand.readthedocs.io/zh_CN/latest/command/docker_buildx.html
  • https://jite.eu/2019/10/3/multi-arch-docker/
  • https://community.arm.com/arm-community-blogs/b/tools-software-ides-blog/posts/getting-started-with-docker-for-arm-on-linux
  • https://docs.docker.com/buildx/working-with-buildx/

docker buildx 使用方法:

  • https://docs.docker.com/engine/reference/commandline/buildx_build/

http://chatgpt.dhexx.cn/article/16Cm0w9e.shtml

相关文章

Docker安装MySQL

目录 前言 一、拉取镜像 二、查看镜像 三、运行镜像 四、查看正在运行的容器 五、查看容器内部 六、修改mysql配置 七、重启mysql服务,使其配置生效 八、设置docker启动时启动mysql 九、重启mysql 十、授权远程访问 10.1 进入容器内部 10.2 登陆mysql 10.…

docker安装rabbitmq

1.准备 需要安装好docker环境,可以阅读文章在Centos和Redhat上安装Docker_小帅虎丶丿的博客-CSDN博客 学习如何安装docker 需要安装docker-compose,了解yaml格式文件的编写以及一些常用的docker-compose的属性,可以参考文章 需要会使用dockerfile构建…

Docker中安装宝塔

1、docker拉取ubuntu系统 docker pull ubuntu 2、运行容器 docker run -i -t -d --name bt -p 2000:20 -p 2100:21 -p 8000:80 -p 4430:443 -p 8880:888 -p 8888:8888 --privilegedtrue -v /d/baota:/www/wwwroot ubuntu -v后的/d/baota代表本地D盘的baota目录与ubuntu系统…

Win7安装Docker

Win7安装Docker 下载安装包为:DockerToolbox.exe下载docker的win安装工具 如果是win10系统,可以直接去docker官网下载docker for windows;如果不是,为了避免乱七八糟的错误,建议直接去阿里云下载老一点的版本&#xf…

Docker下安装Redis超详细步骤

查看需要安装的镜像版本 dockerHub官网地址 搜索reids 2.点击标签 3.查看需要的版本 在安装好docker的linux中执行命令 拉取镜像 //拉取最新版本 docker pull redis //拉取指定版本 docker pull redis:6.0.8查看是否拉取成功 docker images去redis官网下载redis,然后在…

【docker】Mac M1版本下载安装

文章目录 docker简介为什么使用dockerdocker Mac系统M1安装M1版本下载地址 配置国内加速镜像检查是否安装成功总结 docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux…

Windows10下载安装docker

Docker 简介 Docker 并非是一个通用的容器工具,它依赖于已存在并运行的 Linux 内核环境。 Docker 实质上是在已经运行的 Linux 下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的 Linux 主机。 因此,Docker 必须部署在 Linux…

windows下Docker的下载与安装

一、下载 1、下载地址:docker下载 选择适合自己操作系统的 2、下载完毕之后,双击安装包进⾏安装即可。 3、打开docker,一般会弹出下面的弹窗点击链接,按照网页提示依次进行操作。 下载完成后,运行上一步中下载的…

docker下载安装

1. 安装docker 离线安装路径: https://download.docker.com/linux/static/stable/x86_64/ 下载:docker-18.06.3-ce.tgz 使用ftp上传文件到服务器 解压文件: tar -zxvf docker-18.06.3-ce.tgz 复制docker文件:cp docker/* /usr/b…

【Docker】Docker下载与安装

目录 零、文章简介 一、Docker介绍 二、Docker安装 2-1、使用Boot2Docker安装 2-1-1、安装 2-1-2、初始化 2-1-3、初始化失败:解决? 2-1-4、小结和检测 2-2、Docker Toolbox 2-2-1、下载 2-2-2、安装 2-2-3、初始化 2-2-4、初始化后的样子 …

Docker 下载安装使用(简单教程)

虚拟化容器技术。Docker基于镜像,可以秒级启动各种容器。每一种容器都是一个完整的运行环境,容器之间互相隔离。 安装Docekr https://docs.docker.com/engine/install/fedora/ Docker下载地址 1、卸载linux服务器中旧版本的docker(不管有没…

uniapp中app分享小程序方法

在uniapp中只需要调用uni.share这个api就可以发起app中分享到小程序,其中id需要绑定小程序管理后台中的id。 但是很多时候会报[share:-3]这个错误,官方给出的解释是:‘发送失败’,后来我多次尝试后发现,we…

uniapp 微信小程序分享到好友 朋友圈

维信小程序分享到朋友圈 只支持安卓部分机型 点击头部分享 onLoad: function() {wx.showShareMenu({withShareTicket: true,menus: ["shareAppMessage", "shareTimeline"]})}, 通过按钮分享 <button open-type"share" class"share&qu…

微信小程序、app之间的跳转

1.微信小程序 --> 微信小程序&#xff08;之前有须为同一公众号下的小程序这一限制&#xff0c;现在可随意跳转&#xff09; 首先说一下到另一个小程序需要的东西&#xff1a; 跳转目标小程序的APPID 使用navigator组件或者微信小程序API&#xff08;wx.navigateToMiniPro…

uniapp分享微信提示由于不支持的分享类型无法分享到微信,App分享为微信小程序方法,由于不支持的分享类型无法分享到微信,由于应用和小程序未绑定在同意微信开放平台账号,无法分享到微信.

文章目录 由于不支持的分享类型无法分享到微信(解决)由于应用和小程序未绑定在同意微信开放平台账号&#xff0c;无法分享到微信(解决)share:fail [Share微信分享:-3]Unable to send, https://ask.dcloud.net.cn/article/287 在使用uniapp开发App分享微信&#xff0c;提示 由于…

uniapp app分享功能微信小程序的分享

小程序端和app端分享html <!-- #ifdef APP-PLUS --> <view class"goodsMenu" click"appShare"><view class"menuIcon"><image src"/package/static/mall/goodsShare.png" mode""></image>&l…

uniapp:APP跳转小程序

1、manifest.json勾选分享模块&#xff0c;填入APPID 2、登录微信开放平台微信开放平台&#xff0c;申请移动应用&#xff0c;并且将移动应用关联到需要跳转到的小程序。 这个步骤由后台操作完成&#xff0c;我这里没有记录。需要给后台提供APK的签名&#xff0c;查看获取签名的…

uni-app分享小程序页面

uni-app的小程序页面默认是不可分享的&#xff0c;点击页面右上角按钮进行分享时会提示&#xff1a;“当前页面不可转发/当前页面不可分享” 配置 打开项目的manifest.json文件&#xff0c;在“App模块配置”项的“Share(分享)”下&#xff0c;勾选“微信分享”&#xff1a; 在…

uni-app分享小程序卡片给微信好友

一、前言 最近有这样一个需求&#xff0c;使用APP将一个小程序的页面分享给微信好友&#xff0c;起初一脸问号&#xff0c;APP分享小程序的页面&#xff0c;两个不相干的东西怎么关联分享&#xff1f;于是乎抱着实现不了的心态在网上看帖子&#xff0c;最后终于在uni-app文档和…

App分享微信小程序功能介绍和业务方案分析

今天微信小程序新增了支持跳转App的功能&#xff0c;算是一次比较大的突破&#xff0c;我也第一时间体验了一下该功能&#xff0c;App和小程序之间的跳转还是比较灵活的。 屏幕快照 2018-01-25 下午7.05.46.png 小程序支持打开移动应用 逻辑图 因为需要用户主动触发才能打开 …