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

目录
  • 一、Tmpfs挂载
  • 二、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,文件内容如下

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

(0)

相关推荐

  • docker run -v 挂载数据卷异常,容器状态一直是restarting的解决

    出现的问题: docker run 加上 -v 参数之后,容器就一直是 restarting 状态,去掉 -v 参数就可以正常运行 查找问题: 使用 docker logs 'containerId' 这个containerId,就是docker run之后返回的containerId 可以看到,是权限拒绝的问题 解决问题: docker run时加上参数 :加上--privileged=true 例如: docker run -dit -e MYSQL_ROOT_PASSWORD=123456

  • docker挂载本地目录和数据卷容器操作

    1.docker挂载本地目录 docker可以支持把一个宿主机上的目录挂载到镜像里. 交互模式运行 docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash 后台运行 docker run -d -v /home/dock/Downloads:/usr/Downloads --name ubuntu1 ubuntu64 通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径. 现在镜像内就

  • 使用Dockerfile实现数据卷的挂载问题(推荐)

    大家好,我们今天分享使用Dockerfile来实现数据卷的挂载 首先呢,要了解一下什么是Dockerfile Dockerfile就是 一个可以用来构建镜像的文件,可以理解为一个脚本文件 可以通过这个脚本文件自定义生成一个我们想要的镜像,镜像都是一层一层的,里面的每一条命令就是一层 创建一个目录 root@localhost home]# mkdir docker-vl2 编辑这样这样的一个文件 root@localhost docker-vl2]# vim dockerfile01 FROM

  • Docker搭建MySQL并挂载数据的全过程

    目录 一.Docker搭建MySQL并挂载数据 二.挂载是否生效 其他 总结 记录 Docker 搭建 MySQL 并挂载数据过程,搭建过程参考自 Docker Hub. 一.Docker搭建MySQL并挂载数据 1.首先安装好 Docker,不知道怎么安装的可以看下 CentOS7安装Docker初体验. 2.下载 MySQL5.7 镜像. docker pull mysql:5.7 3.创建容器并挂载数据. docker run -d --restart=always --name mysq

  • 浅谈Docker 容器数据卷挂载小结

    为了更直观了解数据卷挂载的操作,做个实验一一验证数据卷挂载的各种情况. 情况一.本地不存在文件挂载到容器存在文件 首先是当本地不存在该文件,而容器内存在该文件的情况,尝试把不存在的文件挂载到存在该文件的容器中.以一个 Alpine 镜像为例,这里把一个修改后的 Alpine 镜像打了新标签,叫做 volume_test: # 本地目录不存在 test 文件. $ docker run --name=test -v ~/test.txt:/etc/hosts -d volume_test 0cba

  • docker 挂载MySQL实现数据持久化的实现

    目录 环境配置 MySQL数据持久化 注意事项 环境配置 本地操作系统:Win10虚拟机的操作系统:CentOS Stream 8已安装docker,可以参考详细安装教程 MySQL数据持久化 在上一节中我们已实现docker启动多个MySQL服务,当误删docker之后,docker里面运行的数据将无法保存.为了能保存docker里面运行的数据,需要使用docker挂载功能,将docker里面的数据保存在系统的本地目录,即使删掉docker仍能保存之前的数据.挂载MySQL实现数据持久化可以执

  • Docker搭建Redis5.0并挂载数据

    目录 一.简单挂载持久化数据 二.通过DockerFile构建镜像,指定配置文件启动 记录 Docker 搭建 Redis5.0 并挂载数据过程,搭建参考自 Docker Hub 一.简单挂载持久化数据 docker run -d -p 6379:6379 --name redis \ -v /itwxe/dockerData/redis/data:/data \ redis:5.0.8 redis-server --appendonly yes 这样仅仅是挂载了数据,Redis 没有密码等配置

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

    目录 一.Tmpfs挂载 二.Bind mounts 四.Bind mounts-验证只读挂载 Docker 提供了三种方式将数据从宿主机挂载到 Docker容器中: volumes.bind mounts.tmpfs . Volumes是在宿主机文件系统的一个路径,默认情况下统一的父路径是 /var/lib/docker/volumes/,非 Docker 进程不能修改这个路径下面的文件,所以说 Volumes 是容器数据持久存储数据最安全的一种方式.Bind mounts 可以将文件存储在宿

  • 关于ZeroMQ 三种模式python3实现方式

    ZeroMQ是一个消息队列网络库,实现网络常用技术封装.在C/S中实现了三种模式,这段时间用python简单实现了一下,感觉python虽然灵活.但是数据处理不如C++自由灵活. Request-Reply模式: 客户端在请求后,服务端必须回响应 server: # -*-coding:utf-8 -*- import zmq context = zmq.Context() socket = context.socket(zmq.REP) socket.bind("tcp://*:5555&qu

  • 脚本安需导入(装载)的三种模式的对比

    何谓安需装载?     脚本程序一般都是下载后执行,当脚本库非常庞大时,一次性下载起来非常费时,传统的解决方式是,按功能模块把脚本写在不同的文件中,页面上手动加入 script标签装载指定内容,但是这有一些缺点,类库的使用者需要知道没个脚本之间的关系,顺序要求等等,而不可能要求每个类库使用者都对其非常熟悉,出错的可能性很大.于是很多框架开始支持导入指令,想使用什么一个导入函数就完了,不必一堆堆的script文件,不用小心翼翼的关注着他们的依赖关系. 安需装载的困境:       早期安需装载(即

  • .net MVC 连接数据本地数据库三种方法总结

    .net MVC 连接数据本地数据库三种方法 <appSettings> <add key="webpages:Version" value="2.0.0.0" /> <add key="webpages:Enabled" value="false" /> <add key="PreserveLoginUrl" value="true" />

  • 详解Linux系统三种模式下的简单命令

    i的编辑器: 1.三种模式:底行模式 命令模式 插入模式 命令模式: 1.从命令切换插入模式: i : 光标所在左侧输入 I 光标移动到所在行的最左则    o :光标移动的下一行(新的一行) O:光标移动的上一行(新的一行)    a :光标移动到所在行的右则输入 A:光标移动到所在行的最右则 2.复制:(n代表数字) 行: nyy n>0 单词:nyw n>0 3.粘贴:p 4.撤消到上一步骤:u 5.恢复到上一步: ctrl+r 6.替换: 替换一个字符:r 连续替换    :R 7.定

  • 浅谈.net core 注入中的三种模式:Singleton、Scoped 和 Transient

    从上篇内容不如题的文章<.net core 并发下的线程安全问题>扩展认识.net core注入中的三种模式:Singleton.Scoped 和 Transient 我们都知道在 Startup 的ConfigureServices 可以注入我们想要的服务,那么在注入的时候有三种模式可以选择,那么我们在什么时候选择什么样的模式呢? 在讲注入模式之前,我觉得很有必要了解服务生存期的概念! 服务生存期:ASP.NET Core 提供了一个内置的服务容器 IServiceProvider负责管理服

  • pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异

    使用matplotlib绘图时,在弹出的窗口中默认是有工具栏的,那么这些工具栏是如何定义的呢? 工具栏的三种模式 matplotlib的基础配置由运行时参数(rcParams)控制,导入matplotlib时,加载matplotlibrc文件生成默认运行时参数. 查看matplotlibrc文件可知#toolbar: toolbar2 # {None, toolbar2, toolmanager},即工具栏有三种模式None.toolbar2和toolmanager,其中默认模式为toolbar

  • VMWare网络适配器三种模式实现过程解析

    三种模式 Bridged(桥接模式).NAT(网络地址转换模式).Host-Only(仅主机模式) 在安装好vmware后,在网络连接中会有以下两块虚拟网卡: VMnet1作用于仅主机模式 VMnet8作用于NAT模式 一.桥接模式 桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信.在桥接的作用下,类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以所有桥接下的网卡与网卡都是交换模式的,相互可以访问而不干扰.在桥接

  • Java后端之俯瞰数据接收的三种方式

    目录 一.前言 二.正文部分 第一种方法: 第二种方法: 第三种方法: 三种方法概览图: 一.前言 前面我们说了一些网页表单的功能,现在我们先来讲解数据的传输,如何进行前后端的联系 (建议先看完上篇) 二.正文部分 首先我们要先打开我们idea,如图,在jsp下的<form>也就是问卷的哪里加上action=" ", 这是在给这个弄个地址," "内容是任意的 第二步:在Demo下的Demo类下输入划线内容,只需输入@R看着选到即可回车 第三步:输入下列画

  • 详解mysql数据去重的三种方式

    目录 一.背景 二.数据去重三种方法使用 1.​通过MySQL DISTINCT:去重(过滤重复数据) 2.group by 3.row_number窗口函数 三.总结 一.背景 最近在和系统模块做数据联调,其中有一个需求是将两个角色下的相关数据​对比后将最新的数据返回出去,于是就想到了去重,再次做一个总结. 二.数据去重三种方法使用 1.​通过MySQL DISTINCT:去重(过滤重复数据) ​ 1.1.在使用 mysql SELECT 语句查询数据的时候返回的是所有匹配的行. SELECT

随机推荐