跳至主要內容

镜像安装包

chanchaw大约 4 分钟devOpsdocker

概述

docker 镜像文件拷贝出来,提供给其他服务器使用

AI提供方案

是的,完全可以将Docker镜像从一台Ubuntu 22服务器导出,然后导入到另一台Ubuntu 22服务器中。以下是具体的操作方法:

📦 方法一:使用 docker savedocker load(推荐)

1. 在源服务器上导出镜像

# 首先查看已有的镜像
docker images

# 将镜像保存为tar文件
docker save -o /path/to/image.tar 镜像名称:标签

# 例如,导出名为 nginx 的镜像
docker save -o /home/user/nginx.tar nginx:latest

# 或者使用镜像ID导出
docker save -o /home/user/nginx.tar 镜像ID

2026年4月27日第二个操作案例

# 执行命令 docker image ls 的响应
REPOSITORY                  TAG       IMAGE ID       CREATED      SIZE
docker.xuanyuan.run/redis   latest    7673a976238b   5 days ago   140MB
# 导出镜像文件
docker save -o /root/redis_latest.tar docker.xuanyuan.run/redis:latest

2. 传输镜像文件到目标服务器

# 使用 scp 传输文件
scp /home/user/nginx.tar username@目标服务器IP:/home/user/

# 或者使用 rsync
rsync -avz /home/user/nginx.tar username@目标服务器IP:/home/user/

3. 在目标服务器上导入镜像

# 加载镜像
docker load -i /home/user/nginx.tar

# 验证镜像是否导入成功
docker images

🔄 方法二:使用 docker exportdocker import

这种方法适用于导出容器文件系统:

# 在源服务器上导出容器
docker export 容器ID > container.tar

# 在目标服务器上导入为镜像
docker import container.tar 新镜像名称:标签

📋 完整操作示例

源服务器操作:

# 查看现有镜像
docker images

# 导出镜像
docker save -o my-app.tar registry.cn-hangzhou.aliyuncs.com/my-namespace/my-app:v1.0

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

目标服务器操作:

# 传输文件(在源服务器执行)
scp my-app.tar user@192.168.1.100:/tmp/

# 在目标服务器加载镜像
docker load -i /tmp/my-app.tar

# 给镜像打标签(如果需要)
docker tag 镜像ID my-app:latest

# 运行容器测试
docker run -d --name my-app-container -p 8080:80 my-app:latest

💡 重要注意事项

  1. 镜像完整性:确保导出的tar文件完整传输,可以使用校验和验证:

    # 源服务器生成校验和
    md5sum my-app.tar
    
    # 目标服务器验证
    md5sum my-app.tar
    
  2. 存储空间:确保目标服务器有足够的磁盘空间存放镜像文件

  3. 权限问题:如果使用非root用户,可能需要sudo权限执行docker命令

  4. 网络传输:对于大文件,可以考虑使用压缩:

    # 压缩导出
    docker save 镜像名称 | gzip > image.tar.gz
    
    # 传输压缩文件
    scp image.tar.gz user@目标服务器:/path/
    
    # 解压并加载
    gunzip -c image.tar.gz | docker load
    

🎯 方法对比

方法优点缺点适用场景
docker save/load保留完整镜像历史和元数据文件可能较大推荐:完整镜像迁移
docker export/import文件较小丢失历史记录和元数据仅需文件系统时使用

🔧 验证步骤

在目标服务器上验证镜像是否成功导入:

# 查看所有镜像
docker images

# 检查镜像详细信息
docker inspect 镜像名称:标签

# 测试运行
docker run -it --rm 镜像名称:标签 echo "测试成功"

这种方法的优势在于不依赖网络速度和镜像仓库可用性,特别适合:

  • 内网环境
  • 网络带宽受限的场景
  • 需要快速部署相同镜像到多台服务器
  • 备份重要镜像版本

完成导入后,你就可以在目标服务器上正常使用 docker rundocker compose 等命令来管理这些镜像了。

实践步骤

自己按照上面 AI 提供的方案制作流程如下

# 查看 ubuntu22server 的所有镜像文件
sudo docker images
# 保存镜像文件为 tar 文件
sudo docker save -o /home/chanchaw/docker-image-backup/tududi.tar crpi-imkwu1c6wa3ojqar.cn-shanghai.personal.cr.aliyuncs.com/ccdockerhub/tududi:latest

# 将 tar 文件拷贝到新服务器上,使用下面命令加载到本地 docker
docker load -i /root/docker-images/tududi.tar
# 加载完毕后就是正常的通过镜像创建容器的操作,第一次使用 tududi 项目做试验,
# 创建容器的命令如下,测试访问成功
sudo docker run \
	--name tududi \
	--restart=unless-stopped \
	-p 3002:3002 \
	-e TUDUDI_USER_EMAIL=409223171@qq.com \
	-e TUDUDI_USER_PASSWORD=7758chanchaw \
	-e TUDUDI_SESSION_SECRET=$(openssl rand -hex 64) \
	-e TUDUDI_ALLOWED_ORIGINS="" \
	-e PUID=1001 \
	-e GUID=1001 \
	-v /home/chanchaw/tududi/tududi_db:/app/backend/db \
	-v /home/chanchaw/tududi/tududi_uploads:/app/backend/uploads \
	-d crpi-imkwu1c6wa3ojqar.cn-shanghai.personal.cr.aliyuncs.com/ccdockerhub/tududi