docker使用buildx构建多平台(x86,arm64)构架镜像

这篇具有很好参考价值的文章主要介绍了docker使用buildx构建多平台(x86,arm64)构架镜像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

配置文件激活buildx

  • docker目前使用版本为Server Version: 20.10.7,添加配置支持buildx

    docker版本较低时,请升级docker版本

    $ vim /etc/docker/daemon.json
    {
      "experimental": true
    }
    

    有部分docker未带有,比如arm版本,则需要单独下载文件:

    下载对应版本:https://github.com/docker/buildx/releases/tag/v0.8.2
    mkdir -p ~/.docker/cli-plugins
    mv buildx-v0.8.2.linux-arm64 ~/.docker/cli-plugins/docker-buildx
    chmod +x ~/.docker/cli-plugins/docker-buildx
    docker buildx ls # 验证是否安装成功 
    
  • 重启docker

    #验证buildx版本
    docker buildx version
    
    #重启docker ***
    systemctl restart docker
    
    #检查是否启用
    docker info|grep Experimental
    

环境准备(需要联网)

  • 系统环境要求

    如果版本较低,需要升级内核

    uname -a #内核版本要求4.8+
    
  • 安装binfmt,支持的平台
    安装编译时需要支持的平台,这里选择所有

    binfmt-support >= 2.1.7,需要联网docker-hub

    docker run --privileged --rm tonistiigi/binfmt --install all
    
  • 初始化buildx构造器(不需要仓库https)

    1.创建name=mybuilder且自定义配置的构造器

    docker buildx create --use \
    --name mybuilder \
    --driver docker-container \
    --config /etc/buildkitd.toml  --use default
    

    2.其中自定义配置内容
    !!!【修改配置后,要删除旧的,重新创建构造器】!!!

    $ vi /etc/buildkitd.toml
    debug = true
    # root is where all buildkit state is stored.
    root = "/var/lib/buildkit"
    # insecure-entitlements allows insecure entitlements, disabled by default.
    insecure-entitlements = [ "network.host", "security.insecure" ]
    
    # 你的私库地址
    # optionally mirror configuration can be done by defining it as a registry.
    [registry."192.168.69.150"]
      http = true
      insecure = true
    
    [registry."192.168.69.150:80"]
      http = true
      insecure = true
    
  • 启动构建器,会自动下载并启动buildx_buildkit_mybuilder0 的容器,需要联网docker-hub
    docker buildx inspect mybuilder --bootstrap                      #启动name=mybuilder默认构造器
    docker buildx ls                                                 #列出所有的构造器和支持的平台
    docker buildx use mybuilder                                      #使用name=buildx的构造器,ls会出现*号表示正在使用中  
    docker buildx stop mybuilder                                     #停止name=buildx的构建器   
    

制作多平台基础镜像方式1:合并(docker manifest)

【可用docker buildx imagetools代替】

检查是否启用Experimental

docker info|grep Experimental #如果未启动,则需要配置,详见最顶端

docker manifest --help   

显示添加harbor-registry的80端口的配置

因为内网环境,未使用https,而且docker很多地方未完全实现兼容默认去掉80端口,
在以后的配置中最好是添加端口使用,避免不必要的坑。

$ vim /etc/docker/daemon.json
{
  "insecure-registries":["192.168.69.150:80","192.168.69.150"],
  "registry-mirrors":["http://192.168.69.150:80","http://192.168.69.150"]
}

#重新登录
docker login 192.168.69.150:80

#重启docker ***
systemctl restart docker

创建多镜像集合

docker manifest create --insecure  192.168.69.150:80/commandcenter/centos_arm:latest \
                                   192.168.69.150:80/commandcenter/centos_arm:v1
  • –insecure,允许不安全的服务
  • 192.168.69.150:80/commandcenter/centos_arm:lates,第一个镜像名为统一的名称
  • 192.168.69.150:80/commandcenter/centos_arm:v1,后面的表示要集成的子镜像名,当然可以集成多个子镜像
  • 删除使用docker manifest rm 【manifest统一镜像名称】

修改子镜像的架构名称(可选)

当有部分默认的os/arch值没有,或者太长时,可自定义修改

docker manifest annotate  192.168.69.150:80/commandcenter/centos_arm:latest \
                          192.168.69.150:80/commandcenter/centos_arm:v1 \
                          --os linux --arch arm64
  • 指定v1版本为linux下的arm64架构

