详解docker进行数据挂载的三种模式
目录
- 一、Tmpfs挂载
- 二、Bind mounts
- 三、Bind mounts-测试是否正确挂载数据卷
- 四、Bind mounts-验证只读挂载
Docker 提供了三种方式将数据从宿主机挂载到 Docker容器中: volumes、bind mounts、tmpfs 。
Volumes是在宿主机文件系统的一个路径,默认情况下统一的父路径是 /var/lib/docker/volumes/,非 Docker 进程不能修改这个路径下面的文件,所以说 Volumes 是容器数据持久存储数据最安全的一种方式。Bind mounts 可以将文件存储在宿主机文件系统的任何路径,所以非 Docker进程也可以对其进行修改,存在潜在的安全风险。Tmpfs 只存储在宿主机的内存中,不会写入到宿主机文件系统中,不会持久化存储。
本文我们先来介绍其中的两种: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,文件内容如下
Bind mounts
访问容器宿主机服务器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创建和运行跨平台的容器化mssql数据库
栏 目:其它服务器
本文标题:详解docker进行数据挂载的三种模式
本文地址:https://zz.feitang.co/server/31030.html
您可能感兴趣的文章
- 01-07Tomcat部署Bolo动态博客
- 01-07图文详解nginx日志切割的实现
- 01-07如何解决swarm docker 端口不通问题
- 01-07详解nginx location指令
- 01-07如何解决docker http 500错误问题
- 01-07windows server 2008安装配置DNS服务器
- 01-07Linux上搭载Nginx负载均衡配置使用案例详解
- 01-07NGINX 权限控制文件预览和下载的实现原理
- 01-07Nginx防盗链与服务优化配置的全过程
- 01-07使用 Apache 反向代理的设置技巧


阅读排行
推荐教程
- 12-23linux中ftp无法访问怎么办
- 12-11docker存储目录迁移示例教程
- 12-10docker start启动容器后仍然exit状态的解决
- 12-10Linux下如何安装Logstash
- 01-05Shell脚本去重的几种方法实例
- 12-22kvm虚拟机配置NAT端口转发的实现方法
- 12-19Zabbix SAML SSO 登录绕过漏洞的操作流程
- 12-15Docker-Compose搭建Spark集群的实现方法
- 12-14Docker Desktop无法正常启动解决(failed to start...)
- 12-14k8s 与docker空间使用分析与清理方法




