默认容器的数据是保存在容器的可读写层,当容器被删除时其上的数据将会丢失,所以为了实现数据的持久性则需要选择一种数据持久技术来保存数据,当前有以下几种方式:

  1. Volumes
  2. Bind mounts
  3. tmpfs
其中tmpfs的数据只保存在容器的内存中暂不讨论,而Volumes也叫Docker Managed Volume。
先简述实现方式:

Bind mounts

此方式与Linux系统的mount方式很相似,即是会覆盖容器内已存在的目录或文件,但并不会改变容器内原有的文件,当umount后容器内原有的文件就会还原。
实现语法有两种:
分别是,
使用-v或--volume,第一个冒号左边是Host的路径,右边是容器内的路径,第二个冒号的右边是可选项默认是可读写。
docker run -d \
  -it \
  --name devtest \
  --volume "$(pwd)"/target:/app:ro \
  nginx:latest
使用--mount
docker run -d \
  -it \
  --name devtest \
  --mount type=bind,source="$(pwd)"/target,target=/app,readonly \
  nginx:latest
两种语法的比较,后者更容易理解,建议采用后者。
还可以设定bind-propagation参数,如:
docker run -d \
  -it \
  --name devtest \
  --mount type=bind,source="$(pwd)"/target,target=/app \
  --mount type=bind,source="$(pwd)"/target,target=/app2,readonly,bind-propagation=rslave \
  nginx:latest
有以下的可选参数:
属性值 描述
shared 原始mount的次级mount会显示在重复mount中, 且重复mount的次级mount的内容也会在原始mount中显示
slave 与shared mount相似,只是内容单方向可见,重复mount的内容不会在原始mount中显示。
private 次级mount在原始mount和重复mount之间互不可见
rshared 与shared mount一样,只是传播范围扩展至嵌套的重复mount和原始mount
rslave 与slave mount一样,只是传播范围扩展至嵌套的重复mount和原始mount
rprivate 默认值,与private mount一样,即原始mount和重复mount之间都不会传播内容。

注:更多关于mount的说明请见:

https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt

volume mount

使用以下命令建立由docker管理的volume
docker volume create my-vol
查看已建立的volume
docker volume ls
删除已建立的volume
docker volume rm my-vol
使用已建立的volume
docker run -d \
  --name devtest \
  --mount source=myvol,target=/app \
  nginx:latest
docker run -d \
  --name devtest \
  -v myvol2:/app \
  nginx:latest
可以使用以下命令检查容器中的volume路径
docker inspect devtest
注:当使用docker service create命令时只能使用--mount而不能使用-v
通过vieux/sshfs实现跨主机的volume
第1步,安装vieux/sshfs插件
docker plugin install --grant-all-permissions vieux/sshfs
第2步,建立ssh volume
docker volume create --driver vieux/sshfs \
  -o sshcmd=test@node2:/home/test \
  -o password=testpassword \
  sshvolume  
第3步,使用ssh volume
docker run -d \
  --name sshfs-container \
  --volume-driver vieux/sshfs \
  --mount src=sshvolume,target=/app,volume-opt=sshcmd=test@node2:/home/test,volume-opt=password=testpassword \
  nginx:latest 
注:如果两主机之间已设定ssh key验证,则可以不使用opt=password指定密码
注:Bind mount 和 volume mount的一个区别
Bind mount会覆盖容器中的文件,而volume mount则不会,即如果容器中已有文件,则会将文件同步到主机的目录上。

