什么是Docker Volume?
为了能够保存(持久化)数据以及共享容器间的数据,docker 提出了Volume的感念。简单来说,volume就是目录或者文件,他可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。类似于linux下对目录进行mount。
Docker Volume有什么优点呢?
优点: Volume 可以将容器以及容器产生的数据分离开来,这样,当你删除容器的时候,也不用担心会把容器里的数据删掉。
docker管理数据的方式有两种:数据卷 数据卷容器
数据卷是为了一个或者多个容器专门指定绕过联合文件系统的目录,为持续性或共享数据提供一些有用的功能;
*数据卷可以在容器间共享和重用
*数据卷数据改变是直接修改的
*数据卷数据改变不会被包括在容器中
*数据卷是持续性的,直到没有容器使用它
1、搭建docker环境且运行docker
[root@gy ~]# yum -y install docker
[root@gy ~]# systemctl start docker
[root@gy ~]# docker load < centos7.tar
[root@gy ~]# docker images
2、使用dockerfile创建一个httpd的镜像
[root@gy ~]# mkdir /docker
[root@gy ~]# cd /docker/
[root@gy docker]# vim Dockerfile
[root@gy docker]# docker build -t="centos:httpd" .
3、在用 docker run命令的时候,可以使用-v来指定挂载一个本地主机的目录到容器中去。可用多次-v选项为一个docker容器运行挂载多个本地主机目录。
*注意 如果主机上的路径不存在,目录将自动在给定的路径中指定。
例如:在宿主机上创建、www/wwwapp1目录,并创建一个index.html文件。
[root@gy ~]# mkdir -p /www/wwwapp1
[root@gy ~]# cd /www/wwwapp1/
[root@gy wwwapp1]# vim index.html
查看镜像
使用 centos:http创建容器
[root@gy ~]# docker run -dit -p 80:80 -v /www/wwwapp1/:/var/www/html/ centos:http
上面的命来加载主机的/www/wwwapp1目录到容器的/var/www/html 目录。这个功能在进行测试的时候十分方便。
挂载的目录可以通过docker inspect 容器ID 查看
现在可以在浏览器中输入宿主IP就可访问到测试页。
二、创建一个数据卷(Volume)
创建的方法有两种:(这里使用第2种)
(1)在Dockerfile中指定VOLUME /目录
(2)执行 docker run -v /目录 命令来指定
[root@gy ~]# docker run -dit -v /data centos:http
这里看到已经运行起来了,接下来查看目录挂载到哪里了
[root@gy ~]# docker inspect 815854ab0f49
进入这个目录,并创建a、b 、c文件,查看容器中是否有这三个文件。
[root@gy ~]# docker exec -it 815854ab0f49 /bin/bash
*注 docker 挂载数据卷的默认权限是读写,用户也可以通过 :ro指定为只读。
例如:
把上面的/www/wwwapp1 下的测试页,挂载到/webapp1下,验证是否能改。
从上图可以看到无法更改。
数据卷容器
如果你有一些持久性的数据并且想在容器间共享,可以使用--volumes-from参数来执行,从此容器上挂载数据
常见的使用场景是使用的纯数据容器来持久化数据库、配置文件或者数据文件等。
例如:创建一个命名的数据卷容器
[root@gy ~]# docker run -dit -v /test --name data centos:http
使用--volumes-from选项在另一个容器中挂载/test 卷
[root@gy ~]# docker run -dit --volumes-from data --name test1 centos:http /bin/bash
查看运行容器
[root@gy docker]# docker ps
进入d2449ababe37这个容器,在test目录下创建a b c 三个文件,查看af84f5f0f5ef这个容器中是否也有a b
c 三个文件
[root@gy ~]# docker exec -it d2449ababe37 /bin/bash
[root@gy ~]# docker exec -it af84f5f0f5ef /bin/bash
[root@af84f5f0f5ef /]# ls test/
6、备份
数据卷另外的一个功能是使用它们来做备份。恢复、移动数据。如果你在用数据容器,那么备份是相当容易。
使用 --volume标记来创建一个加载了卷的新容器,Volume 里的所有东西压缩为一个包
[root@gy ~]# docker run --rm --volumes-from data -v $(pwd):/backup centos:http tar cvf /backup/backup.tar /test
这里我们创建了一个容器,先从data容器来挂载数据卷。然后从本机挂载当前目录到容器的/backup目录。最后,使用tar命令来将data卷备份为backuo.tar。当命令执行完,容器停止后,我们就备份了data数据卷。
执行完成后删除容器 --rm ,此时备份就在当前目录下,名为backup.tar