Docker数据管理

Docker中的容器一旦删除,容器本身对应的rootfs文件系统就会被删除,容器中的所有数据也将随之删除。但有的时候,我们想要数据如日志或其他需要持久化的数据,不随容器的删除而删除。还有的时候,希望在同一台Host的容器之间可以共享数据。

 

Docker提供了数据卷(data volume),数据卷除了可以持久化数据,还可以用于容器之间共享数据。

 

数据卷

  Docker中有两个与数据卷有关的参数:

  -v=[]

    通过-v参数可以给容器创建数据卷,有三个变量:

    host-dir:表示Host上的目录,如果不存在,Docker会自动在host上创建该目录。

    container-dir:表示容器内对应的目录,如果目录不存在,Docker也会在容器内部创建该目录。

    rw|ro:用于控制数据卷的读写权限。

  --volumes-from=“”

     从指定的容器装入卷,创建一个纯粹用来管理数据的容器,将其他的容器引用这个数据卷容器。

     通常用来处理日志。多个容器的应用,将系统日志存储在一个容器卷里面

 

  通常情况下,使用-v。

 

  可以不指定host-dir直接在容器内创建一个数据卷:

  docker run --it --rm -v /volume --name test centos:6.5 /bin/bash

  进入容器,使用df -lh  可以看到host的根分区被挂载到了容器的 /volume ,实际上docker会在host的/var/lib/docker/vfs/dir/目录生产一个随机的目录,然后挂载容器的 /volume。

  对于这种方式创建的数据卷,当容器被删除后,如果没有其他容器引用该数据卷,对应的host目录也会被删除。所以,如果不想host目录被删除,必须制定host的目录。

    

  备份数据卷

  可以通过参数“--volumes-from”从数据卷挂载数据卷,然后备份数据卷中的数据,例如:

docker run --volumes-from data -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /data

  创建一个新的容器,将Host本地目录挂载到/backup,然后将数据卷容器data的书卷/data 打包到/backup/backup.tar。然后再Host的当前目录下就可以得到backup.tar。

  

  恢复数据卷

  我们可以将备份的数据恢复到原有容器或者其他任何容器。假设我们想把backup.tar数据恢复到一个新的容器data2:

 

docker run -v /data --name data2 centos:6.5 /bin/bash

  然后执行下面的命令即可:

  

docker run --name test --volumes-from data2 -v $(pwd):/backup centos:6.5 tar xvf /backup/backup.tar

  

  

posted @ 2017-11-09 15:04  YatHo  Views(257)  Comments(0)    收藏  举报