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