docker--数据卷

什么是Docker  Volume?

为了能够保存(持久化)数据以及共享容器间的数据,docker 提出了Volume的感念。简单来说,volume就是目录或者文件,他可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。类似于linux下对目录进行mount。

Docker Volume有什么优点呢?

优点: Volume 可以将容器以及容器产生的数据分离开来,这样,当你删除容器的时候,也不用担心会把容器里的数据删掉。

docker管理数据的方式有两种:数据卷   数据卷容器

数据卷是为了一个或者多个容器专门指定绕过联合文件系统的目录,为持续性或共享数据提供一些有用的功能;

   *数据卷可以在容器间共享和重用

   *数据卷数据改变是直接修改的

   *数据卷数据改变不会被包括在容器中

   *数据卷是持续性的,直到没有容器使用它

1、搭建docker环境且运行docker

[[email protected] ~]# yum -y install docker

[[email protected] ~]# systemctl start docker

[[email protected] ~]# docker load < centos7.tar

[[email protected] ~]# docker images docker--数据卷

2、使用dockerfile创建一个httpd的镜像

[[email protected] ~]# mkdir /docker
[[email protected] ~]# cd  /docker/
[[email protected] docker]# vim  Dockerfile

docker--数据卷

[[email protected] docker]# docker build -t="centos:httpd" .

docker--数据卷

3、在用 docker run命令的时候,可以使用-v来指定挂载一个本地主机的目录到容器中去。可用多次-v选项为一个docker容器运行挂载多个本地主机目录。

   *注意   如果主机上的路径不存在,目录将自动在给定的路径中指定。

例如:在宿主机上创建、www/wwwapp1目录,并创建一个index.html文件。

[[email protected] ~]# mkdir -p /www/wwwapp1
[[email protected] ~]# cd /www/wwwapp1/
[[email protected] wwwapp1]# vim index.html

 docker--数据卷

查看镜像

docker--数据卷

使用 centos:http创建容器

[[email protected] ~]# docker run -dit -p 80:80 -v /www/wwwapp1/:/var/www/html/ centos:http

docker--数据卷

上面的命来加载主机的/www/wwwapp1目录到容器的/var/www/html 目录。这个功能在进行测试的时候十分方便。

挂载的目录可以通过docker inspect 容器ID 查看

docker--数据卷

docker--数据卷

现在可以在浏览器中输入宿主IP就可访问到测试页。

docker--数据卷

二、创建一个数据卷(Volume)

    创建的方法有两种:(这里使用第2种)

  (1)在Dockerfile中指定VOLUME  /目录

  (2)执行 docker run  -v  /目录 命令来指定

[[email protected] ~]# docker run -dit -v /data centos:httpdocker--数据卷

这里看到已经运行起来了,接下来查看目录挂载到哪里了

[[email protected] ~]# docker inspect  815854ab0f49

docker--数据卷

进入这个目录,并创建a、b 、c文件,查看容器中是否有这三个文件。

docker--数据卷

[[email protected] ~]# docker exec -it 815854ab0f49  /bin/bash

docker--数据卷

  *注   docker 挂载数据卷的默认权限是读写,用户也可以通过 :ro指定为只读。

例如:

把上面的/www/wwwapp1 下的测试页,挂载到/webapp1下,验证是否能改。

docker--数据卷docker--数据卷

 从上图可以看到无法更改。

数据卷容器

    如果你有一些持久性的数据并且想在容器间共享,可以使用--volumes-from参数来执行,从此容器上挂载数据

    常见的使用场景是使用的纯数据容器来持久化数据库、配置文件或者数据文件等。

例如:创建一个命名的数据卷容器

[[email protected] ~]# docker run -dit -v /test --name data centos:http

使用--volumes-from选项在另一个容器中挂载/test 卷

[[email protected] ~]# docker run -dit --volumes-from data --name test1 centos:http /bin/bash

看运行容器

[[email protected] docker]# docker ps

docker--数据卷进入d2449ababe37这个容器,在test目录下创建a  b   c  三个文件,查看af84f5f0f5ef这个容器中是否也有a  b

c 三个文件

[[email protected] ~]# docker exec -it d2449ababe37 /bin/bash

docker--数据卷

[[email protected] ~]# docker exec -it  af84f5f0f5ef /bin/bash

[[email protected] /]# ls test/

docker--数据卷

6、备份

    数据卷另外的一个功能是使用它们来做备份。恢复、移动数据。如果你在用数据容器,那么备份是相当容易。

使用 --volume标记来创建一个加载了卷的新容器,Volume 里的所有东西压缩为一个包



[[email protected] ~]# docker run --rm --volumes-from data -v $(pwd):/backup centos:http tar cvf /backup/backup.tar /test

docker--数据卷

这里我们创建了一个容器,先从data容器来挂载数据卷。然后从本机挂载当前目录到容器的/backup目录。最后,使用tar命令来将data卷备份为backuo.tar。当命令执行完,容器停止后,我们就备份了data数据卷。

执行完成后删除容器 --rm ,此时备份就在当前目录下,名为backup.tardocker--数据卷