Docker buildx构建多平台镜像并推送到私有仓库的方法

Docker buildx构建多平台镜像并推送到私有仓库的方法,第1张

Dockerbuildx构建多平台镜像并推送到私有仓库的方法

本文的重点是引入Dockerbuildx构建多平台镜像,将消息推送到专属仓库。原文根据示例代码非常详细,对大家的学习培训或者工作都有一定的参考价值。有必要的朋友陪我去了解一下。

因子

最近发现有ARM版的Docker,hub.docker.com上也有ARM版的Docker镜像,但是ARM版Docker镜像的构建是个难题。嵌入式程序流可以在PC上交叉编译,目前还不清楚Docker是否有交叉编译的计划。

计划

在这个阶段,Docker构建臂镜的方式如下。第三种类似交叉编译。

  • 使用ARM服务器,安装ARM版本的Docker,dockerbuildout就是ARM版本的镜像。
  • 用Linux虚拟化软件模拟ARM芯片Linux,比如qemu。
  • Dockerexperimentalactionbuildx的应用可以构建多平台镜像。
  • 用Dockerbuildx
    构建几个平台镜像

    参考下面的几个链接。
    https://docs.docker.com/engine/reference/commandline/manifest/
    https://docs.docker.com/buildx/working-with-buildx/
    https://engineering.docker.com/2019/06/getting-started-with-docker-for-arm-on-Linux/

    采用了docker的两个实验功能,所以应用时必须开启实验功能。

    Dockmanifest,manifest是包含镜像信息的文档。Manifestlist是一个镜像列表,用来存储不同os/arch的镜像信息内容。我们可以建立一个清单列表来偏置两个镜像,然后它可以应用于多个平台。

    Dockerbuildx,buildx是Docker的一个软件,是下一代docker镜像构造。根据QEMU-用户静态中文翻译平台的指令体系,软件可以在x64上运行其他平台的程序流程。Buildx具体应用moby/buildkit:buildx-stable-1镜像构建多平台。

    构建docker注册表的多平台版本

    参考下面的连接来构建docker注册表映像。
    https://community.arm.com/developer/tools-software/tools/b/tools-software-ides-blog/post/deploying-multi-architecture-docker-registry

    构建一个dns服务器来处理buildx错误

    Buildx软件不移动本地主机文件,所以需要带dns。这是一个错误,https://github.com/docker/buildx/issues/218,和社区无人照管。
    解决方案:建立dns,将镜像的详细地址buildx.com偏向registry的设备,之后使用nginx。Ubuntu默认设置为systemd-resolved,在打开dnsmasq之前关闭。

    使用nginx代理处理命名问题

    推广nginx代理,HTTP和HTTPS也适用。Buildx是一个执行HTTPS的软件,不寻找封闭区域。
    提醒资格证问题,资格证不是本网站域名。解决方法:重新形成资质证书,填写网站域名。
    资格证难。我不信任自签名的资格证书,所以我把自签名的资格证书添加到buildx守护进程容器的资格证书的信任链中。https://github.com/docker/buildx/issues/80#issuecomment-533844117

    Nginx经过两个设备的升级,可以处理手机客户端推送时的很多问题。

    #nignx.conf配备 proxy_ignore_client_aborton;#忽视手机客户端报警 client_max_body_size0;#文件上传尺寸不限定 #虚拟主机配备 server{ listen443; server_namebuildx.com; sslon; ssl_certificatecrt/server.crt; ssl_certificate_keycrt/server.key; ssl_session_timeout5m; ssl_protocolsTLSv1TLSv1.1TLSv1.2;#依照这一协议书配备 ssl_ciphersECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#依照这一模块配备 ssl_prefer_server_cipherson; location/{ proxy_passhttp://192.168.1.11:81; } } server{ listen80; server_namebuildx.com; location/{ proxy_passhttp://192.168.1.11:81; } }

    设置当地码头自然环境

    本地Docker必须打开实验功能。

  • 在/etc/Docker/daemon.json中配置“experimental”:true来重启Docker。打开Docker守护进程的实验功能。
  • 在本地实现导出docker_CLI_experimental=enabled的实验功能,打开Docker客户端。
  • 使用docker版本查询测试功能是否开启。
  • 实现dockerrun-RM-privilegeddocker/binfmt:820FD95a9972a5308930a6bdfb8573DD447ad3,开放核心binfmt_misc函数,在当今平台上实现多平台程序流程。
  • 检查aarch64程序流程是否适用。cat/proc/sys/fs/binfmt_misc/QEMU-AARch64
  • 此时,本地码头工人可以 *** 作各种平台的码头工人用具。例如arm64。可以应用下面的指令检测。
  • #获取arm64版本镜像并运作 dockerpull--platformarm64alpine:3.10 dockerrun--rm-italpine:3.10sh

    制作基本镜像

    您可以从hub.docker.com获得几个平台的版本,形成清单列表,并提交给注册表。

    #pullarm64版本、更名、提交。实际镜像是不是适用多平台,能够到hub.docker.com上看。 dockerpull--platformarm64centos:7 dockertagcentos:7buildx.com/base/centos-arm64:7 dockerpushbuildx.com/base/centos-arm64:7 #pullamd64版本、更名、提交 dockerpull--platformamd64centos:7 dockertagcentos:7buildx.com/base/centos-amd64:7 dockerpushbuildx.com/base/centos-amd64:7 #建立manifestlist、提交。 dockermanifestcreate--insecurebuildx.com/base/centos:7buildx.com/base/centos-amd64:7buildx.com/base/centos-arm64:7 dockermanifestpush--insecurebuildx.com/base/centos:7

    构建业务流程镜像

    #buildx能够特定好几个平台,可是规定Dockerfile中的FROM镜像务必有相匹配版本的。 #buildx装包的镜像不容易在本地存储,加--push,提交docker仓。或是能够应用--output特定輸出方法。 dockerbuildxbuild--platformlinux/amd64,linux/arm64-tbuildx.com/base/java-base:openjdk-8-centos7.--push

    文章里的内容就这些了。期待对大家的学习和培训有所帮助,也期待大家的应用。

    欢迎分享,转载请注明来源:内存溢出

    原文地址: http://outofmemory.cn/zz/774659.html

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2022-05-03
    下一篇 2022-05-03

    发表评论

    登录后才能评论

    评论列表(0条)

    保存