|
|
51CTO旗下网站
|
|
移动端

188金立博官网 立博在线官网持久化的三种方案,你总能用到

立博体育中的立博在线官网可以存储在立博体育层,但是将立博在线官网存放在立博体育层存在一些问题。

作者:Arking来源:高效运维|2019-09-05 09:15

188金立博官网 立博在线官网持久化的三种方案,你总能用到

立博体育中的立博在线官网可以存储在立博体育层。但是将立博在线官网存放在立博体育层存在以下问题:

  • 立博在线官网不是持久化。意思是如果立博体育删除了,这些立博在线官网也就没了
  • 主机上的其它进程不方便访问这些立博在线官网
  • 对这些立博在线官网的I/O会经过存储驱动,然后到达主机,引入了一层间接层,因此性能会有所下降

188金立博官网 提供了3种持久化立博在线官网的方式:

  1. volumes:存于主机文件系统中的某个区域,由188金立博官网管理(/var/lib/docker/volumes/ on linux)。非188金立博官网进程不应该修改这些立博在线官网。卷是188金立博官网中持久化立博在线官网的最好方式
  2. bind mount:存于主机文件系统中的任意位置。非188金立博官网进程可以修改这些立博在线官网
  3. tmpfs mount(Linux中):存于内存中(注意,并不是持久化到磁盘)。在立博体育的生命周期中,它能被立博体育用来存放非持久化的状态或敏感信息

188金立博官网 立博在线官网持久化的三种方案,你总能用到

volumes

如果没有显式创建,一个卷会在最开始挂载时被创建。当立博体育停止时,卷仍然存在。多个立博体育可以通过read-write或read-only的方式使用同一个卷。

只有在显式删除时,卷才会被删除。如果将一个空卷挂载到立博体育中一个存有文件或目录的目录中,这些文件或目录会被拷贝到空卷中;如果将一个非空卷挂载到立博体育中一个存有文件或目录的目录中,这些文件或目录会被隐藏。

使用

  • 创建:docker volume create
  • 删除某个卷:docker volume rm 卷名
  • 删除所有未使用的卷:docker volume prune
  • 列出所有卷:docker volume ls
  • 查看某个卷的信息:docker volume inspect 卷名
  • 挂载到立博体育:-v--volume。如果是188金立博官网17.06或更高:推荐使用--mount。(同 bind mount)
  1. 挂载类型:key为type,value为bind、volume或tmpfs
  2. 挂载源:key为source或src,对于命名卷,value为卷名,对于匿名卷,则忽略
  3. 立博体育中的挂载点:key为destination、dst或target,value为立博体育中的路径
  4. 读写类型:value为readonly,没有key
  5. volume-opt选项,可以出现多次。比如volume-driver=local,volume-opt=type=nfs,…

第一个域:对于命名卷,为卷名;匿名卷,则忽略,此时会创建匿名卷

第二个域:立博体育中的挂载点

第三个域:可选参数,由','隔开,如ro

-v或—volume:由3个域组成,’:’分隔

—mount:由多个’,’隔开的键值对

=组成:

当使用docker service create 启动188金立博官网服务时,只支持--mount,不支持-v和--volume。并且每个服务立博体育使用它们各自的本地卷,因此如果使用本地(local)卷驱动,立博体育无法通过卷共享立博在线官网,但是一些卷驱动支持共享存储。188金立博官网 for AWS和Doocker for Azure都使用Cloundstor plugin支持持久存储

场景

  • 多个运行立博体育间共享立博在线官网
  • 当188金立博官网主机不确保具有给定的目录或文件时。卷可以将立博体育运行时与188金立博官网主机的配置解耦合
  • 备份、恢复、或将立博在线官网从一个188金立博官网主机迁移到另一个188金立博官网主机时

bind mount

主机中的文件或目录通过全路径被引用。在使用绑定挂载时,这些目录或文件不一定要已经存在。

如果使用这种方式将一个目录挂载到立博体育中一个存有文件或目录的目录中,这些文件或目录会被隐藏;如果主机中的文件或目录不存在,当使用--mount挂载时,188金立博官网会报错,当使用-v--volume时,会在主机上创建目录

使用

挂载到立博体育:-v或—volume。如果是188金立博官网17.06或更高:推荐使用—mount。(同 volumes)

  • -v--volume:由3个域组成,':'分隔
  1. 第一个域:对于命名卷,为卷名;匿名卷,则忽略,此时会创建匿名卷
  2. 第二个域:立博体育中的挂载点
  3. 第三个域:可选参数,由','隔开,如ro
  • --mount:由多个','隔开的键值对<key>=<value>组成:
  1. 挂载类型:key为type,value为bind、volume或tmpfs
  2. 挂载源:key为source或src,value为主机中文件或目录的路径
  3. 立博体育中的挂载点:key为destination、dst或target,value为立博体育中的路径
  4. 读写类型:value为readonly,没有key
  5. bind-propagation选项:key为bind-propagation,value为rprivate、private、rshared、shared、rslave或slave
  6. 一致性选项:value为consistent、delegated、cached。这个选项仅仅适用于188金立博官网 for Mac
  7. --mount不支持z和Z(这个不同于-v和—volume)

