什么是数据卷
数据卷是经过特殊设计的目录,可以绕过联合文件系统(UFS),为一个或者多个容器提供访问,数据卷设计的目的,在于数据的永久存储,它完全独立于容器的生存周期,因此,docker不会在容器删除时删除其挂载的数据卷,也不会存在类似的垃圾收集机制,对容器引用的数据卷进行处理,同一个数据卷可以只支持多个容器的访问。
数据卷的特点
1.数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会被拷贝到新初始化的数据卷中
2.数据卷可以在容器之间共享和重用
3.可以对数据卷里的内容直接进行修改
4.数据卷的变化不会影像镜像的更新
数据卷的使用
为容器添加数据卷
docker run -itd -p 80:80 -v /data/log:/var/log/nginx --name nginx nginx
c70ffb5d7e6e629a67a3c0e2c28bfddf2f0ef48868fc7b9316e54b028fd0b7a0
为数据卷添加访问权限
docker run -itd -p 80:80 -v /data/log:/var/log/nginx:ro --name nginx nginx
添加只读权限之后在 docker 容器的/var/log/nginx目录下就不能在创建文件了,为只读权限;在宿主机下的/data/log下可以创建东西
通过 -v 容器内路径, ro rw 改变读写权限
- ro readonly 只读
- rw readwrite 可读写
一旦设置了容器权限,容器对我们挂载出来的内容就有限定了
ro : 说明这个路径只能通过宿主机来操作,容器内无法操作
数据的覆盖问题
1.如果挂载一个不存在的数据卷(目录)到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。
2.如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉。
这两个规则都非常重要,灵活利用第一个规则可以帮助我们始化数据卷中的内容。掌握第二个规则可以保证挂载数据卷后的数据总是你期望的结果。