一、docker存储资源类型
用户在使用 Docker 的过程中,势必需要查看容器内应用产生的数据,或者需要将容器内数据进行备份,甚至多个容器之间进行数据共享,这必然会涉及到容器的数据管理
(1)Data Volume (数据卷)
(2)Data Volume Dontainers --- 数据卷容器
二、Data Volume ---数据卷
Data Volume 本质上是 Docker Host 文件系统中的目录或文件,使用类似与 Linux 下对目录或者文件进行 mount 操作。数据卷可以在容器之间共享和重用,对数据卷的更改会立马生效,对数据卷的更新不会影响镜像,卷会一直存在,直到没有容器使用
Data Volume 有以下特点:
a)Data Volume 是目录或文件,而非没有格式化的磁盘(块设备)。
b)容器可以读写 volume 中的数据。
c)volume 数据可以被永久的保存,即使使用它的容器已经销毁。
Data Volume的使用:
通过-v 参数格式为 <host path>:<container path>
(1)运行一个容器,并创建一个数据卷挂载到容器的目录上
[root@localhost ~]# docker run -itd -v /web mariadb:latest /bin/bash
进入新创建的容器中
[root@localhost ~]# docker exec -it 5ab9c9ceb08cc74a28382691c8d37cf71eae1320e2bf54ab663507409aeb6a8d /bin/bash
可以看到创建的数据卷/web,此时里面为空
[root@localhost ~]# mkdir /test
[root@localhost ~]# cd /test/
[root@localhost test]# ls
[root@localhost test]# echo "test"> hello
[root@localhost test]# ls
hello
(2)将/web映射到宿主机的/test目录上,在容器里,不能直接映射硬盘,必须先将硬盘格式化,挂载到目录上,然后将该目录映射到共享数据卷的方法来实现
[root@localhost test]# docker run -itd -v /test:/web mariadb:latest /bin/bash
71f433584b1345d96b8b2699f58d2f1d8e0d7be2ef024551420085ca851b910f
[root@localhost ~]# docker exec -it
71f433584b1345d96b8b2699f58d2f1d8e0d7be2ef024551420085ca851b910f /bin/bash
在该容器里创建测试文件
退出该容器
发现在容器做的操作保存到了/test上
将该容器删除毁灭后,/test中的内容不变。
三、DataVolumeDontainers --- 数据卷容器
如果用户需要在容器之间共享一些持续更新的数据,最简单的方法就是使用数据卷容器,其实数据卷容器就是一个普通的容器,只不过是专门用它提供数据卷供其他容器挂载使用
Data Volume Dontainers使用:
a)创建一个名为 dbdata 的数据卷,并在其中创建一个数据卷挂载到 /dbdata
[root@localhost /]# docker run -dti -v /test:/dbdate --name dbser centos:latest /bin/bash
46baf4b8377674f024991eab7cd5c9410bf0c30a8fea874e1fe409756a98378d
参数为给容器指定名字为dbser方便记忆
进入创建好容器里
[root@localhost /]# docker exec -it 46baf4b8377674f024991eab7cd5c9410bf0c30a8fea874e1fe409756a98378d /bin/bash
b)其他容器使用--volume-from 去挂载dbdata容器中的/dbdata数据卷
[root@localhost ~]# docker run -itd --volumes-from dbser --name db1 centos:latest /bin/bash
465b7f7bbf5d42988d70ea4936fcd8f2050f47dfac791ff73bea578688fe08f4
[root@localhost ~]# docker run -itd --volumes-from dbser --name db2 centos:latest /bin/bash
ce92d47a023ca09a8a3176893b7a403f405c095d83ba5ffcc7ab73e11a8f8cdd
[root@localhost ~]# docker ps -a
进入db1容器内
[root@localhost ~]# docker exec -it 465b7f7bbf5d42988d70ea4936fcd8f2050f47dfac791ff73bea578688fe08f4 /bin/bash
进入db2容器内
[root@localhost ~]# docker exec -it ce92d47a023ca09a8a3176893b7a403f405c095d83ba5ffcc7ab73e11a8f8cdd /bin/bash
在db2容器内写入新内容
进入db1容器内查看,发现在db2中写的内容也能在db1中看到
此时,容器 db1 和 db2 同时挂载了同一个数据卷到本地相同 /dbdata目录。三个容器任何一个目录下的写入,都可以时时同步到另外两个