有两种方法,一种是通过容器,一种是通过镜像,其实本质是一样的,容器的实质就是镜像

方法一:通过容器

1 首先使用docker ps -a 查看本机上的所有容器

1
docker ps -a

2 导出镜像

使用 docker export 命令根据容器 id 将镜像导成一个文件

1
docker export 容器id > image.tar

上面命令执行之后,我们便可以通过 ls 命令在当前目录下发现 image.tar

3 导入镜像

使用 docker import 命令将这个镜像导进来

1
docker import 容器名 < image.tar

通过 docker images 命令查看镜像是否导入

1
docker images

方法二:通过镜像

1 通过 docker image 查看本机上的所有镜像

1
docker images

2 找到要上传的镜像的 id, 使用 docker save 命令将镜像保存为一个文件

1
docker save 镜像id > image.tar

docker save 可以将多个 image 打包成一个文件

1
docker save -o image.tar 镜像1 镜像2

3 通过 docker load 载入镜像

1
docker load < image.tar

镜像改名字

使用docker load -i 命令之后,镜像的名字和标签都是none,这个问题的根本在于这个镜像压缩包在打包的时候操作不当所导致

例如,使用镜像ID打包的话导致解压的出来的镜像没有名字

因此,推荐使用镜像的名字进行打包,例如:

1
docker save -o redis.tar redis:5.0.2

最佳实践

1
2
3
4
5
6
7
8
9
10
# 导出镜像到本地
# 把镜像名为test,版本为4.0的docker镜像,保存到/data/export目录下,保存名字和格式为test.tar
docker save -o /data/export/test.tar test:4.0

# 导入之前导出的镜像
# 其中 -i 表示从文件输入。会成功导入镜像及相关元数据,包括tag信息
docker load -i xxx.tar

#重命名
docker tag [镜像id] [新镜像名称]:[新镜像标签]