如何持久化容器和镜像 && 容器的备份和恢复?

一、如何持久化一个容器?

以 nginx 容器为例,容器ID = f43295636f4d

1. 将正在运行的容器打包成.tar文件导出

# docker export 容器ID > 文件名称.tar
  或
# docker export -o 文件名称.tar 容器ID

例如,将正在运行的nginx容器打包成名称为nginx.tar,并存放到当前目录下:

# docker export f4329 > nginx.tar

2. 从tar归档文件中载入镜像

# docker import 文件.tar 新的镜像名称:新的镜像tag

例如,以nginx.tar创建一个名称为 newnginx,tag=7的镜像:

# docker import nginx01.tar newnginx:7

此时使用 『# docker image list 』命令会看到已经成功生成的镜像:

[root@localhost ~]# docker image list
REPOSITORY    TAG      IMAGE ID      CREATED         SIZE
newnginx      7      2794ebf1d873   36 seconds ago   108 MB

3. 运行容器

# docker run -it 2794 /bin/bash

二、如何持久化一个镜像?

以 mysql 镜像为例,镜像ID = 9095d

1. 将镜像以tar包形式导出

#docker save -o 文件名称.tar 镜像ID

例如,将mysql镜像打包成.tar导出到当前目录:

# docker save -o mysql.tar  9095d 

2. 从.tar包中载入一个新的镜像

# docker load -i 文件名称.tar

例如,将mysql镜像打包成.tar导出,放在当前目录下:

# docker load -i mysql.tar 
Loaded image ID: sha256:9095d3616371512677867f64eac1974fa7af7a640e4efc9d8704d3d8e134da87

镜像载入成功,且ID=9095d...
不过,需要注意的一点就是,docker load不能对载入的镜像重命名,导致的现象就是,生成的镜像的名称和tag都为none,不过这时可以使用「docker tag 镜像ID name:tag」为该镜像设置名称和tag,例如:

# docker tag 9095d mysql01:8

ps:若是想将生成的 tar 包上传到另一台服务器,可以使用:
# scp 文件名称.tar IP:path
但前提是,接收该文件的这台服务器需授权允许该主机通过sshd远程登录管理它,修改它的hosts.deny 和hosts.allow文件如下(安全点,我们设置成仅允许当前主机进行访问管理):
# /etc/hosts.deny 添加如下,表示禁止所有ip访问
sshd:ALL
# /etc/hosts.allow 添加如下,表示只允许该IP进行访问
sshd:192.168.x.x
例如,现在将mysql.tar上传到IP=192.168.x.x的服务器中的/etc:scp mysql.tar root@192.168.x.x:/etc

三、容器的备份、恢复和迁移

以nginx容器为例,容器ID = 068ac

1. 创建容器快照

# docker commit -m "描述" -a "作者" 容器ID 镜像名称:镜像Tag      

该命令会生成一个当前容器的快照镜像,例如,生成nginx容器的(ID = 068ac)一个快照镜像(自定义信息:镜像名称=「nginxsnap」,tag=9,作者=WL):

# docker commit -m "这是nginx的一个快照镜像" -a "WL" 068ac nginxsnap:9  
sha256:2b8ccb18d0419d33f099a8666dae0ccae9b8482e...
# docker image list
REPOSITORY    TAG     IMAGE ID         CREATED         SIZE
nginxsnap      9     2b8ccb18d041    6 minutes ago     109 MB

创建成功,且镜像ID = 2b8cc...

2. 备份快照

3. 恢复

  • 如果是上传到了仓库,使用docker pull命令将镜像下载到本地,然后执行docketr run
  • 如果是打包成了tar包,使用docker load命令加载出镜像,然后执行docketr run

✿ 获取更多,请戳这儿

Comments
Write a Comment