推送多镜像集合

docker manifest push --insecure  192.168.69.150:80/commandcenter/centos_arm:latest
  • –insecure,允许不安全的服务

检查是否正常

  • 进入harbor,检查镜像是否有【文件夹】的图标,点击进入是否有OS/ARCH的列
  • 拉取测试
    此处命令兼容80端口,所以可省略
    docker pull --platform=linux/arm64/v8 192.168.69.150/commandcenter/centos_arm:latest
    
  • 使用buildx时,指定platform则使用OS/ARCH的列值
  • 查看已有镜像的manifest
    docker manifest inspect --insecure 192.168.69.150:80/commandcenter/centos_arm:latest 
    

调整Dockerfile接收平台相关参数(可选,建议不写)

# 显示指定buildx传递--platform,但建议不写,在buildx后面传递platform参数即可,这样可兼容一般build命令
FROM --platform=$TARGETPLATFORM 基础镜像名:TAG

构建并导出到本地Docker images中

Dockfile中使用到的基础镜像需要支持多平台架构,如下harbor显示

一个镜像的同一个tag下,点击文件夹后,进入多平台架构列表;

Artifacts 拉取命令 OS/ARCH Tags 大小
sha256:c238d03b【有个文件夹】 linux/amd64 117.57MiB
sha256:74842b33 linux/arm64 121.57MiB
# 导出到本地只能构建一个镜像,本地不支持同时导出manifest lists
#arm64
docker buildx build -t 镜像名:版本号-arm64 --platform linux/arm64 . --load
#x86_64(amd64)
docker buildx build -t 镜像名:版本号-amd64 --platform linux/amd64 . --load

导出本地tar文件

#导出tar文件
docker save -o 镜像名.TAG.tar 镜像名:TAG

#导出tar.gz压缩文件
docker save 镜像名:TAG|gzip > 镜像名.TAG.tar.gz

推送到仓库

docker tag  镜像名:TAG 镜像仓库地址/镜像名:TAG
docker push 镜像仓库地址/镜像名:TAG 

参考

https://docs.docker.com/build/building/multi-platform/
https://blog.csdn.net/qq_34777982/article/details/123515396
https://blog.csdn.net/qq_33745102/article/details/124714360
https://blog.csdn.net/u012586326/article/details/125589644
https://docs.docker.com/build/buildkit/configure/

另:

同时构建X86_64与ARM64镜像(支持list)

制作多平台基础镜像方式2:也可用于制作基础镜像,Dockerfile一致

docker buildx build -t 镜像仓库地址/镜像名:TAG --platform linux/amd64,linux/arm64 . --push

仓库支持https,则直接创建构建器,不需要配置

docker buildx create --name builderx  --driver docker-container  #创建name=buildx的构建器
docker buildx use builderx                                       #使用name=buildx的构造器,ls会出现*号表示正在使用中
docker buildx inspect builderx --bootstrap                       #启动name=builderx默认构造器
docker buildx ls                                                 #列出所有的构造器和支持的平台
docker buildx stop builderx                                      #停止name=buildx的构建器

使用http非安全构造器方式2:待修正补充

不需要创建配置文件:–config /etc/buildkitd.toml
但不能使用–push的操作,只能使用–load;
https://docs.docker.com/engine/reference/commandline/buildx_build/#allow文章来源地址https://www.toymoban.com/news/detail-783299.html

#创建构造器:加--buildkitd-flags '--allow-insecure-entitlement security.insecure' 
 docker buildx create --use \
  --name mybuilder \
  --driver docker-container \
  --buildkitd-flags '--allow-insecure-entitlement security.insecure'  --use default

#生成镜像:加--allow security.insecure
 docker buildx build --allow security.insecure  -t /ubuntu_buildx:v2.2 --platform linux/arm64 . --load

