数据卷:是一个可供容器使用的特殊目录.
容器管理数据有两个方式:
1.数据卷:容器内数据直接映射到本地环境
2.数据券容器: 使用特定容器维护数据券
一、数据卷
特点:
1.数据卷可以在容器之间共享和重用,容器间传递数据将变得高效和方便
2.对数据券内数据的修改会立马生效,无论是容器内操作还是本地操作
3.对数据卷的更新不会影响镜像,解耦开应用和数据
4.卷会一直存在,知道没有容器使用,可以安全地卸载
创建数据卷(Docker中的volume命令)
// 创建一个名为 test 的数据卷
docker volume create test
会创建在 /var/lib/docker/volumes
路径下
列出已有的数据卷
docker volume ls
删除数据卷
// 删除test数据卷
docker volume rm test
查看数据卷详情
docker volume inspect test
绑定数据卷
容器可以绑定创建的数据卷
在docker run
命令的时候,可以使用 -mount
选项来使用数据卷
-mount
选项支持三种数据卷:
volume:普通数据卷,映射到主机
/var/lib/docker/volumes
路径下
bind:绑定数据卷,映射到主机指定路径下
tmpfs:临时数据卷,只存在与内存中
例子:
创建容器一个容器的时候,并指定一个数据卷 /webapp
挂载到容器中的 /opt/webapp
docker run -d --name centos --mount type=bind,source=/webapp,destination=/opt/webapp centos:7
source 指的是数据卷
destination 挂载到容器里面的某个位置
也可以使用 -v
参数,和上面效果一样
docker run -d --name centos -v /webapp:/opt/webapp centos:7
还可以指定 挂载的数据卷的权限为 ro 只读,默认为 rw 读写
docker run -d --name centos -v /webapp:/opt/webapp:ro centos:7
二、数据卷容器
数据卷容器可以多个容器共享一些持续更新的数据。
数据卷容器也是一个容器。
创建一个数据卷容器 vol_data ,并在其中创建一个数据卷挂载到 /vol_data
// 创建一个数据卷容器 vol_data ,使用镜像 centos
docker run it -v /vol_data --name vol_data centos:7
然后其他容器中使用 --volumes-from
来挂载 vol_data
容器中的数据卷
比如创建 db1
和 db2
两个容器,并从 vol_data
容器挂载数据卷
docker run -it --volumes-from vol_data --name db1 centos:7
docker run -it --volumes-from vol_data --name db2 centos:7
然后在 vol_data 容器中的 vol_data 路径下创建的数据,在其他的 db1 和 db2 容器中都可以看到
注意:
如果删除了挂载的容器。数据卷不会被自动删除,如果需要删除,必须在最后一个还挂载的容器时显示使用 docker rm -v
命令来指定同时删除管理的容器!
三、利用数据卷容器来迁移数据
1.备份
备份 vol_data 数据卷容器内的数据卷
docker run --volumes-from vol_data -v ${pwd}:/backup --name worker centos tar cvf /backup/backup.tar /vol_dada
解析:
表示利用centos
镜像创建一个worker容器。使用 --volumes-from vol_data
参数来让worker容器挂载到 vol_data 容器的数据卷(也就是 vol_data 容器中的 vol_data 文件夹)。
使用 -v ${pwd}:/backup
参数来把本地主机的目录挂载到worker容器中的 /backup 目录。
在worker容器启动后,使用 tar cvf /backup/backup.tar /vol_data
命令将 /vol_data 路径下的文件备份到 worker 容器中的 /backup/backup.tar
, 那么本地主机的当前目录就会有一个 backup.tar 的压缩文件
2.恢复
恢复备份的数据卷到一个容器中
先创建一个带有数据卷的容器
// 创建一个数据卷容器 vol_data2
docker run -v /vol_data --name vol_data2 centos:7
然后创建一个新的容器,挂载到 vol_data2 的容器,并使用 untar 解压备份文件到所挂载的容器中
docker run --volumes-from vol_data2 -v ${pwd}:/backup busybox tar xvf /backup/backup.tar
busybox 是一个Linux工具包(可以忽略),只需要保证把 backup.tar
解压出来!
网友评论