Docker 提供了三种方式将数据从宿主机挂载到 Docker容器中: volumes、bind mounts、tmpfs 。

  • Volumes是在宿主机文件系统的一个路径,默认情况下统一的父路径是 /var/lib/docker/volumes/,非 Docker 进程不能修改这个路径下面的文件,所以说 Volumes 是容器数据持久存储数据最安全的一种方式。
  • Bind mounts 可以将文件存储在宿主机文件系统的任何路径,所以非 Docker进程也可以对其进行修改,存在潜在的安全风险。
  • Tmpfs 只存储在宿主机的内存中,不会写入到宿主机文件系统中,不会持久化存储。

文章目录

  • 一、Tmpfs挂载
  • 二、Bind mounts
  • 三、Bind mounts-测试是否正确挂载数据卷
  • 四、Bind mounts-验证只读挂载

本文我们先来介绍其中的两种:Bind mounts与Tmpfs。Volumes 由于相对重要,会单独起一个文章进行说明。

一、Tmpfs挂载

需要再次强调的是tmpfs 挂载是临时的,只存留在容器宿主机的内存中。当容器停止时,tmpfs 挂载文件路径将被删除,在那里写入的文件不会被持久化。

docker run -d \-p 8888:8888 \--tmpfs /tmp \--name spboot  zimug/docker-test:1

学过SpringBoot的同学可能都知道,SpringBoot项目启动之后会在/tmp目录下面解压出tomcat容器,提供web服务。

所以将/tmp目录使用tmpfs方式挂载到宿主机的内存中,不仅场景合适,也会提升springboot项目的运行效率(内存操作)。

二、Bind mounts

其实Bind Mounts挂载数据卷的方式也是大家最常见的一种方式,比如使用-v参数绑定数据卷,其中/root/nginx/html是我们任意指定的一个宿主机磁盘文件目录,这种情况下就是Bind mounts方式挂载数据卷。

-v /root/nginx/html:/usr/share/nginx/html/

除了使用-v参数绑定的方式,还可以使用--mount参数绑定的方式实现Bind mounts数据卷挂载。在--mount参数绑定的方式之前,我们先创建一个宿主机文件路径mkdir -p /root/nginx/html用于做实验 。

docker run -d --name bind-mount-nginx \-p 80:80 \--mount type=bind,source=/root/nginx/html,target=/usr/share/nginx/html/,readonly \nginx:latest

--mount 以键值对的方式传参,比-v提供了更多的选项

  • type=bind表示以Bind mounts方式挂载数据卷
  • source=/root/nginx/html表示宿主机的文件路径
  • target=/usr/share/nginx/html/表示容器的文件路径,宿主机source文件路径挂载到容器的target路径
  • readonly配置参数,表示文件路径采用只读的方式挂载

三、Bind mounts-测试是否正确挂载数据卷

在宿主机 /root/nginx/html目录下新建一个index.html,文件内容如下

<!DOCTYPE html>
<html>
<body><h1>Bind mounts</h1>
</body>
</html>

访问容器宿主机服务器80端口得到如下的响应结果,证明数据卷挂载成功了。

四、Bind mounts-验证只读挂载

--mount中加入一个readonly配置参数,表示文件路径采用只读的方式挂载。即:该路径下的文件可以在宿主机上进行修改,但是容器内的应用程序不能修改该文件。

--mount type=bind,source=/root/nginx/html,target=/usr/share/nginx/html/,readonly

可以通过docker inspect <容器ID或容器名称> 查看数据卷的挂载结果,如下

"Mounts": [{"Type": "bind","Source": "/root/nginx/html","Destination": "/usr/share/nginx/html","Mode": "","RW": false,"Propagation": "rprivate"}
],
  • 数据卷挂载类型是bind(mount bind)
  • 宿主机源路径/root/nginx/html,容器挂载目标路径/usr/share/nginx/html
  • "RW": false表示只读模式,路径内文件不能被容器内程序修改

大家可以通过docker exec -it <容器ID或容器名称> /bin/bash 进入容器内部尝试修改/usr/share/nginx/html路径下的文件,看看能不能修改,相信经过你的验证答案一定是否定的。

可以通过公众号关注我哦,未来更多精彩公众号发布。博主正在进行量化投资方向研究,已经小有成果,有兴趣的小伙伴关注我,不要错过!