到了这里,关于docker使用buildx构建多平台(x86,arm64)构架镜像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker镜像文件打包和启动简易教程-Buildx构建多平台镜像

    在目标文件夹下执行以下命令 生成Dockerfile文件后,在其中写入 将本地Python项目打包成docker镜像,并在docker中运行 - 灰信网(软件开发博客聚合) 创建docker, . 必不可少 保存打包的镜像文件 命令行启动镜像文件 compase启动镜像文件 首先写入一个 docker_name.yaml 文件 docker compos

    2024年02月10日
    浏览(56)
  • 【docker】x86主机在docker中运行arm64镜像

    1、在x86搭建arm64 ros的开发环境。 2、宿主机:虚拟机x86_ubuntu18 3、设备:jetson agx xavier(jetpack4.6.1) jetson已安装各种软件环境 打包jeston文件系统 把U盘插到jetson,然后执行打包命令。 --exclude是排除不需要打包的文件 2、x86加载docker文件 a、打包完成后,将U盘插到pc主机 b、将文

    2024年02月05日
    浏览(46)
  • X86_64平台运行Arm docker容器

    QEMU是一个通用的开源的跨平台仿真模拟器,提供user和system两种模式。其模拟的作用可是可以模拟在特定的体系结构下的应用的执行或者构建,比如在x86的体系结构的操作系统上运行ARM的应用。 在ARM体系结构的硬件环境中安装Docker,然后构建并运行ARM的镜像自然非常简单,但

    2024年02月12日
    浏览(45)
  • arm和x86架构服务器拉取arm64架构的docker镜像

    dockerhub提供的镜像部分支持arm64架构 Docker arm架构服务器拉取docker镜像,默认是arm架构  查看docker镜像的架构 x86平台拉取arm平台的docker镜像 对docker版本有限制 docker运行其他平台容器,需要使用--platform参数指定容器 docker19.03.9及以上版本才支持--platform参数 查看是否开启experi

    2024年01月20日
    浏览(68)
  • docker在x86平台下载arm的镜像

    6、进入该arm版本的详细页面,在该页面的上方有本版本镜像的sha校验值。 7、复制该值,使用如下命令在x86平台上进行下载即可。 docker pull nginx:latest@sha256:687e0e4a235ee770533f6c25fb5791b14d7b6aa603ba4ed724abbd2ed51ee11a 8、完成下载,如图:

    2024年02月12日
    浏览(78)
  • Gitlab 使用 docker buildx 多重构建镜像上传私有 Harbor与 Dockerhub

    三台虚拟机 192.168.10.2 harbor 仓库 192.168.10.3 gitlab-ce 192.168.10.4 gitlab-runner 192.168.10.5 开发平台 系统: CentOS Linux release 8.5.2111 CPU: 4c 内存:8G 磁盘:40G 2.1 安装 docker buidx buidx在 gitlab runner 节点安装 默认的 docker build 命令无法完成跨平台构建任务,我们需要为 docker 命令行安装 bu

    2024年02月17日
    浏览(60)
  • 【Docker】MySQL 源码构建 Docker 镜像(基于 ARM 64 架构)

    以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号!  公众号原文链接:MySQL 源码构建 Docker 镜像(基于 ARM 64 架构) 背景介绍 近期,笔者正推进公司 MySQL 适配 ARM 64 架构工作,由于一直使用 Docke

    2024年04月15日
    浏览(61)
  • Linux操作系统下Docker和Docker Compose的安装教程(包含x86和arm64平台离线一键安装资源包)

    本文章将详细介绍Linux下Docker和Docker Compose的安装教程。 目录3为x86和arm64平台Docker离线安装资源包,包含Docker Compose、一键安装脚本使用教程。 相关文章参考: Docker常用基础命令 Docker批量清理删除镜像和容器常用命令 版本如下 名称 版本 CentOS 7.6+ openEuler等其他操作系统可以使

    2024年02月06日
    浏览(50)
  • debian 11 arm64 aarch64 D2000 平台编译 box86 box64 笔记

    参考资料 https://github.com/ptitSeb/box86/blob/master/docs/COMPILE.md 源码地址 GitHub - ptitSeb/box86: Box86 - Linux Userspace x86 Emulator with a twist, targeted at ARM Linux devices deb在线源地址(打不开): Itai\\\'s box86 apt repo 源码编译 apt install gcc-arm-linux-gnueabihf mkdir build; cd build; cmake .. -DPHYTIUM=1 -DCMAKE_BUILD_TY

    2024年01月16日
    浏览(52)
  • 如何使用 docker pull 拉取特定架构amd64、arm64、aarch64的容器镜像

    通过修改 dockerd 配置文件,并重载,可以在服务器上开启 dockerd 的实验属性。为配置文件 /etc/docker/daemon.json 添加 “experimental”: true。 修改后的配置文件看起来和下面的比较像: 修改完成后,使用以下命令重置服务: 在 docker pull 时指定参数,即可完成指定架构镜像的拉取。

    2024年02月11日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包