小知识:详解docker进行数据挂载的三种模式

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

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

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

一、Tmpfs挂载

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

?
1
2
3
4
docker run -d \
-p 8888:8888 \
–tmpfs /tmp \
–name spboot  zimug/docker-test:1

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

%小知识:详解docker进行数据挂载的三种模式-猿站网-插图

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

二、Bind mounts

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

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

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

?
1
2
3
4
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,文件内容如下

?
1
2
3
4
5
6
<!DOCTYPE html>
<html>
<body>
<h1>Bind mounts</h1>
</body>
</html>

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

%小知识:详解docker进行数据挂载的三种模式-1猿站网-插图

四、Bind mounts-验证只读挂载

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

?
1
–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数据挂载内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/hanxiaotongtong/article/details/124996442

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:基于云服务MRS构建DolphinScheduler2调度系统的案例详解

2023-3-6 16:30:45

建站知识

小知识:Harbor高可用配置及仓库使用介绍

2023-3-6 16:37:27

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索