【docker系列】docker进行数据挂载的三种模式相关推荐

  1. docker安装redis和数据挂载

    安装redis 友好提示:云服务的redis端口最好换下,可以避免被植入挖矿脚本 由于第一部分的mysql讲解比较详细,redis也是一样的,小编就简单记录一下 拉取镜像 sudo docker pu ...

  2. 深入学习SAP UI5框架代码系列之七:控件数据绑定的三种模式 - One Way, Two Way和OneTime实现原理比较

    这是Jerry 2021年的第 8 篇文章,也是汪子熙公众号总共第 279 篇原创文章. 系列目录 (0) SAP UI5应用开发人员了解UI5框架代码的意义 (1) SAP UI5 module懒加 ...

  3. “数据星河”系列活动—大数据产业中的商业模式创新沙龙共话新未来

    11● July ● 2019 北京 ▲ 沙龙现场 7月11日,数据星河系列活动--大数据产业中的商业模式创新沙龙顺利举行.在大数据强势赋能下,来自不同行业与领域的嘉宾就如何以模式创新迎接未来机遇与挑 ...

  4. Linux下查看磁盘挂载的三种方法

    Linux下查看磁盘挂载的三种方法 2009-06-05 23:17 好久没有更新日志了,呵呵.不是没有要写的东东.实在抽不出时间来写,要准备公司的考试呢,C++考试.已经有七个月没有写C++代码了, ...

  5. mysql double 转 字符串_没想到!在MySQL数据库中的数据有这三种类型!

    MySQL数据库是一个或多个数据列构成二维表,它的每一种数据列都有特定类型,而类型决定MySQL是怎么看待该列数据,如果把整型数值存放到字符类型的列中,MySQL则会把它当成字符串来处理. MySQL ...

  6. 多租户数据隔离的三种方案

    一.多租户在数据存储上存在三种主要的方案,分别是: 1. 独立数据库 这是第一种方案,即一个租户一个数据库,这种方案的用户数据隔离级别最高,安全性最好,但成本较高. 优点: 为不同的租户提供独立的数据 ...

  7. tp-link交换机 TL-SG1024T(T系列)三种模式的选择

    TL-SG1024T主要是为了解决网络克隆.无盘启动慢等问题而设计的,与普通交换机相比,TL-SG1024T多出一个三级滑动硬件开关,有三种可选模式:M1(网络克隆).M2(标准共享).M3(汇聚上联 ...

  8. [ROS2] map_server加载地图文件的三种模式

    map的数据类型 map话题的类型是nav_msgs::msg::OccupancyGrid.使用下面的命令可以查询该类型的数据结构. ros2 interface show nav_msgs/msg ...

  9. 领域驱动设计(DDD):分层架构的三种模式

    DDD DDD(Domain Driven Design,领域驱动设计)作为一种软件开发方法,它可以帮助我们设计高质量的软件模型.在正确实现的情况下,我们通过DDD完成的设计恰恰就是软件的工作方式. ...

最新文章

  1. 两个git库之间迁移_Python 3 迁移怨声载道
  2. 高可用高性能负载均衡软件HAproxy详解指南-第三章:HAproxy实例
  3. 移动端像素概念,viewport,适配
  4. Python列表排序 reverse、sort、sorted 操作方法详解
  5. 记使用WaitGroup时的一个错误
  6. qt客户端连接服务器不响应,qt判断tcp客户端是否连接服务器
  7. HDFS依然是存储的王者
  8. MPI 自定义通用结构和传输
  9. 程序员的脑回路太清奇,就一件衣服跟我叨叨半天
  10. Entity Framework -- 使用类别字段的实体继承关系
  11. PHP版本李白打酒算法
  12. 可更新聚集列存储索引幻想
  13. Notepad++官网下载
  14. js 调用摄像头拍照
  15. MAC常用终端命令行
  16. Linux【操作系统】
  17. 几何画板椭圆九种画法_椭圆的画法几何画板的动画演示
  18. Rational Rose 2016
  19. python查找相似图片
  20. maven项目报error in opening zip file.

热门文章

  1. 千元打造双千兆4盘位16核32线程家庭nas服务器,满足你的家庭 all in one方案!
  2. jenkins日程表
  3. 【Rust日报】 2019-06-04:「心得」如何改进一个棘手的并发接口
  4. c语言程序设计足球,使用C语言计算与模拟足球射门.doc
  5. 4款苹果耳机平价替代品,买不起苹果耳机买替代!
  6. Socket通信——同步通信
  7. 小学计算机画线反思,小学四年级数学上册《画平行线》教学反思
  8. 小程序微信支付实践案例-JAVA
  9. Quartus使用逻辑
  10. 1060显卡支持dx12吗_【茶茶】显卡人均7nm?AMD RX 5500XT测试报告