您的位置:首页 > 运维架构 > Docker

[置顶] Docker技术剖析--docker数据卷(LVM)配置详解

2018-02-24 17:36 781 查看
简介:想要了解docker volume,首先我们需要知道docker的文件系统是如何工作的。docker镜像是由多个文件系统(只读层)叠加而成的。当我们启动一个容器的时候,docker会加载只读镜像层并在其上,添加一个读写层。如果运行中的容器修改了现有的一个已经存在的文件,那么文件将会从读写层下面的只读层复制读写层,该文件的只读版本依然存在,只是已经被读写层中该文件的副本所隐藏。当删除docker容器,并通过该镜像重新启动时,之前的更改将会失。在docker中,只读层在顶部的读写层的组合被称为union file system(联合文件系统)。为了能够保存(持久化)数据以及共享容器间的数据,docker提出了volume的概念,简单的说,volume就是目录或者文件。它可以绕过默认的联合文件系统,以正常的文件或者目录的形式存在于宿主机上。volume可以将容器以及容器产生的数据分离开来,这样,当你使用docker rm 等删除容器时,不会影响相关的数据。我们可以通过两种方式来吃实话volume,这两种方式有些细小而又重要的差别,我们可以在允许时候使用-v来声明volume:docker管理数据的方式有两种:数据卷---数据卷容器数据卷是为一个或者多个容器专门指定绕过union file system(联合文件系统)的目录,为持续性或者共享数据提供了一些有用的功能。1.数据卷时可以在容器间共享和重用2.数据卷数据改变是直接修改的3.数据卷书籍改变不会被包括在容器中4.数据卷是持续性的,直到没有容器使用它数据卷的使用,类似于linux下对目录进行mount挂载一个主机目录作为数据卷如果想在容器中使用主机上面的某个目录,你可以通过-v参数来指定。docker run  -v /host/path:/some/path...这明确的告诉docker使用指定的主机路径来代替docker自己创建的根路径并挂载到容器内指定的路径,需要注意。如果主机上的路径不存在,目录将自动在给定的路径中创建1.我们先简单用dockerfile创建一个http的镜像
[root@kang ~]# mkdir /dockerhttp
[root@kang ~]# cd /dockerhttp/
[root@kang dockerhttp]# vim Dockerfile



FROM docker.io/centos:latest
RUN yum install -y httpd
RUN sed -i 's/#ServerName www.example.com:80/ServerName www.blxh.com/'g /etc/httpd/conf/httpd.conf
expose 80
cmd ["/usr/sbin/httpd","-DFOREGROUND"]



[root@kang dockerhttp]# docker build -t="centos:http" .    //运行 





运行结束后docker image查看镜像是否有httpimage


2.创建一个web容器,并加载一个宿主目录到容器的/var/www/html/目录在宿主机上创建/web/webapp1目录,并且创建一个index.html文件:[root@kang ~]# mkdir -p /web/webapp1
[root@kang ~]# vim /web/webapp1/index.html


3.使用镜像创建容器:[root@kang ~]# docker run -dit -p 80:80 -v /web/webapp1/:/var/www/html/ centos:http

[root@kang ~]# docker ps


上面的命令加载主机的/web/webapp1目录到容器的/var/www/html目录。这个功能在进行测试的时候十分方便,比如用户可以设置一些程序到本地目录中,来查看容器是否正常工作。本地目录的路径必须是绝对路径,如果目录不存在docker会自动为你创建它这时候我们去访问网页,如果出现zhu da jia mei tian kai kai xin xin页面证明成功。


二、创建一个数据卷volume可以使用以下两种方式创建:1.在dockerfile中指定volume /some/dir2.执行docker run -v /some/dir命令来指定无论哪种方式都是做了同样的事情,它们告诉docker在主机创建一个目录,然后将其挂载到指定的路径下,当删除使用该volume的容器时volume本身不会受到影响,它可以一直存在下去创建数据卷绑定到新新建容器,新建容器中会创建/data数据卷[root@kang ~]# docker run -dit -v /data centos:http


进入容器,查看给容器添加的数据卷


创建的数据卷可以通过 docker inspect查看


这说明docker把/var/lib/docker下的某个目录挂载到了容器内的/data目录下。
我们从主机上添加文件到此文件夹下:[root@kang ~]# cd /var/lib/docker/volumes/dc8a1570bb86a429649a4e1fb13a6c0ca6b9d408cef77b7b11992ee1b03c2735/_data/
[root@kang _data]# touch kangshuo.txt
[root@kang _data]# vim kangshuo.txt



之后我们进去容器查看是否有kangshuo.txt


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



数据卷容器
如果要授权一个容器访问另一个容器的volume,我们可以使用--volumes-from参数来执行,如果你有一些持久性的数据并且想在容器间共享,可以创建一个数据卷容器,然后从容器上挂载数据
常见的使用场景是使用纯数据容器来持久数据库,配置文件或者数据文件等。
例如:
docker run --name dbdata postgres echo "data-only container for postgres"
该命令将会创建一个已经包含在dockerfile里定义volume镜像,我们可以使用--volume-from命令来识别其他容器的volume




使用--volume-from选项在另外一个容器中挂载 /test卷。不管data容器是否在运行,其他容器都可以挂载该容器的数据卷,当然如果是单独的数据卷就没必要运行容器的



查看挂载点


到这里有关于Docker技术剖析--docker数据卷(LVM)配置就演示完毕了!!!!希望对你有所帮助!!!@再见!!!!





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: