加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

Docker 数据持久化的三种方案,你总能用到

发布时间:2019-09-05 18:32:49 所属栏目:编程 来源:Arking
导读:容器中的数据可以存储在容器层。但是将数据存放在容器层存在以下问题: 数据不是持久化。意思是如果容器删除了,这些数据也就没了 主机上的其它进程不方便访问这些数据 对这些数据的I/O会经过存储驱动,然后到达主机,引入了一层间接层,因此性能会有所下

大体上来说,只要可能,最好使用volumes

  • 主机与容器共享配置文件(Docker默认情况下通过这种方式为容器提供DNS解析,通过将/etc/resolv.conf挂载到容器中)
  • 共享源代码或build artifacts(比如将Maven的target/目录挂载到容器中,每次在Docker主机中build Maven工程时,容器能够访问到那些rebuilt artifacts)
  • 当 docker主机中的文件或目录结构和容器需要的一致时

bind propagation

对于bind mount和volumes,默认都是rprivate。只有在使用bind mount时可配置,且必须在linux下。bind propagation是个超前主题,对于大多数用户来说,并不需要配置

对于一个挂载点/mnt,假设它同时也被挂载到/tmp。bind propagation控制 whether a mount on /tmp/a would also be available on /mnt/a

Docker 数据持久化的三种方案,你总能用到

在设置bind propagation之前,主机文件系统需要支持bind propagation

下面的例子将主机中的target/挂载到容器中2次:

  1. docker run -d  
  2.   -it  
  3.   --name devtest  
  4.   --mount type=bind,source="$(pwd)"/target,target=/app  
  5.   --mount type=bind,source="$(pwd)"/target,target=/app2,readonly,bind-propagation=rslave  
  6.   nginx:latest 

此时如果创建/app/foo//app2/foo也会存在

selinux label

你能添加zZ选项来修改挂载到容器中的主机文件或目录的selinux label:

  • z选项指明bind mount的内容在多个容器间是共享的
  • Z选项指明bind mount的内容是私有不共享的

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读