docker——load和save镜像重命名

本文介绍如何避免使用Docker的镜像ID进行保存和加载操作导致镜像名称丢失的问题,并提供了解决方案,即通过重新标记镜像来赋予其正确的名称。

将docker save 保存的tar 包在传入另一台服务器load的镜像 REPOSITORY-名字和 TAG-版本为<none >

这个问题是根本在于这个镜像压缩包在打包的时候导致
例如,以下打包方式将会导致解压的出来的镜像没有名字,原因在 7864316753 是IMAGE ID 

docker save -o redis.tar 7864316753

使用IMAGE ID打包的好处是防止镜像名重复导致docker save 失败
docker save -o

[root@localhost docker]# docker save -o myes.1.0.tar  93109ce1d590
[root@localhost docker]# ll
total 764972
-rw-------. 1 root root 783318016 Jul 17 07:40 myes.1.0.tar
[root@localhost docker]# scp myes.1.0.tar root@node1:/tmp/
root@node1's password:
myes.1.0.tar

doceker load --input ***.tar 
重命名镜像的方法:
docker tag [镜像id] [新镜像名称]:[新镜像标签]  
docker tag 93109ce1d590 5000/python-env:2.7.13

[root@localhost tmp]# ll
total 764960
-rw-------. 1 root root 783318016 Jul 17 07:49 myes.1.0.tar
[root@localhost tmp]#
[root@localhost tmp]# docker load -i myes.1.0.tar
071d8bd76517: Loading layer [==================================================>]  210.2MB/210.2MB
eb9a2ed233fb: Loading layer [==================================================>]  310.7MB/310.7MB
7af0091b1a81: Loading layer [==================================================>]  3.584kB/3.584kB
032e0c15c085: Loading layer [==================================================>]  25.03MB/25.03MB
47482c713d94: Loading layer [==================================================>]  311.3kB/311.3kB
b25c666c6ae1: Loading layer [==================================================>]  237.1MB/237.1MB
09e594d2253c: Loading layer [==================================================>]   7.68kB/7.68kB
7f87057c8ffb: Loading layer [==================================================>]  9.728kB/9.728kB
Loaded image ID: sha256:93109ce1d590482a06ba085943082b314ac188fcfdbffb68aebb00795c72bc8a
[root@localhost tmp]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
<none>                        <none>              93109ce1d590        19 months ago       774MB
k8s.gcr.io/kube-proxy-amd64   v1.11.1             d5c25579d0ff        2 years ago         97.8MB
quay.io/coreos/flannel        v0.10.0-amd64       f0fad859c909        2 years ago         44.6MB
k8s.gcr.io/pause              3.1                 da86e6ba6ca1        2 years ago         742kB
[root@localhost tmp]# docker tag 93109ce1d590 myes:v1
[root@localhost tmp]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
myes                          v1                  93109ce1d590        19 months ago       774MB
k8s.gcr.io/kube-proxy-amd64   v1.11.1             d5c25579d0ff        2 years ago         97.8MB
quay.io/coreos/flannel        v0.10.0-amd64       f0fad859c909        2 years ago         44.6MB
k8s.gcr.io/pause              3.1                 da86e6ba6ca1        2 years ago         742kB

 

