详解docker进行数据挂载的三种模式

 更新时间:2022年05月27日 09:11:23   作者:字母哥哥  
Docker 提供了三种方式将数据从宿主机挂载到 Docker容器中: volumes、bind mounts、tmpfs ,这篇文章主要介绍了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 挂载文件路径将被删除,在那里写入的文件不会被持久化。

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

相关文章

  • docker swarm快速部署redis分布式集群的详细过程

    docker swarm快速部署redis分布式集群的详细过程

    这篇文章主要介绍了docker swarm快速部署redis分布式集群,只需要通过docker-compose.yml文件和一个启动命令就完成redis分布式部署的方式,让其分别部署在不同机器上,并实现集群搭建,需要的朋友可以参考下
    2022-10-10
  • WIN10下安装Docker的教程

    WIN10下安装Docker的教程

    本文通过图文并茂的形式给大家介绍了win10下安装Docker的教程,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-10-10
  • docker-compose up -d和docker-compose up --build的区别

    docker-compose up -d和docker-compose up -

    本文主要介绍了docker-compose up -d和docker-compose up --build的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • docker部署mysql问题

    docker部署mysql问题

    这篇文章主要介绍了docker部署mysql问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • docker搭建redis哨兵集群并且整合springboot的实现

    docker搭建redis哨兵集群并且整合springboot的实现

    本文主要介绍了docker搭建redis哨兵集群并且整合springboot的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • 解决docker挂载的目录无法读写问题

    解决docker挂载的目录无法读写问题

    这篇文章主要介绍了解决docker挂载的目录无法读写问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 使用Dockerfile脚本定制镜像的方法

    使用Dockerfile脚本定制镜像的方法

    Dockerfile 是⼀个⽂本⽂件,其内包含了⼀条条的指令(Instruction),每⼀条指令构建⼀层,因此每⼀条指令的内容,就是描述该层应当如何构建,这篇文章主要介绍了使用Dockerfile脚本定制镜像,需要的朋友可以参考下
    2022-07-07
  • 什么是docker Docker入门教程第一篇

    什么是docker Docker入门教程第一篇

    什么是docker?这篇文章主要为大家分享了Docker简介与入门教程第一篇,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 解决docker run 或者 docker restart 启动镜像就自动退出

    解决docker run 或者 docker restart 启动镜像就自动退出

    这篇文章主要介绍了解决docker run 或者 docker restart 启动镜像就自动退出的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Docker跨主机网络(overlay)的实现

    Docker跨主机网络(overlay)的实现

    这篇文章主要介绍了Docker跨主机网络(overlay)的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12

最新评论