Docker数据持久之volume和bind mount相关推荐

  1. 第 6 章 存储 - 039 - Data Volume 之 bind mount

    Data Volume Data Volume 本质上是 Docker Host 文件系统中的目录或文件,能够直接被 mount 到容器的文件系统中. Data Volume 有以下特点: 1.Dat ...

  2. Docker Data Volume 之 bind mount

    Data Volume 本质上是 Docker Host 文件系统中的目录或文件,能够直接被 mount 到容器的文件系统中.Data Volume 有以下特点: Data Volume 是目录或文件 ...

  3. docker学习笔记(四)docker数据持久化volume

    docker数据持久化 官网:https://docs.docker.com/storage/volumes/ docker中的容器是可以随时销毁的,容器中的数据会随着容器的消亡而消亡.然而很多容器都 ...

  4. Docker(七)--Docker数据卷管理及插件

    一.Docker 数据卷管理 在实际使用过程中,我们需要把容器和数据进行隔离,因为容器在使用过程中可能随时要进行销毁,但是数据要保留下来,所以我们要做数据的持久化. 为什么要用数据卷 docker分层 ...

  5. `docker数据持久化volume和bind mounts两种方式

    将数据从宿主机到容器的三种方式: 1,volumes:docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)保存数据的最佳方式 2,bind mounts 将宿主机上 ...

  6. 三剑客”之Swarm应用数据持久化管理(volume 、bind 、 nfs)

    1.前言  在上一篇文章 <"三剑客"之Swarm集群架构.集群管理 .服务管理>中,大家已了解swarm集群管理以及如何管理swarm集群中的服务.试想一下,如果sw ...

  7. Docker数据卷(Volume)

    一.将Docker数据挂载到容器 在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中.目前Docker提供 ...

  8. docker 数据卷 volume

    集群直接部署tomcat项目,可能项目在不同的服务器上,如何实现不同服务器上面的项目同步,可是使用docker数据卷的形式 首先我们来认识最为基础的docker数据卷 如何创建一个数据卷: 1.创建 ...

  9. Docker容器学习梳理 - Volume数据卷使用

    Docker volume使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Docker中的数据可以存储在类似于虚拟机 ...

最新文章

  1. Android210更新2---支持喇叭
  2. C/C++ OpenCV方框滤波
  3. 【渝粤题库】陕西师范大学500017 基础物理专题(光、近代)作业
  4. python preference界面设置_Android设置界面5分钟搞定--Preferences的使用
  5. [C++]什么是句柄?为什么会有句柄?
  6. 查找系统大文件占用WizTree 4.05.64位
  7. 计算机中丨kb表示的字节数是,5mb是多少kb?计算机中5mb是多少字节?2MB表示多少字节?4mb是多少字节...
  8. java jcombobox 联动_java的JCombobox实现中国省市区三级联动
  9. 星际争霸2中文版下载 – 即时战略游戏超大作 (繁体含中文语音)
  10. 基于C++和QT实现的第三人称RPG游戏编辑器设计
  11. 编译原理c++基于LR分析表编写语法分析器
  12. C#窗体程序随电脑分辨率自动调整大小
  13. 秋季当养肺,水果蔬菜来帮忙
  14. 计算机信息安全专业主要学习什么,信息安全专业学什么 课程有哪些
  15. Android内存优化之图片优化
  16. 拉勾前端高薪就业课程笔记第十一弹(模块4-1)
  17. opencv-python 立体图像的深度图
  18. 《SAP ABAP 李斌的开源工具箱》专栏目录
  19. Python利用微软Azure免费的语音合成TTS源码分享
  20. 【数学建模学习笔记【集训十天】之第四天】

热门文章

  1. [音乐天堂]秋日私语
  2. 剑指offer刷题详细分析:part6:26题——30题
  3. c语言程序设计对口升学,2017年对口升学计算机专业试题含答案
  4. winform界面嵌入dwg图纸_winform操作CAD图
  5. Navicat12安装(图文教程)
  6. matlab离散线性时不变系统的分析,实验3线性时不变系统的时域分析及matlab实现.doc...
  7. 重新安装Eclipse的教程
  8. 用计算机弹奏演员视频教程,计算机教程 声音演员.pdf
  9. 史上最强的「自动化测试」学习路线在这里
  10. 官方发布历年考研平均分!你今年考多少分才能上岸