当前位置: 首页 > news >正文

docker转移镜像

1、场景

  • 有网络环境向无网络环境转移镜像。
  • 无法拉取的镜像(外网无法访问)下载镜像转移到服务器上。

2、docker转移

2.1 镜像服务器

保存镜像

列出项目使用的所有镜像
docker images
保存所有镜像为 tar 文件

保存docker镜像

docker save -o my_project_images.tar my_project_images:1.0.0

    2.2 新服务器

    在新服务器上加载镜像

    docker load -i my_project_images.tar

    启动镜像

    docker run \--name my_project_images \-d \--restart always \my_project_images:1.0.0

    3、docker compose转移项目

    3.1 镜像服务器

    保存镜像

    列出项目使用的所有镜像

    在docker-compose.yml的目录下执行

    docker-compose images
    保存所有镜像为 tar 文件

    合并导出:保存docker-compose镜像,将所有镜像合并到一个 .tar 文件

    docker save -o my_project_images.tar $(docker-compose images | awk '{if(NR>2) print $2":"$3}')

    分文件导出‌:每个镜像单独保存(适合选择性迁移)

    docker-compose images -q | xargs -n 1 -I {} docker save {} -o ./images/{}.tar
    
    命令示例
    • docker-compose images | awk '{if(NR>2) print $2":"$3}'
      [root@ openmetadata-docker]# docker-compose images | awk '{if(NR>2) print $2":"$3}'
      WARN[0000] /root/openmetadata-docker/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion 
      docker.elastic.co/elasticsearch/elasticsearch:8.11.4
      docker.getcollate.io/openmetadata/ingestion:1.6.8
      docker.getcollate.io/openmetadata/db:1.6.8
      docker.getcollate.io/openmetadata/server:1.6.8
    • docker-compose images -q | xargs -n 1 
      [root@ images]# docker-compose images -q | xargs -n 1
      WARN[0000] /root/openmetadata-docker/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion 
      4128d7bbe2a1bcbad0a05a2a6af72b98b6f2ae6752fa9446b5c8eef9a1af4769
      8759d2faeffbc4797832aa90ef5b88c1f40af72e6f8b0b0de42703f32fa9d67b
      b7c0bf7f2e52cb9b9a4b1dd6cd82c7e6b6f01895832391974d2c70144425ac60
      15eb21ac0f7eedc6c62fbf1f444d6ed0cd47d99faa7fa7404af0916c67163518
      

      3.2 新服务器

      在新服务器上加载镜像

      docker load -i my_project_images.tar

      启动镜像

      确定已复制 docker-compose.yml 文件到新服务器

      docker-compose up -d

      3.3 注意事项

      1. 镜像与配置一致性:确保目标服务器的 docker-compose.yml 中 image: 名称和标签与导出的镜像完全匹配,否则 Docker 会尝试从仓库拉取。

      2. 依赖环境

        • 目标服务器需安装 ‌Docker‌ 和 ‌Docker Compose‌。
        • 文件路径和卷挂载(如 volumes:)需适配目标服务器的目录结构。

      4、私服方式

      4.1 镜像服务器

      登录仓库

      docker login [仓库地址]  # 不指定地址则默认为Docker Hub
      # 示例(Docker Hub):
      docker login -u 你的用户名
      # 示例(私有仓库):
      docker login registry.example.com -u 用户名 -p 密码

      查看现有镜像

      docker images
      docker-compose images  # 如果是docker-compose项目

      为镜像打标签

      格式:docker tag 本地镜像[:标签] 仓库地址/用户名/仓库名[:标签]

      # 为单个镜像打标签示例:
      docker tag my-app:1.0 mydockerhub/my-app:1.0# 为docker-compose项目所有镜像打标签:
      docker-compose build  # 确保镜像已构建
      docker-compose images | awk 'NR>2 {print $2":"$3}' | xargs -I {} docker tag {} mydockerhub/{}

      推送镜像到仓库

      # 推送单个镜像:
      docker push mydockerhub/my-app:1.0# 推送docker-compose项目所有镜像:
      docker-compose push  # 如果镜像已正确配置在compose文件中# 或者手动推送:
      docker images | grep "mydockerhub" | awk '{print $1":"$2}' | xargs -I {} docker push {}

      4.2 新服务器

      登录仓库

      docker login [仓库地址]

      拉取镜像

      # 单个镜像:
      docker pull mydockerhub/my-app:1.0# 使用docker-compose(需先复制compose文件):
      docker-compose pull
      # 启动
      docker-compose up -d

      5、文件分割上传

              当需要传输的 tar 文件过大时,可以将其分割成多个小文件分别传输,然后在目标服务器上重新组装。

      5.1 在源服务器上分割大文件

      使用 split 命令分割文件

      linux直接使用如下命令,windows使用 Git Bash执行如下命令

      # 将大文件分割成每个1GB的小文件(可根据需要调整大小)
      split -b 1G my_project_images.tar my_project_images.tar.part_

      验证分割结果

      ls -lh my_project_images.tar.part_*

      5.2 在目标服务器上重新组装文件

      使用 cat 命令合并文件 

      cat my_project_images.tar.part_* > my_project_images.tar

      验证合并后的文件完整性

      # 检查文件大小
      ls -lh my_project_images.tar

      http://www.xdnf.cn/news/27145.html

      相关文章:

    1. db中查询关于null的sql该怎么写
    2. 测试模板1
    3. Linux—I/O复用---select、poll、epoll
    4. 学习笔记十八——Rust 封装
    5. mysql8.0.17以下驱动导致mybatis blob映射String乱码问题分析与解决
    6. 实现AWS Lambda函数安全地请求企业内部API返回数据
    7. 嵌入式单片机开发 - 嵌入式系统中 Flash(闪存)与 RAM(随机存储器)
    8. 《JVM考古现场(二十三):归零者·重启奇点的终极奥义》
    9. 【Java面试系列】Spring Boot微服务架构下的分布式事务处理与性能优化 - 2025-04-19详解 - 3-5年Java开发必备知识
    10. JVM 系列:JVM 内存结构深度解析
    11. 基础数学知识-线性代数
    12. 蓝桥杯之递归二
    13. 洛谷题目:P8624 [蓝桥杯 2015 省 AB] 垒骰子 题解 (本题简)
    14. 纯FPGA实现AD9361控制的思路和实现 UART实现AXI_MASTER
    15. 实现Azure Synapse Analytics安全地请求企业内部API返回数据
    16. @EnableAsync+@Async源码学习笔记之二
    17. @EnableAsync+@Async源码学习笔记之三
    18. 系统思考:危机中的转型机遇
    19. STM32单片机入门学习——第43节: [12-3] 读写备份寄存器实时时钟
    20. STM32 外部中断EXTI
    21. 爬虫入门与requests库的使用——python爬虫
    22. XCVU13P-2FHGA2104I Xilinx Virtex UltraScale+ FPGA
    23. 额外篇 非递归之美:归并排序与快速排序的创新实现
    24. 解决 IntelliJ IDEA 项目启动时端口冲突问题
    25. Linux网络编程——基于ET模式下的Reactor
    26. 使用 Vite 快速搭建现代化 React 开发环境
    27. 考公:数字推理
    28. 新能源汽车动力电池热管理方案全解析:开启电车续航与安全的密码
    29. 『Linux_网络』 第二章 UDP_Socket编程
    30. 可发1区的超级创新思路(python 、MATLAB实现):基于多尺度注意力TCN-KAN与小波变换的时间序列预测模型