镜像安装包
大约 4 分钟devOpsdocker
概述
将 docker 镜像文件拷贝出来,提供给其他服务器使用
AI提供方案
是的,完全可以将Docker镜像从一台Ubuntu 22服务器导出,然后导入到另一台Ubuntu 22服务器中。以下是具体的操作方法:
📦 方法一:使用 docker save 和 docker 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 export 和 docker 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
💡 重要注意事项
镜像完整性:确保导出的tar文件完整传输,可以使用校验和验证:
# 源服务器生成校验和 md5sum my-app.tar # 目标服务器验证 md5sum my-app.tar存储空间:确保目标服务器有足够的磁盘空间存放镜像文件
权限问题:如果使用非root用户,可能需要sudo权限执行docker命令
网络传输:对于大文件,可以考虑使用压缩:
# 压缩导出 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 run、docker 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
