一.在使用docker中,往往需要查看容器内应用内产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间的数据共享,因此docker会涉及到容器的数据管理操作。
二.容器中数据管理的主要方式: 1)数据卷 2)数据卷容器
三.数据卷
1.数据卷概念:
数据卷是一个可供容器使用的特殊目录,数据卷的使用类似于linux对目录或者文件进行mount操作
2.数据卷的特性:
a.数据卷可以在容器之间共享和重用
b.对数据卷的修改会立即生效
c.对数据卷的更新不会影响镜像
d.卷一直存在,直到没有容器使用
3.容器内创建数据卷:
a.挂载一个主机目录作为数据卷:
docker run -itd --name 名称 -v 主机目录:容器目录:权限 镜像名称 命令
-v 指定挂载本地的已有目录到容器中,也可以是单个文件
--name 指定容器的名称
-i 将容器的标准输出打开
-t 打开一个伪终端并绑定到标准输出上
-d 容器以守护进程启动
注意:
1).主机目录必须是绝对路径,如果宿主,主机中没有目录,会自动创建
2)如果docker中目录不存在,会自动创建
3)挂载数据卷的默认权限是读写(rw),用户也可以自行设置,ro指定为只读
实例:

四.数据卷容器
1.数据卷容器就是一个普通的容器,专门用它提供数据卷供其他容器挂载使用。
2.数据卷容器的创建和其他容器的关联:
a.数据卷容器的创建
命令:docker run -itd -v 数据卷位置 --name 容器名称 镜像名

b.创建其他容器并挂载volume容器中的数据卷(使用参数--volumes-from)
命令:docker run -itd --volumes-from 数据卷容器 --name 容器名称 镜像名

c.查看数据是否是同步一样的

备注:
1)可以多次使用--volumes-from参数来从多个容器挂载多个数据卷
2)使用--volumes-from参数所挂载的数据卷容器自身并不需要保持运行状态。
3)还可以从其他已经挂载容器卷的容器来挂载数据卷:
docker run -it -v /tmp:/data --name ubuntu ubuntu ######创建一个挂载容器卷的容器

五.删除容器和删除数据卷的容器:
docker rm 容器ID #删除容器
docker rm -v 容器ID #删除数据卷的容器
数据卷 是被设计用来持久化数据的,它的生命周期独立于容器,Docker 不会在容器被删除后自动删除 数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的 数据卷。
执行docker run命令带--rm命令选项,等价于在容器退出后,执行docker rm -v
容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止,不会因父容器的关闭而造成数据不同步的现象.
六.利用数据卷容器迁移数据
1.备份数据(减轻原容器的压力)
docker run -it --volumes-from volume -v /backup:/opt --name backup ubuntu
tar zcfP /backup/data.tar.gz /data
命令解释:
a.在本地创建一个backup的容器,挂载数据卷容器,
b.将本地的/backup目录映射到work容器/opt的目录下
c.备份/data中的内容到backup中,就是将备份内容放到宿主主机的/opt目录下
2.恢复数据
docker run -itd -v /data --name recovery ubuntu /bin/bash #创建一个带有数据卷的容器recovery
docker run -it --volumes-from recovery -v /backup:/opt ubuntu
进入容器中: tar zcf /opt/data.tar.gz -C /data