Docker buildx 安装
文章目录
- 推荐
- 简介
- 开启实验室特性
- 安装docker buildx
- 安装模拟器
- Build多平台image
- 问题及解决方法
- 问题一
- 问题二
- 参考链接
推荐
欢迎关注公众号9500后,围观技术、生活和日常。
简介
Docker buildx是docker的一个插件,它包含如下作用:
- 支持Moby BuildKit的所有特性;
- 可以跨CPU架构编译镜像;
- 可以在跨多节点同时编译镜像。
本文主要介绍其在Linux上的安装过程。
备注:在Windows和macOs上,Docker Desktop已经包含了Docker Buildx,无需额外安装,可通过命令docker buildx version
确认其是否安装成功。
开启实验室特性
- 首先查看是否已经开启实验室特性,如下图所示,如果都为true,说明Client和Server都已经开启完毕,跳过此小节即可。
docker客户端开启实验室特性。在客户端的配置文件
~/.docker/config.json
中加入如下配置项,如果~/.docker/config.json
文件不存在,则创建该文件。$ cat ~/.docker/config.json {"experimental": "enabled" }# 确认实验室性能开启。 $ docker version
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
下载机器对应的二进制安装包docker buildx download;
将其拷贝至
$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
如果想让其在系统级别可用,可将其拷贝至如下路径:
/usr/local/lib/docker/cli-plugins
OR/usr/local/libexec/docker/cli-plugins
/usr/lib/docker/cli-plugins
OR/usr/libexec/docker/cli-plugins
确认安装成功
docker buildx version docker buildx ls
安装模拟器
安装模拟器的主要作用是让buildx支持跨CPU架构编译。
首先查看是否已经安装模拟器
$ docker buildx ls NAME/NODE DRIVER/ENDPOINT STATUS PLATFORMS default dockerdefault default running linux/amd64# 如果Platforms列只有一个本机架构,则需要继续执行下面步骤;如果已经包含了多种平台,且包含你想要的平台,则你无需再安装。
模拟器对饮的仓库名称是:
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
如果你的环境不能联网,则需先在外网环境下载好镜像,导入内网之后,再安装:
# 外网下载镜像,注意(如果你的内网环境机器是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
原因:
- 它默认去网址https请求元数据,但是自己搭建的仓库没提供https的服务;
- 机器不能解析
a.b.c
的IP地址。
针对原因一,解决方法如下:
参考github issures 336,主要步骤如下:
创建buildkitd.toml文件,模板可参考buildkitd.toml.md
以上模板不需要的内容可去掉,添加如下内容:(注意http的值为true)
[registry."a.b.c:5000"]mirrors = ["a.b.c:5000"]http = trueinsecure = true
- 删除旧的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/
Docker buildx 安装相关推荐
- Docker Buildx插件
Docker Buildx插件 Overview Docker Buildx是一个CLI插件,它扩展了Docker命令,完全支持Moby BuildKit builder toolkit提供的功能.它 ...
- 巧用 Docker Buildx 构建多种系统架构镜像
公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! Docker Buildx 是一个 Docker CLI 插件,其扩展了 Docker 命令,支持 Moby Bu ...
- Docker的安装部署及优化详解(汇总版,学习docker这一篇就够了)
目录 一.部署20版本的docker 1.1 安装依赖包 1.2 设置阿里云镜像 1.3 安装docker社区版 1.4 关闭增强机制 1.5 前体准备(开启服务) 1.6 设置镜像加速 1.6-1 ...
- 【Docker系列】 Docker 多架构支持 和 Docker Buildx 构建多架构
Docker 的多架构支持 docker自适应了CPU的架构 会自动选择架构的版本 镜像 多架构的标签,会自动选择适合的标签. 使用 buildx 构建多架构镜像 Windows和Mac的桌面版Doc ...
- docker buildx 构建arm64架构镜像
文章目录 buildx测试 前提条件 安装 构建镜像 推送http私库问题 docker容器里运行docker buildx 在x86架构下如何打包arm64架构的镜像,docker buildx 是 ...
- Docker的安装和镜像容器的基本操作
Docker的安装和镜像容器的基本操作 Docker 概述 Docker与虚拟机的区别 namespace的六项隔离 Docker核心概念 安装 Docker Docker 镜像操作 搜索镜像 获取镜 ...
- Docker的安装、镜像源更换与简单应用
Docker的安装.镜像源更换与简单应用[阅读时间:约20分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.Docker的安装 四.Docker的简单应用 1. ...
- 客快物流大数据项目(八):Docker的安装和启动
目录 Docker的安装和启动 一.服务器规划 二.安装Docker 1.验证Linux内核版本 <
- Docker初学2:Docker的安装
Docker的安装 Docker的架构图 我们先来介绍一下上面这张Docker架构图 镜像(image): Docker 镜像(Image)就是一个只读的模板.镜像可以用来创建 Docker 容器,一 ...
- 『中级篇』docker容器安装wordpress(37)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』docker容器安装wordpress(37) 第一节的时候我就部署过wordpress,可能很多老铁一头雾水不知道 ...
最新文章
- angular6 mysql_Angular6项目搭建
- 《C++ Primer 4th》读书笔记 第5章-表达式
- WPF 关于鼠标事件和坐标
- python访问mysql_python连接mysql
- docker, docker-compose安装
- 小鹏吃相难看,消费者难做“鹏”友
- 布隆过滤器误判_布隆过滤器原理
- 在计算机里分数线怎么表示什么意思,高考投档分数线是什么意思 怎么定的
- Lucene为不同字段指定不同分词器(转)
- 单片机最小系统着实让人着迷
- My dear dalao please daidai wo。
- 水果缺陷检测以草莓等级分类为例
- Fatal error: Cannot use 'Object' as class name as it is reserved in xxx/Object.php on line 77
- Kubeadm搭建高可用K8S(四)Dashboard安装配置
- oracle报错Error while registering Oracle JDBC Diagno
- shell中base64编解码的使用
- java for row_Java Row.getRowNum方法代码示例
- 已经成功拿到了几个offer的我来告诉你,Android面试官问的一些问题,看完这一篇就没有拿不到的offer
- PNAS:人类小脑皮层的表面积相当于大脑的80%
- Centos系统服务器挂载硬盘(ntfs格式和exfat格式)
热门文章
- 修改HBuilder的livereload添加自定义响应模块
- cron表达式案例+cron在线生成器
- sign-canvas 一个基于canvas开发,封装于Vue组件的通用手写签名板(电子签名板),支持pc端和移动端;
- Java-面向对象编程-三大特性之多态
- 数学魔鬼表达式——第三天
- Axure 9.0.0.3704 授权码
- 计算机d盘无法格式化,d盘无法格式化,小编教你解决D盘无法格式化的方法
- Linux系统下下载Tomcat详细步骤。
- 2021非常全的接口测试面试题及参考答案
- 鸿蒙系统下的搜狗输入法,搜狗输入法鸿蒙版app下载-搜狗输入法 鸿蒙版v10.28-PC6鸿蒙网...