docker基于save保存镜像与基于load加载镜像

#以busybox镜像创建一个容器,在容器中创建一个hello.txt的文件。

#拉取busybox 最新镜像,实际生产中,docker pull 这一步可以省略,docker run的时候会自己去拉取。

docker pull busybox

docker run --name container1 busybox touch hello.txt

#将对容器container1做出的修改提交为一个新镜像,镜像名为busybox:v1

#********** Begin *********#

docker commit container1 busybox:v1

#********** End **********#
 

Docker提供了镜像备份和恢复的手段,这一节,我们将使用docker loaddocker save命令,实现镜像备份和修复。

将镜像保存到tar包

docker save用来将一个或者多个镜像保存为一个tar文件,默认标准输出流的方式输出,它的具体语法如下:

  1. docker save [OPTIONS] IMAGE [IMAGE...]

其中:

  • docker saveDocker将镜像保存到tar包的命令关键词;
  • OPTIIONS:命令选项,-o指定写到一个文件中,而不是标准输出流中;
  • IMAGE: 需要保存到tar包的镜像,可以指定多个,用空格隔开。

例如,将alpine:latest镜像保存到tar包,对应的语句如下:

  1. docker save alpine:latest > alpine.tar
  2. 或者
  3. docker save -o alpine:lateste alpine.tar

如果想要将多个镜像保存到tar包,例如将alpine:latestubuntu:latest保存到tar包,对应的语句如下:

  1. docker save alpine:latest ubuntu:latest > image.tar
从tar包加载镜像

docker load使用docker save保存的tar文件加载镜像,它的具体语法如下:

  1. docker load [OPTIONS]

其中:

  • docker load:Dockertar包加载镜像的命令关键词;
  • OPTIIONS: 命令选项,-i指定从一个tar文件中读取,而不是标准输入流中。

例如,从alpine.tar中加载镜像,对应的语句如下:

  1. docker load < alpine.tar
  2. 或者
  3. docker load -i alpine.tar

如果一个tar包中包含多个镜像,那么会将这些镜像全部到加载进来。

实例

假设想要将本机的alpine镜像传到另一台机器,首先,在本机执行docker save alpine > alpine-latest.taralpine镜像保存成一个tar文件。

  1. [root@localhost dir1]# docker save alpine > alpine-latest.tar
  2. [root@localhost dir1]# ls
  3. alpine-latest.tar

然后我们将alpine-latest.tar文件复制到了到了另一个机器上,然后在该机器上执行docker load < alpine-latest.tar,这样就可以使用tar包将镜像加载进来了。如下图所示,可以通过docker images alpine查看到alpine:latest镜像。

  1. [root@localhost tempdir]# docker load < alpine-latest.tar
  2. 5bef08742407: Loading layer 4.221 MB/4.221 MB
  3. Loaded image: alpine:latest
  4. [root@localhost tempdir]#docker images alpine
  5. REPOSITORY TAG IMAGE ID CREATED SIZE
  6. alpine latest 7328f6f8b418 5 weeks ago 3.96 MB

如果我们结合这两个命令以及ssh甚至pv的话,利用 Linux强大的管道,我们可以写一个命令完成从一个机器将镜像迁移到另一个机器,并且带进度条的功能: docker save <镜像名> | bzip2 | pv | ssh <用户名>@<主机名> 'cat | docker load'

#!/bin/bash

#首先拉取一个busybox镜像

docker pull busybox:latest

#1.将busybox:latest镜像保存到tar包

#********** Begin *********#

docker save busybox:latest > busybox.tar

#********** End **********#

#删除busybox:latest镜像

docker rmi busybox:latest

#2.从tar包加载busybox:latest镜像

#********** Begin *********#

docker load < busybox.tar

#********** End **********#

你可能感兴趣的:(docker,docker,容器,运维)