场景

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

  • 主机与立博体育共享配置文件(188金立博官网默认情况下通过这种方式为立博体育提供DNS解析,通过将/etc/resolv.conf挂载到立博体育中)
  • 共享源代码或build artifacts(比如将Maven的target/目录挂载到立博体育中,每次在188金立博官网主机中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

188金立博官网 立博在线官网持久化的三种方案,你总能用到

在设置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的内容是私有不共享的

要特别小心的使用这两个选项。”Bind-mounting a system directory such as /home or /usr with the Z option renders your host machine inoperable and you may need to relabel the host machine files by hand”

tmpfs mount

只在linux中支持

相对于volumes和bind mount,tmpfs mount是临时的,只在主机内存中持久化。当立博体育停止,tmpfs mount会被移除。对于临时存放敏感文件很有用

不同于volumes和bind mount,多个立博体育无法共享tmpfs mount

使用

  • 挂载到立博体育:—tmpfs。如果是188金立博官网17.06或更高:推荐使用—mount
  1. 挂载类型:key为type,value为bind、volume或tmpfs
  2. 立博体育中的挂载点:key为destination、dst或target,value为立博体育中的路径
  3. tmpfs-size和tmpfs-mode选项
  4. —tmpfs:直接指定立博体育中的挂载点。不允许指定任何配置选项
  5. —mount:由多个’,’隔开的键值对

=组成:

188金立博官网 立博在线官网持久化的三种方案,你总能用到

场景

  • 最好的使用场景是你既不想将立博在线官网存于主机,又不想存于立博体育中时。这可以是出于安全的考虑,或当应用需要写大量非持久性的状态立博在线官网时为了保护立博体育的性能

volume drivers

机器间共享立博在线官网

当构建错误容忍应用时,可能需要配置同一个服务的多个副本来访问相同的文件:

188金立博官网 立博在线官网持久化的三种方案,你总能用到

有多种方法来实现这个目的:

  • 为应用添加逻辑,将文件存储到一个云对象存储系统(如Amazon S3)中
  • 使用一个支持将文件写入外部存储系统(如NFS或Amazon S3)的driver来创建卷

volume drivers可以将底层存储系统从应用逻辑中抽象出来。比如,如果你的服务使用一个具有NFS driver的卷,你能更新你的服务使用不同的driver,作为在云中存储立博在线官网的示例,而不更改应用程序逻辑

使用

在使用docker volume create或驱动立博体育创建匿名卷时,可以指定一个volume drivers。下面的例子使用vieux/sshfs作为volume drivers

假设有2个节点,第一个节点是188金立博官网主机,它能SSH到第二个节点

1、在188金立博官网主机中,安装vieux/sshfs插件

  1. docker plugin install --grant-all-permissions vieux/sshfs 

2、使用卷驱动创建卷

1)创建命名卷

  1. docker volume create --driver vieux/sshfs  
  2.   -o sshcmd=test@node2:/home/test  
  3.   -o password=testpassword  
  4.   sshvolume 

2)启动立博体育时使用卷驱动创建匿名卷

  1. docker run -d  
  2.   --name sshfs-container  
  3.   --volume-driver vieux/sshfs  
  4.   --mount src=sshvolume,target=/app,volume-opt=sshcmd=test@node2:/home/test,volume-opt=password=testpassword  
  5.   nginx:latest 

3、备份、恢复、迁移立博在线官网卷

1)备份一个立博体育

  1. docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata 
  • 启动一个新立博体育,挂载dbstore立博体育中的卷
  • 挂载一个本地主机目录到立博体育/backup
  • 使用tar将dbdata卷中的立博在线官网打包成backup.tar

2)用备份恢复立博体育

使用刚刚创建的备份来恢复立博体育:

  1. docker run -v /dbdata --name dbstore2 ubuntu /bin/bash 

然后,在新创建的立博体育的卷中使用tar解包备份的立博在线官网:

  1. docker run --rm --volumes-from dbstore2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1" 

【编辑推荐】

  1. 加速立博在线官网分析,这10个小技巧好用到哭
  2. 7步搞定Python立博在线官网可视化,大牛出品教程,Jupyter、Colab版都有
  3. 写给大立博在线官网从业者:立博在线官网科学的5个陷阱与缺陷
  4. Pandas循环提速7万多倍!Python立博在线官网分析哪种更快?
  5. 9月立博在线官网库排行:Microsoft SQL Server 分数罕见下滑
【责任编辑:张燕妮 TEL:(010)68476606】

点赞 0
大家都在看
猜你喜欢
24H热文
一周话题
本月获赞

订阅专栏+更多

这就是5G

这就是5G

5G那些事儿
共15章 | armmay

115人订阅学习

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

371人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

758人订阅学习

读 书 +更多

ASP网络编程从入门到精通

本书是为那些对Web开发感兴趣的读者而编写的。ASP(Active Server Pages)是微软公司在Web领域的又一次突破,它打破了以往只能由专业人员来...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微

立博体育