Docker 镜像导出与加载教程
本文档介绍如何使用 docker save 和 docker load 命令导出和加载 Docker 镜像。
1. 使用场景
1.1 为什么需要导出和加载镜像?
在实际开发和运维中,经常会遇到以下场景:
-
离线环境部署
- 生产环境无法访问互联网或私有镜像仓库
- 需要在隔离网络环境中部署应用
- 通过导出镜像文件,可以在离线环境中加载使用
-
镜像备份与迁移
- 备份重要版本的镜像用于版本回退
- 在不同服务器或数据中心之间迁移镜像
- 保存特定版本的镜像作为归档
-
跨平台传输
- 从开发环境传输镜像到测试或生产环境
- 在不同网络环境之间传递镜像(如通过 U盘、FTP 等方式)
- 避免重复构建镜像,节省时间和资源
-
镜像分发
- 向无法访问镜像仓库的客户端分发镜像
- 批量部署时统一分发镜像文件
- 第三方交付场景下的镜像传递
1.2 docker save 与 docker load 的优势
- ✅ 简单直接: 无需配置镜像仓库,直接操作文件
- ✅ 离线可用: 不依赖网络连接和镜像仓库服务
- ✅ 完整保存: 保存镜像的所有层和元数据信息
- ✅ 批量处理: 可以一次导出/加载多个镜像
1.3 适用场景对比
| 场景 | docker save/load | docker push/pull | 推荐 |
|---|---|---|---|
| 离线环境 | ✅ | ❌ | save/load |
| 镜像备份 | ✅ | ✅ | 均可 |
| 跨网络传输 | ✅ | ❌ | save/load |
| 频繁更新 | ❌ | ✅ | push/pull |
| 团队协作 | ❌ | ✅ | push/pull |
| 版本归档 | ✅ | ✅ | 均可 |
2. 镜像信息
2.1 镜像名称
springboot-docker:1.0.0
docker images springboot-docker:1.0.0
3. 导出镜像 (docker save)
3.1 基本语法
docker save [OPTIONS] IMAGE [IMAGE...]
3.2 命令参数表格
| 参数 | 简写 | 说明 | 是否必需 | 示例 |
|---|---|---|---|---|
--output | -o | 指定输出文件路径 | 否 | -o image.tar |
--quiet | -q | 静默模式,不显示进度信息 | 否 | -q |
3.3 参数说明
-o, --output: 指定输出文件的路径和文件名。如果不指定,则输出到标准输出(stdout)-q, --quiet: 静默模式,不显示导出进度信息- IMAGE: 要导出的镜像名称,格式为
镜像名:标签或镜像ID,可以指定多个镜像
3.4 导出示例
# 导出镜像到 tar 文件
docker save -o springboot-docker-1.0.0.tar springboot-docker:1.0.0
# 导出多个镜像到同一个文件
docker save -o images.tar springboot-docker:1.0.0 nginx:latest
# 静默模式导出
docker save -q -o springboot-docker-1.0.0.tar springboot-docker:1.0.0
# 导出到标准输出(配合重定向)
docker save springboot-docker:1.0.0 > springboot-docker-1.0.0.tar
使用方式1示例:
3.5 验证导出
# 查看导出的文件
ls -lh springboot-docker-1.0.0.tar
4. 加载镜像 (docker load)
4.1 上传镜像压缩包
进入导出目录执行如下脚本。scp 命令的核心作用是:将本地机器上的 springboot-docker-1.0.0.tar 文件,通过 SSH 安全拷贝到远程服务器 115.190.217.58 的 /data/appserver/ 目录下,且使用远程服务器的 root 用户权限执行拷贝操作。输入密码即可【或者配置自己的ssh公钥】。可参考SCP教程
scp springboot-docker-1.0.0.tar root@115.190.217.58:/data/appserver/
4.2 检查上传
登录到目标服务器,执行如下命令进行查看
cd /data/appserver && ls -l |grep springboot-docker-1.0.0.tar
4.3 基本语法
docker load [OPTIONS]
4.4 命令参数表格
| 参数 | 简写 | 说明 | 是否必需 | 示例 |
|---|---|---|---|---|
--input | -i | 指定输入的 tar 文件路径 | 否 | -i image.tar |
--quiet | -q | 静默模式,不显示加载信息 | 否 | -q |
4.5 参数说明
-i, --input: 指定输入的 tar 文件路径。如果不指定,则从标准输入(stdin)读取-q, --quiet: 静默模式,不显示加载进度和镜像信息
4.6 加载示例
# 从 tar 文件加载镜像
docker load -i springboot-docker-1.0.0.tar
# 静默模式加载
docker load -q -i springboot-docker-1.0.0.tar
# 从标准输入加载(配合管道或重定向)
docker load < springboot-docker-1.0.0.tar
cat springboot-docker-1.0.0.tar | docker load
4.7 验证加载
# 查看已加载的镜像
docker images | grep springboot-docker --format
5. 完整流程示例
哈哈哈,此处又啰嗦了一遍。。。。。。。。。。。。。。。。。。。。。。。
5.1 导出镜像
# 在源机器上导出镜像
docker save -o springboot-docker-1.0.0.tar springboot-docker:1.0.0
5.2 传输文件
# 使用 scp 传输到目标机器
scp springboot-docker-1.0.0.tar user@target-host:/path/to/destination/
# 或使用其他传输方式(FTP、U盘等)
5.3 加载镜像
# 在目标机器上加载镜像
docker load -i springboot-docker-1.0.0.tar
5.4 启动容器验证
加载镜像后,可以通过启动容器来验证镜像是否正常工作。
5.4.1 启动容器
- 先创建日志目录
mkdir -p /data/appserver/logs/springboot-docker
- 启动服务
docker run -d \
--name springboot-docker \
-p 8082:8082 \
-v /etc/config:/etc/config \
-e APP_NAME=springboot-docker \
-e SERVER_PORT=8082 \
-e PROFILE_ACTIVE=prod \
-e JAVA_OPTS="-Xms512m -Xmx512m" \
springboot-docker:1.0.0
5.4.2 验证步骤
5.4.2.1 检查容器状态
# 查看容器运行状态
docker ps | grep springboot-docker
# 查看容器详细信息
docker inspect springboot-docker
5.4.2.2 查看容器日志
# 查看容器启动日志
docker logs springboot-docker
# 实时查看日志
docker logs -f springboot-docker
# 查看最近 100 行日志
docker logs --tail 100 springboot-docker
5.4.2.3 测试应用访问
# 测试应用健康检查(如果配置了 actuator,可用健康检查接口)
curl http://localhost:8082/hello
# 测试应用接口
curl http://localhost:8082/
5.4.2.4 检查挂载目录
# 查看日志目录
ls -lh /data/appserver/logs/springboot-docker/
# 查看日志文件内容
tail -f /data/appserver/logs/springboot-docker/nohup.log
5.4.3 验证成功标志
- ✅ 容器状态为
Up且运行正常 - ✅ 容器日志无错误信息
- ✅ 应用接口可以正常访问
- ✅ 日志文件正常生成
5.4.4 清理测试容器
验证完成后,可以清理测试容器:
# 停止容器
docker stop springboot-docker
# 删除容器
docker rm springboot-docker
6. 注意事项
- 文件大小: 导出的 tar 文件可能较大,确保有足够的磁盘空间
- 网络传输: 传输大文件时建议使用压缩或断点续传工具
- 镜像标签: 加载后的镜像标签与导出时保持一致
- 权限要求: 需要 Docker 运行权限
7. 其他导出方式(参考)
7.1 使用标准输出
# 导出到标准输出(可配合管道使用)
docker save springboot-docker:1.0.0 > springboot-docker-1.0.0.tar
7.2 使用标准输入加载
# 从标准输入加载
docker load < springboot-docker-1.0.0.tar