首页 > 其他分享 >docker使用远程节点构建多平台镜像

docker使用远程节点构建多平台镜像

时间:2025-01-09 17:13:04浏览次数:1  
标签:buildx arm ssh linux 镜像 docker root 节点

当在x86或arm平台使用buildx构建多平台镜像时,会发现buildx在构建与docker所在宿主机异构平台镜像包时,构建速度慢的问题。
当你同时有x86和arm服务器的基础上,可以使用远程节点来构建多平台镜像包,使用远程节点构建多平台镜像的好处如下:
1.无兼容性问题:在x86平台构建arm或在arm平台构建x86镜像,有时会存在兼容性问题导致构建失败。
2.构建速度提升:在x86平台构建arm(或相反)使用的QEMU模拟技术,构建速度相对较慢。
实现过程如下:
环境:
x86: 192.168.1.1 # docker engine version >=20
arm: 192.168.1.2 # docker engine version >=20

在x86服务器执行:

# 配置免密登录
[root@www ~]# ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):     # 回车
Enter passphrase (empty for no passphrase):                  # 回车
Enter same passphrase again:                                 # 回车
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:LtKq7W8+LlJWK8prpzLKT4RFEDZaqZhqvoOJkvEcjb0 root@www.dehuinet.com
The key's randomart image is:
+---[RSA 4096]----+
| =+o             |
|o.+              |
|oo .             |
|+ o   .          |
|.. = . .S        |
|o.+ *...         |
|=B *.oo .        |
|XoO.Eoo.         |
|+*BO+*+.         |
+----[SHA256]-----+
# 上述命令执行成功会在家目录的.ssh目录下生成"id_rsa"和"id_rsa.pub"两个文件

