Docker技术剖析--docker数据卷
来源:互联网 发布:mac 股票行情软件 编辑:程序博客网 时间:2024/05/29 13:00
想要了解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@docker-yk ~]# mkdir /dockerhttp
[root@docker-yk ~]#cd /dockerhttp/
[root@docker-yk dockerhttp]# vim Dockerfile
[root@docker-yk dockerhttp]# cat Dockerfile
FROM docker.io/centos:latest
RUN yum install -y httpd
RUN sed -i 's/#ServerName www.example.com:80/ServerName www.yankerp.com/'g /etc/httpd/conf/httpd.conf
expose 80
cmd ["/usr/sbin/httpd","-DFOREGROUND"]
[root@docker-yk dockerhttp]# docker build -t="centos:http" . //运行
运行结束后docker image查看镜像是否有httpimage
2.创建一个web容器,并加载一个宿主目录到容器的/var/www/html/目录
在宿主机上创建/web/webapp1目录,并且创建一个index.html文件:
3.使用镜像创建容器:
[root@docker-yk ~]# docker run -dit -p 80:80 -v /web/webapp1/:/var/www/html/ centos:http
8afaefe406bcb82cd51c708db45d362e95f52f8a2c1be72a3e4c70ae2a2fca6c
[root@docker-yk ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8afaefe406bc centos:http "/usr/sbin/httpd -DFO" 6 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp happy_leavitt
上面的命令加载主机的/web/webapp1目录到容器的/var/www/html目录。这个功能在进行测试的时候十分方便,比如用户可以设置一些程序到本地目录中,来查看容器是否正常工作。本地目录的路径必须是绝对路径,如果目录不存在docker会自动为你创建它
这时候我们去访问网页,如果出现zhu da jia mei tian kai kai xin xin页面证明成功。
二、创建一个数据卷
volume可以使用以下两种方式创建:
1.在dockerfile中指定volume /some/dir
2.执行docker run -v /some/dir命令来指定
无论哪种方式都是做了同样的事情,它们告诉docker在主机创建一个目录,然后将其挂载到指定的路径下,当删除使用该volume的容器时volume本身不会受到影响,它可以一直存在下去
创建数据卷绑定到新新建容器,新建容器中会创建/data数据卷
进入容器,查看给容器添加的数据卷
创建的数据卷可以通过 docker inspect查看
这说明docker把/var/lib/docker下的某个目录挂载到了容器内的/data目录下。
我们从主机上添加文件到此文件夹下:
[root@localhost ~]# cd /var/lib/docker/volumes/d34031dcf5cd9630b66b018151dc4878a0b142d61438b226c51a525a9075752b/_data
[root@localhost _data]# touch yankai.txt
[root@localhost _data]# vim yankai.txt
[root@localhost _data]# cat yankai.txt
hello docker
之后我们进去容器查看是否有yankai.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数据卷
- docker 数据卷
- Docker数据卷详解
- docker数据卷
- docker总结--数据卷
- docker--数据卷
- docker学习5--docker数据卷(volume)
- Docker-数据卷和数据容器卷
- Docker数据卷和数据卷容器
- Docker技术剖析--docker image管理
- Docker技术剖析--Supervisor管理
- Docker技术剖析--Swarm集群
- Docker与Kubernetes系列(四): Docker的数据卷
- Docker容器、镜像、数据卷
- Docker 网络及数据卷设置 [三]
- docker的数据卷管理方法
- Docker学习笔记-数据卷、数据卷容器
- 11: docker存储之 数据卷以及数据卷容器
- RHEL7 -- 使用Chrony设置时间与时钟服务器同步
- RStudio Server-0.99.902 (OpenLogic CentOS 7.2)
- The 10 most popular coding challenge websites for 2017
- 为RecycleView添加ContextMenu支持
- Python dictionary 汇总
- Docker技术剖析--docker数据卷
- mysql的binlog导出为可识别的sql语句
- SSM框架整合(Maven+Spring+SpringMVC+Mybatis+mysql 附demo实例)
- MySQL 存储过程和存储函数示例
- 高德地图的坑
- jmeter源码---gui简单介绍
- 用dom4j解析xml,soap报文
- Qt中的文件操作
- iOS内置购买之提交指南-协议、税务和银行业务