<think> 我们正在讨论的是如何使用`docker save`命令将镜像保存成文件。根据引用内容,`docker save`用于将镜像(image)保存为tar文件,而`docker export`用于容器(container)。`docker save`会保存镜像的所有历史记录,而`docker export`只保存容器的当前状态。 用户的问题是:如何使用`docker save`命令将镜像保存成文件? 步骤: 1. 首先,确保你有要保存的镜像。可以通过`docker images`查看本地镜像列表。 2. 使用`docker save`命令将镜像保存为tar文件。 命令语法: 有两种常用写法: - 第一种:使用重定向(>) ```bash docker save [镜像]:[标签] > [文件].tar ``` - 第二种:使用`-o`参数(output) ```bash docker save -o [文件].tar [镜像]:[标签] ``` 此外,还可以保存多个镜像到一个tar文件中: ```bash docker save -o [文件].tar [镜像1]:[标签1] [镜像2]:[标签2] ... ``` 如果需要压缩,可以使用gzip等工具进行压缩,例如: ```bash docker save [镜像]:[标签] | gzip > [文件].tar.gz ``` 或者使用`-o`参数保存为tar.gz文件(但注意docker save本身不压缩,需要手动用gzip压缩)。 引用[1][3]提到,保存的tar文件可以通过`docker load`命令载入,但载入时不能重命名镜像(即保留原来的镜像标签)。而`docker export`保存的容器文件则使用`docker import`导入,可以重命名。 引用[2]中提到了`docker save`的一些高级用法,比如在CI/CD中的镜像传递、镜像备份等。 因此,我们给出以下具体步骤: 步骤1:查看本地镜像 ```bash docker images ``` 记录下你要保存的镜像的REPOSITORYTAG。 步骤2:使用`docker save`保存镜像 - 保存单个镜像(使用重定向): ```bash docker save my_image:latest > my_image.tar ``` - 保存单个镜像(使用`-o`参数): ```bash docker save -o my_image.tar my_image:latest ``` - 保存多个镜像: ```bash docker save -o multiple_images.tar image1:tag1 image2:tag2 ``` 步骤3:(可选)压缩tar文件 ```bash gzip my_image.tar # 得到my_image.tar.gz ``` 或者一步到位: ```bash docker save my_image:latest | gzip > my_image.tar.gz ``` 步骤4:验证保存的镜像 可以通过`docker load`来加载这个tar文件,验证其完整性: ```bash docker load -i my_image.tar ``` 注意事项: - 使用`docker save`保存镜像会保留镜像的完整历史记录。 - 保存的tar文件可能会很大,特别是镜像很大时。可以使用压缩(如gzip)来减小文件体积。 - 如果保存多个镜像到一个tar文件中,加载时也会将所有镜像加载到本地。 引用[2]中提到了一些高级场景,比如在CI/CD流程中传递镜像、备份镜像等。另外,如果tar文件很大,可以采用分割大镜像的方法(如split命令)便于传输。 相关问题: 1. 如何加载通过`docker save`保存的镜像文件? 2. `docker save``docker export`有什么区别? 3. 如何压缩`docker save`生成的镜像文件? 根据以上分析,我们给出回答。 </think> ### 使用 `docker save` 保存镜像为文件的详细方法 `docker save` 命令用于将 Docker 镜像保存为 tar 压缩文件,保留完整的历史记录元数据。以下是具体操作步骤: #### 📥 基本保存方法 1. **查看本地镜像列表** 确认目标镜像标签: ```bash docker images # 示例输出: # REPOSITORY TAG IMAGE ID CREATED SIZE # ubuntu latest a8780b506fa4 2 weeks ago 77.8MB ``` 2. **单镜像保存** **方法一**:使用重定向符号(推荐): ```bash docker save ubuntu:latest > ubuntu_latest.tar ``` **方法二**:使用 `-o` 参数: ```bash docker save -o ubuntu_latest.tar ubuntu:latest ``` 3. **多镜像批量保存** 将多个镜像打包到单个文件: ```bash docker save -o all_images.tar ubuntu:latest alpine:3.15 nginx:alpine ``` #### 🗜️ 压缩优化技巧 使用 `gzip` 压缩减少文件体积: ```bash docker save ubuntu:latest | gzip > ubuntu_latest.tar.gz ``` #### 🔍 验证保存结果 ```bash # 查看文件信息 ls -lh *.tar* # 示例输出: # -rw-r--r-- 1 user staff 78M Jun 15 10:30 ubuntu_latest.tar # -rw-r--r-- 1 user staff 29M Jun 15 10:31 ubuntu_latest.tar.gz ``` #### 🔄 加载保存的镜像 ```bash # 加载未压缩文件 docker load -i ubuntu_latest.tar # 加载压缩文件 gunzip -c ubuntu_latest.tar.gz | docker load ``` #### ⚠️ 关键注意事项 1. **镜像与容器区别** `docker save` 保存的是**镜像**(含完整历史层),而 `docker export` 保存的是**容器**当前状态[^1] 2. **文件完整性验证** ```bash # 检查 tar 文件结构 tar -tf ubuntu_latest.tar | head -n 5 # 输出示例: # a8780b506fa4a8f8c4bc9d0bbde2c2a8f7f5f5d5b4d8f0c7e2f0d8e1c7e2f0d8.json # manifest.json # repositories ``` 3. **存储优化建议** -镜像分割:`split -b 2G large_image.tar "part_"` - 删除历史层:先 `docker export` 容器再 `docker import`(会丢失历史) #### 📊 方法对比 | 操作 | 保留历史层 | 压缩支持 | 典型用例 | |--------------------|------------|----------|------------------------------| | `docker save` | ✅ | ✅ | 镜像备份/迁移[^2] | | `docker export` | ❌ | ❌ | 容器状态快照 | | Dockerfile 构建 | ✅ | ❌ | 标准化构建 | > **提示**:生产环境建议使用 `docker save` + `gzip` 组合,兼顾完整性传输效率[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值