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
相关推荐
YoungStudyAI4 小时前
QA的下一个自动化阶段,可能不是再写更多脚本,而是设计测试Agent
运维·自动化
分布式存储与RustFS5 小时前
纠删码到底吃掉了多少容量:EC:4、EC:8 的利用率与容错怎么算
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
遇见小修修5 小时前
3步解决打印机0x00000709报错 ,广州深圳程序员可自行排查
运维·打印机·维修·打印机报错·打印机运维·打印机故障自查
无序的浪5 小时前
测试博客-基于微服务的在线判题系统
java·spring cloud·docker·微服务·测试·在线判题
Huangjin007_7 小时前
【Linux 系统篇(二十五)】文件(二) 系统文件I/O详解
linux·运维·服务器
微小冷7 小时前
Mermaid画甘特图
运维·markdown·甘特图·mermaid·时间图
LBL12208 小时前
内网容器部署FTP日志监控服务
运维·服务器·容器
志栋智能8 小时前
超自动化巡检:驱动持续改进的运维飞轮
运维·自动化
海宇大数据8 小时前
零信任架构实战:基于海宇学历核验版构建自动化风控审查网关
运维·人工智能·架构·自动化
NailiConveyor8 小时前
输送机系统与WMS仓储管理系统集成的5个关键技术点
大数据·运维·自动化·制造·业界资讯