数据卷 是一个可供容器使用的特殊目录,它将主机操作系统目录直接 映射进容器,类似于 Linux 中的 mount 行为 。
数据卷:可以提供很多有用的特性
- 数据卷可以在容器之间共事和重用,容器间传递数据将变得高效与方便;
- 对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作;
- 对数据卷的更新不会影响镜像,解摘开应用和数据;
- 卷会一直存在 ,直到没有容器使用,可以安 地卸载它;
创建数据卷:
使用如下命令可以快速在本地创建一个数据卷,,查看/ ar/lib docker /vo lumes 路径下,会发现所 建的数据卷位置:
[root@localhost ~]# docker volume create -d local test
test
[root@localhost ~]# ls -1 /var/l b/docker/volumes
绑定数据卷:
用 docker run口命令的时候,可以使用 mount 选项来使用数据卷 mount 项支持三种类型的数据卷,包括:
- volume 普通数据卷,映射到主机/var/ lib /docke /vo lumes 径下;
- bind :绑定数据卷,映射到主机指定路径下;
- tmpfs :临时数据卷,只存在于内存中
使用 training/webapp 镜像创建 Web 容器,并创建一个数据卷挂载到容器 的/opt/webapp 目录:
[root@localhost ~]# docker run -d -P --name web --mount type=bind,source=/webapp,destination=/opt/webapp training/webapp python app.py
1063002e84c49039903d311c65b029c28ebf6db862a07840f3b8bf68029276f9
上述命令等同于:
[root@localhost ~]# docker run -d -P --name web -v /webapp:/opt/webapp training/webapp python app.py
bd23a4b08741092c7158bfd9e1a286edf95ba21b13add4b61658b18fc1305399
数据卷容器:
如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载。
创建一个数据卷容器 dbdata 并在其中创建一个数据卷挂载到/dbdata
[root@localhost ~]# docker run -it -v /dbdata --name dbdata busybox
查看/dbdata目录:
/ # ls
bin dev home lib64 root tmp var
dbdata etc lib proc sys usr
然后,可以在其他容器中使用--volumes-from 来挂载 dbdata 容器中的数据卷,例如创建 dbl db2 两个容器,并从 dbdata 容器挂载数据卷,我们先克隆三台主机,执行如下命令:
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker run -it --volumes-from dbdata --name db1 busybox
/ #
/ #
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker run -it --volumes-from dbdata --name db2 busybox
/ #
/ #
此时, 容器 dbl db2 都挂载同一个数据卷到相同的/dbdata 目录,三个容器任何方在该目录下的写人,其他容器都可以看到 例如,在 dbdata 容器中创建 test 文件:
在容器dbdata中
/ # cd /dbdata
/dbdata #
/dbdata # touch wyx
在容器db1中查看
/ # ls dbdata/
wyx
/ #
如果删除了挂载的容器(包括 dbdata db1和 db2 ),数据卷并不会被自动删除 如果 删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式使用 docker rm -v 令来指定同时删除关联的容器
利用数据卷容器来迁移数据
1.备份
[root@localhost ~]# docker run --volumes-from dbdata -v $(pwd):/backup --name worker busybox tar -cvf /backup/backup.tar /dbdata
2.恢复
[root@localhost ~]# docker run -v /dbdata --name dbdata2 busybox /bin/bash
[root@localhost ~]# docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar -xvf /backup/backup.tar
dbdata/
dbdata/wyx
[root@localhost ~]# ll
total 593940
-rw-------. 1 root root 706 Mar 4 06:39 anaconda-ks.cfg
-rw-r--r--. 1 root root 2048 Mar 11 20:01 backup.tar