概念

数据管理主要有两种方式:
数据卷,容器内数据直接映射到本地主机环境;
数据卷容器,使用特定容器维护数据卷

数据卷(可供容器使用的特殊目录,可直接映射到容器目录,类似于linux的mount动作)

创建数据卷

docker volume create -d local 数据卷名

在本地创建了一个名为test的数据卷

docker volume还支持inspect(查看详细信息)、ls(列出已有数据卷)、prune(清理无用数据卷)、rm(删除数据卷)等操作

绑定数据卷

docker run --mount type=[volume|bind|tmpfs] 容器ID

参数解释
volume:普通数据卷,映射到主机/var/lib/docker/volumes
bind:绑定数据卷,映射到主机指定路径下
tmpfs:临时数据卷,只存在于内存中

旧语法:docker run -it --name web -v /webapp:/opt/webapp training/webapp /bin/bash【默认是读写rw,可设定只读ro模式,docker run -it --name web -v /webapp:/opt/webapp training/webapp:ro /bin/bash】

数据卷容器(提供数据卷给其他容器挂载的容器)

创建数据卷容器dbdata

docker run -v 挂载目录 --name 容器名 镜像名

新建其他容器挂载数据卷

docker run --volumes-from 数据卷容器名称 --name 容器名 镜像名

进行读写操作(可以看到不管是数据卷容器还是被挂载容器,都能看到创建的文件夹)

TIPs:可以多次使用--volumes-from参数从多个容器挂载多个数据卷

利用数据卷容器来迁移数据(简单来说就是用数据卷备份数据卷容器的数据)

备份

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

首先使用ubuntu镜像创建容器worker;
使用--volumes-from dbdata参数让worker容器挂载dbdata容器的数据卷;
使用-v $(pwd):/backup参数挂载本地的当前目录到worker容器的/backup目录;
当worker容器启动时,使用tar cvf /backup/backup.tar /dbdata命令将/dbdata下内容备份为容器内的/backup/backup.tar,即宿主机当前目录下的backup.tar

恢复

创建数据卷容器dbdata2

docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

创建挂载dbdata2的容器,并使用untar解压备份文件到挂载的容器卷中

docker run --volumes-from dbdata2 -v $(pwd):backup busybox tar xvf /backup/backup.tar