[root@www ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.2
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.1.2 (192.168.1.2)' can't be established.
ECDSA key fingerprint is SHA256:g4eZZsXuQumekQE19vucvMA+oVNLTGC3WV+PMKSWIh0.
ECDSA key fingerprint is MD5:53:10:36:82:8f:68:6f:c2:08:a4:4d:8b:42:cc:a0:05.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.1.2's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.1.2'"
and check to make sure that only the key(s) you wanted were added.
# 执行上述命令成功后就可以在x86服务器免密登录arm服务器了。

# 创建builder
docker buildx create \
--name multi_arch_builder \
--node node_amd64 \
--platform linux/amd64
# 向builder中追加新节点(arm)
docker buildx create \
--name multi_arch_builder \
--append \
--node node_arm64 \
--platform linux/arm64,linux/arm64/v8,linux/arm/v7,linux/arm/v6,linux/arm/v5 \
ssh://root@192.168.1.2
# 启用新builder
docker buildx user multi_arch_builder
docker buildx inspect --bootstrap
[root@www ~]# docker buildx inspect --bootstrap
[+] Building 19.7s (1/2)
[+] Building 30.3s (2/2) FINISHED
 => [node_amd64 internal] booting buildkit                                                                                                          30.3s
 => => pulling image moby/buildkit:buildx-stable-1                                                                                                  27.8s
 => => creating container buildx_buildkit_node_amd64                                                                                                 2.5s
 => [node_arm64 internal] booting buildkit                                                                                                          11.4s
 => => pulling image moby/buildkit:buildx-stable-1                                                                                                   8.2s
 => => pulling failed, using local image moby/buildkit:buildx-stable-1                                                                               0.0s
 => => creating container buildx_buildkit_node_arm64                                                                                                 3.2s
Name:   remote
Driver: docker-container

Nodes:
Name:      node_amd64
Endpoint:  unix:///var/run/docker.sock
Status:    running
Platforms: linux/amd64*, linux/amd64/v2, linux/386

Name:      node_arm64
Endpoint:  ssh://root@192.168.1.2
Status:    running
Platforms: linux/arm64*, linux/arm/v7*, linux/arm/v6*, linux/arm/v5*
# 此时在arm服务器上执行docker ps命令会看到新增了一个容器
[root@localhost lib]# docker ps
CONTAINER ID   IMAGE                                                                       COMMAND                  CREATED         STATUS                          PORTS     NAMES
e67cf241b477   moby/buildkit:buildx-stable-1                                               "buildkitd"              3 minutes ago   Up 3 minutes                              buildx_buildkit_node_arm64

上述步骤后,就可以向之前一样使用buildx进行多平台镜像的构建了。

标签:buildx,arm,ssh,linux,镜像,docker,root,节点
From: https://www.cnblogs.com/linux-xiaofeixiang/p/18662427

相关文章

  • centos7安装docker
    1.下载所需yum软件包yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2--skip-broken2.设置docker镜像源yum-config-manager--add-repohttps://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposed-i's/download.docker.com/mirrors.aliyun.co......
  • CodeNavi的表达式节点和属性详解
    CodeNavi是一种用于代码检查的规则语言,能够帮助开发者定义复杂的检查规则,以检测代码中的潜在问题和违反编码规范的地方。本文将深入解读CodeNavi的表达式节点和属性,详细介绍其结构和用法。一、表达式节点表达式节点是CodeNavi规则语言中的基本构造块,用于表示代码中的不同元素和......
  • 使用docker部署的禅道怎么升级
    参考https://www.zentao.net/book/zentaopms/586.html备份数据本次升级使用的是pvc挂载的禅道数据,使用docker启动的也是一样的数据是挂载在nfs动态存储盘,进入到pvc目录备份一份即可为以防万一MySQL数据也是有mysqldump备份一份使用新镜像启动修改启动镜像,把镜像从原来的镜......
  • linux—— 在宿主机上查看生成的ext4格式镜像文件内容
    在制作完成ext4(其他格式的也一样)格式的镜像后,想查看镜像文件的内容时,可以利用以下方法:1、在mnt路径下创建roots,这一步随便挂载到一个目录下即可sudomkdir/mnt/roots2、使用以下命令挂载sudomout-olooproots.ext4/mnt/rootsroot.ext4要挂载的文件系统/mnt/roots创建......
  • docker快速搭建部署mqtt
    1、拉取的是最新版本#拉取的是最新版本dockerpullemqx/emqx:latest#当然可以指定版本dockerpullemqx/emqx:latest:v5.02、创建临时容器dockerrun-d--namemqtt--privileged=true-p1883:1883-p8883:8883-p8083:8083-p8084:8084-p8081:8081-p18083......
  • SpringCloud 解决 Docker 镜像 虚拟机网卡导致的IP 不准确的问题
    SpringCloud应用可能会使用InetAddress.getLocalHost().getHostAddress()或类似方法来获取当前机器的IP地址。但在Docker容器环境中,这种方法可能会返回容器内部的IP地址,而不是宿主机的IP地址。分布式应用部署到服务上,由于服务器可能存在多张网卡,造成IP地址不准。出......
  • 戴尔R740服务器单节点部署安装proxmox ve8.3.1
    1.下载u盘制作工具rufus网址:https://rufus.ie/zh/2.下载pve8.3.1镜像网址:https://www.proxmox.com/en/downloads 3.给u盘制作镜像双击打开rufus软件镜像选择刚刚下载好的pve8.3.1镜像点击确定点击开始,耐心等待4.安装pve4.1将u盘插入到服务器(注意:服务器要开启虚拟......
  • langfuse v3(docker compose安装)安装部署
    环境:OS:Centos7langfuse:v31.下载dockercompose配置文件https://github.com/langfuse/langfuse/blob/v3.5.3/docker-compose.yml[root@host135home]#mkdir-p/home/middle/langfuse/langfuse上传配置文件到该目录[root@host135langfuse]#lsdocker-compose.yml[root@host......
  • docker安装jellyfine实现家庭影院
    安装环境为Ubuntuserver20.04。管理员账户登陆系统。新建应用安装目录,用于缓存应用使用过程中生成的中间数据,如配置、预览等,最好建到速度较快的SSD硬盘上,可提高体验。mkdir/mnt/ssd/jellyfin-app/configmkdir/mnt/ssd/jellyfin-app/cache拉取镜像并安装。dockerpu......
  • 06、Docker学习,常用安装:Zookeeper、ES、Minio
    Docker学习,常用安装:Zookeeper、ES、Minio一、Docker安装Zookeeper##查询zookeeper镜像dockersearchzookeeper##拉去zookeeper镜像dockerpullzookeeper:latest##本地创建zookeeper的挂载目录mkdir-p/opt/software/myfile/zookeeper/confmkdir-p/opt/softwar......