You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在集群内不同机器间高效共享Docker镜像?

Kubernetes集群本地镜像批量分发方案

给你几个高效的方案,解决手动逐节点加载镜像的繁琐问题:

1. 使用Ansible批量操作(推荐)

Ansible是集群批量管理工具,能一次性完成镜像打包、传输、加载全流程:

  • 先把本地镜像打包:
    docker save -o my-image.tar my-image:v1
    
  • 准备节点清单文件inventory.txt,列出所有集群节点:
    [k8s-nodes]
    node1 ansible_host=192.168.1.10 ansible_user=root
    node2 ansible_host=192.168.1.11 ansible_user=root
    
  • 同步镜像包到所有节点:
    ansible all -i inventory.txt -m copy -a "src=./my-image.tar dest=/tmp/my-image.tar"
    
  • 批量加载镜像并清理临时文件:
    ansible all -i inventory.txt -m shell -a "docker load -i /tmp/my-image.tar && rm /tmp/my-image.tar"
    

2. 搭建本地私有镜像仓库(长期最优)

如果需要频繁更新镜像,搭建私有仓库是一劳永逸的方案:

  • 在集群内某台节点启动私有仓库容器:
    docker run -d -p 5000:5000 --restart=always --name registry registry:2
    
  • 所有节点修改Docker配置,允许访问私有仓库(以Ubuntu为例):
    编辑/etc/docker/daemon.json,添加:
    {
      "insecure-registries": ["192.168.1.10:5000"]
    }
    
    重启Docker生效:
    systemctl restart docker
    
  • 给本地镜像打私有仓库标签并推送:
    docker tag my-image:v1 192.168.1.10:5000/my-image:v1
    docker push 192.168.1.10:5000/my-image:v1
    
  • 所有节点直接拉取镜像:
    docker pull 192.168.1.10:5000/my-image:v1
    

3. 轻量Shell脚本批量处理

如果不想安装额外工具,用Shell脚本结合SSH也能搞定:

  • 准备节点IP清单nodes.txt,每行一个IP:
    192.168.1.10
    192.168.1.11
    
  • 编写脚本distribute-image.sh:
    #!/bin/bash
    IMAGE="my-image:v1"
    TAR_PATH="/tmp/image.tar"
    NODES="./nodes.txt"
    
    # 打包本地镜像
    docker save -o $TAR_PATH $IMAGE
    
    # 遍历节点传输并加载
    while read node; do
      echo "处理节点 $node..."
      scp $TAR_PATH root@$node:$TAR_PATH
      ssh root@$node "docker load -i $TAR_PATH && rm $TAR_PATH"
    done < $NODES
    
    # 清理本地临时文件
    rm $TAR_PATH
    
  • 给脚本加执行权限并运行:
    chmod +x distribute-image.sh
    ./distribute-image.sh
    

内容的提问来源于stack exchange,提问作者nodelore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 16:55:21