为了防止镜像丢失,需要为某个特殊的镜像备份。并且在需要的时候,使用备份的文件进行镜像恢复。
将镜像保存到tar包
docker save
用来将一个或者多个镜像保存为一个tar文件,默认标准输出流的方式输出,它的具体语法如下:
docker save [OPTIONS] IMAGE [IMAGE...]
其中:
- docker save:Docker将镜像保存到tar包的命令关键词;
- OPTIIONS:命令选项,-o指定写到一个文件中,而不是标准输出流中;
- IMAGE: 需要保存到tar包的镜像,可以指定多个,用空格隔开。
例如,将alpine:latest镜像保存到tar包,对应的语句如下:
docker save alpine:latest > alpine.tar
或者
docker save -o alpine:lateste alpine.tar
如果想要将多个镜像保存到tar包,例如将alpine:latest和ubuntu:latest保存到tar包,对应的语句如下:
docker save alpine:latest ubuntu:latest > image.tar
从tar包加载镜像
docker load使用docker save保存的tar文件加载镜像,它的具体语法如下:
docker load [OPTIONS]
其中:
- docker load:Docker从tar包加载镜像的命令关键词;
- OPTIIONS: 命令选项,-i指定从一个tar文件中读取,而不是标准输入流中。
例如,从alpine.tar中加载镜像,对应的语句如下:
docker load < alpine.tar
或者
docker load -i alpine.tar
如果一个tar包中包含多个镜像,那么会将这些镜像全部到加载进来。
实例
假设想要将本机的alpine镜像传到另一台机器,首先,在本机执行docker save alpine > alpine-latest.tar将alpine镜像保存成一个tar文件。
[root@localhost dir1]# docker save alpine > alpine-latest.tar
[root@localhost dir1]# ls
alpine-latest.tar
然后我们将alpine-latest.tar文件复制到了到了另一个机器上,然后在该机器上执行docker load < alpine-latest.tar
,这样就可以使用tar包将镜像加载进来了。如下图所示,可以通过docker images alpine
查看到alpine:latest镜像。
[root@localhost tempdir]# docker load < alpine-latest.tar
5bef08742407: Loading layer 4.221 MB/4.221 MB
Loaded image: alpine:latest
[root@localhost tempdir]#docker images alpine
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest 7328f6f8b418
如果我们结合这两个命令以及ssh甚至pv的话,利用 Linux强大的管道,我们可以写一个命令完成从一个机器将镜像迁移到另一个机器,并且带进度条的功能:
docker save <镜像名> | bzip2 | pv | ssh <用户名>@<主机名> 'cat | docker load'