docker转移镜像的实现步骤

 更新时间:2025年06月10日 09:41:13   作者:xixingzhe2  
本文主要介绍了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 注意事项‌

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

  • 依赖环境

    • 目标服务器需安装 ‌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

到此这篇关于docker转移镜像的文章就介绍到这了,更多相关docker 转移镜像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 基于Docker的微服务自动化部署系统全解析

    基于Docker的微服务自动化部署系统全解析

    本文介绍了基于Docker的微服务自动化部署系统的设计与实现,该系统通过模块化设计,包括服务发现、容器编排、监控告警等功能,实现了微服务的自动化部署、运维和监控,提高了部署效率和稳定性,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • 记 -bash: docker-compose: command not found 的问题解决方法

    记 -bash: docker-compose: command not&nbs

    这篇文章主要介绍了记 -bash: docker-compose: command not found 的问题解决方法,本文给大家介绍的非常详细对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • 在Docker中动态配置前端请求地址的三种方式

    在Docker中动态配置前端请求地址的三种方式

    在使用 Docker Compose 部署前后端分离项目时,前端容器需要根据不同的环境(开发、测试、生产)动态请求后端服务的地址,本文给大家介绍了在Docker中动态配置前端请求地址的三种实践方式:构建时注入 vs 运行时动态配置 vs 挂载外部配置文件,需要的朋友可以参考下
    2025-05-05
  • docker 搭建单机PostgreSQL操作详解

    docker 搭建单机PostgreSQL操作详解

    本文通过实际案例操作演示了如何基于Docker搭建pg的完整过程,并补充了pg数据库操作的常用命令和授权命令,感兴趣的朋友一起看看吧
    2025-04-04
  • centOS7安装docker的详细步骤

    centOS7安装docker的详细步骤

    这篇文章主要为大家介绍了centOS7安装docker的详细步骤,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 如何解决docker镜像在不同cpu架构上运行容器报错问题

    如何解决docker镜像在不同cpu架构上运行容器报错问题

    文章主要介绍了如何查看本地Docker镜像的CPU架构类型,并提供了解决x86镜像无法在ARM CPU上运行的问题的方法,通过在Dockerfile中使用`--platform`参数指定CPU架构,可以在构建镜像时选择正确的版本,从而解决架构不匹配的问题
    2024-12-12
  • docker如何快速搭建几个常用的第三方服务详解

    docker如何快速搭建几个常用的第三方服务详解

    这篇文章主要给大家介绍了关于利用docker如何快速搭建几个常用的第三方服务的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • 如何使用 Docker Compose 部署 Nginx

    如何使用 Docker Compose 部署 Nginx

    本文系统介绍DockerCompose在容器编排中的核心优势及应用场景,涵盖安装配置、多环境管理、负载均衡、安全加固、生产实践、日志监控、故障排查与性能优化等,为高效部署与维护提供全面指南,感兴趣的朋友跟随小编一起看看吧
    2025-09-09
  • Docker教程:使用容器(简单示例)

    Docker教程:使用容器(简单示例)

    今天小编就为大家分享一篇关于Docker教程:使用容器(简单示例),小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • docker实现资源清理方式

    docker实现资源清理方式

    这篇文章主要介绍了docker实现资源清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02

最新评论