Docker绑定挂载使用手册

news2024/11/15 15:43:57

目录

目标

官方文档

绑定挂挂载(Bind mounts)

简介

基本创建方法

控制读写权限(默认有读写权限)

为什么绑定挂载不适合做数据库持久化

为什么绑定挂载更适合做热部署

临时挂载(tmpfs mounts)

简介

基本创建方法

验证临时挂载的生命周期

最佳实践

数据卷&绑定挂载&临时挂载的区别


目标

        掌握绑定挂载、临时挂载的常用命令。理解绑定挂载、数据卷、临时挂载之间的区别。


官方文档

Bind mounts


绑定挂挂载(Bind mounts)

简介

官方定义

Bind mounts have been around since the early days of Docker. Bind mounts have limited functionality compared to volumes. When you use a bind mount, a file or directory on the host machine is mounted into a container. The file or directory is referenced by its absolute path on the host machine. By contrast, when you use a volume, a new directory is created within Docker's storage directory on the host machine, and Docker manages that directory's contents.

The file or directory does not need to exist on the Docker host already. It is created on demand if it does not yet exist. Bind mounts are very performant, but they rely on the host machine's filesystem having a specific directory structure available. If you are developing new Docker applications, consider using named volumes instead. You can't use Docker CLI commands to directly manage bind mounts.

官方示意图 

翻译

  1. 与数据卷相比,绑定挂在功能有限。
  2. 绑定挂载要用主机上的绝对目录引用,如果目录不存在,则会按需求创建。而使用数据卷时,不需要引用主机上的绝对目录,Docker会创建目录并管理这个目录中的内容。
  3. 绑定挂载性能高,但推荐优先考虑使用数据卷,因为绑定挂载依赖于主机文件系统中存在特定的目录结构(官方的示意图很好地体现了这一点)。
  4. Docker命令不能直接管理绑定挂载。

基本创建方法

方法一:用mount参数创建。前提条件:引用的主机目录必须存在,否则报错。

#source:主机目录
#target:容器目录
#type:挂载类型为绑定
docker run -d -p 8848:80 --name nginx --mount type=bind,source=/opt/data/,target=/usr/share/nginx/html nginx

方法二:用v参数创建。如果主机目录不存在则会自动创建目录。

#-v前面的目录表示主机目录,如果这个目录不存在则会自动创建。
#-v后面的目录表示容器目录
docker run -d -p 5601:80 --name nginx2 -v /opt/data/html:/usr/share/nginx/html nginx


控制读写权限(默认有读写权限)

方法一:用mount参数创建。

#readonly:创建只读权限
docker run -d -p 8848:80 --name nginx --mount type=bind,source=/opt/data/,target=/usr/share/nginx/html,readonly nginx

#readonly=true:创建只读权限
docker run -d -p 8848:80 --name nginx --mount type=bind,source=/opt/data/,target=/usr/share/nginx/html,readonly=true nginx

#readonly=false:创建读写权限
docker run -d -p 8848:80 --name nginx --mount type=bind,source=/opt/data/,target=/usr/share/nginx/html,readonly=false nginx

方法二:用v参数创建。

#rw:创建读写权限
docker run -d -p 8848:80 --name nginx -v /opt/data/html:/usr/share/nginx/html:rw nginx
#ro:创建只读权限
docker run -d -p 8848:80 --name nginx -v /opt/data/html:/usr/share/nginx/html:ro nginx

验证:进入容器内部,尝试修改被映射的目录中的内容。发现修改失败,说明只读挂载生效。


为什么绑定挂载不适合做数据库持久化

  1. 绑定挂载不支持跨容器共享,而数据卷支持。
  2. 绑定挂载直接暴露宿主机文件系统,使得容器和宿主机之间的隔离性降低,可能导致数据泄漏或安全隐患。数据卷更好地支持容器的隔离性和数据的独立性。容器与宿主机的文件系统的隔离,使得数据管理更为简单和安全。
  3. 绑定挂载依赖主机文件系统,需要关注主机文件的权限、存储空间等问题。
  4. 数据卷提供了更为丰富的数据管理功能,如自动备份、恢复、数据迁移等,这些功能在绑定挂载中是无法实现的。

为什么绑定挂载更适合做热部署

        两者都可以实现热部署,但是:

  1. 绑定挂载将主机目录直接映射到容器的文件中,使得修改主机文件可以实时更新到容器文件中。
  2. 数据卷侧重安全和持久化,实时同步不如绑定挂载优秀。数据卷中的文件进行修改甚至可能需要手动操作来确保变更被及时应用到容器中。

临时挂载(tmpfs mounts)

简介

        官方将没有将临时挂载归为绑定挂载之类,而是将其与绑定挂载并列。虽然他们之间的命令只在type值上有所区别,但是数据存储方式完全不同,这在官方文档和示意图中都能有明确的说明。

官方文档

As opposed to volumes and bind mounts, a tmpfs mount is temporary, and only persisted in the host memory. When the container stops, the tmpfs mount is removed, and files written there won't be persisted.

翻译
        与卷和绑定挂载不同,tmpfs挂载是临时的,只持久化在主机内存中。当容器停止时,tmpfs挂载将被删除,写入其中的文件将不会被持久化。 


基本创建方法

#这三条的命令的区别在于指定容器目录使用的参数不同,实际上它们是等价的。
docker run -d -p 8848:80 --name nginx --mount type=tmpfs,destination=/usr/share/nginx/html nginx
docker run -d -p 5601:80 --name nginx2 --mount type=tmpfs,dst=/usr/share/nginx/html nginx
docker run -d -p 3306:80 --name nginx3 --mount type=tmpfs,target=/usr/share/nginx/html nginx


验证临时挂载的生命周期

第一步:进入Nginx容器内部,修改Nginx的主页,并访问主页。

docker exec -it nginx2 /bin/bash
cd /usr/share/nginx/html/
echo '<h1>111</h1>' > index.html

第二步:重启容器,再次访问Nginx首页,发现首页已经没有了。


最佳实践

注意

  1. 临时挂载的数据存储在内存中,如果容器创建期间没有给设定内存阈值,则该容器会有耗尽服务器内存的风险。所以我们如果使用临时挂载,最好在创建容器时设定容器内存阈值和挂载内存阈值。
  2. 容器内存包含进程、各种文件系统、挂载内存。比如设定容器内存为100兆,挂载内存20兆,则容器中其他消耗内存的操作可用内存是80兆。

案例

        给Nginx容器的首页目录设定20兆内存阈值,容器总内存设定100兆内存阈值。

查看容器内存使用情况

查看挂载内存

#进入容器后执行查看内存的命令
df -h

        如图所示,挂载内存使用了4K。


数据卷&绑定挂载&临时挂载的区别

特性/方式绑定挂载(Bind Mount)数据卷(Volume)临时挂载(Tmpfs Mount)
适用场景开发热部署、日志文件系统。侧重开发和测试阶段。数据库持久化、MQ中间件。侧重生产阶段。铭感数据比如密码、认证数据、密钥,避免写入到磁盘中
数据存储位置宿主机指定目录Docker 管理的卷位置内存(RAM)
数据持久化依赖宿主机目录数据卷的具体存储路径由Docker决定,通常位于宿主机的Docker文件系统中(如 /var/lib/docker/volumes/),所以不依赖于宿主机的直接目录结构。数据不持久化,容器停止后丢失。
跨容器共享不支持(除非使用同一宿主机目录)支持跨容器共享不支持

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2073768.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS中的元素布局与定位详细说明

1、前言 在CSS开发中&#xff0c;很重要的一个工作就是根据UI设计稿&#xff0c;进行元素的布局与定位&#xff0c;使得元素&#xff08;比如某一段文本、按钮、图片等&#xff09;显示在页面正确的位置。本文就元素的布局与定位方面&#xff0c;做一些讲解和说明。 2、元素的…

PHP易支付系统,支付系统源码下载,已测试,带多个支付接口

易支付系统源码&#xff0c;已测试&#xff0c;功能齐全&#xff0c;带有多支付接口&#xff0c;站内有对应的视频教程&#xff0c;详细教程 搭建出来的网站前端和后台还是比较美观的 PHP全开源易支付系统源码&#xff0c;一键安装版 搭建环境&#xff1a;PHP 5.4 以上 推荐7…

数学基础(九)

一、相关分析 相关分析&#xff1a; 衡量事物之间或称变量之间线性相关的强弱&#xff0c;并适当的统计指标表示出来的过程 相关系数&#xff1a; 连续变量的相关分析&#xff1a; 连续变量即数据变量&#xff0c;它的取值之间可以比较大小&#xff0c;可以用加减法计算出差…

Google Colab快速使用

Google Colab快速使用 1. 引言2. Jupyter笔记本的创建3. 上传代码和数据集4. Colab常规指令 1. 引言 Google Colab是谷歌提供的免费Jupyter&#xff0c;很类似于Linux系统这些在终端界面操纵的感觉&#xff0c;不需要深度学习环境配置就可以使用&#xff0c;完全基于云端运行。…

【celery-2】python-Django发送邮件-短信-钉钉通知

一 Python发送邮件 1.1 使用SMTP模块发送邮件 import smtplib from email.mime.text import MIMEText from email.header import Headermsg_from xxxqq.com # 发送方邮箱 passwd xxx # 填入发送方邮箱的授权码(填入自己的授权码&#xff0c;相当于邮箱密码) msg_to [xxx…

两种方式实现图片标记

效果图 第一种&#xff1a;通过动态添加dom元素实现标记 代码如下 // index.tsx import React from "react"; import "./index.less";export default function index() {const parentRef React.useRef<any>(null);const ulRef React.useRef<a…

网站技术分析必备插件Wappalyzer Chrome介绍

引言 在日常的开发过程中&#xff0c;开发者们经常会对访问的某些网站使用了哪些技术感到好奇。无论是网页的前端框架、后台的编程语言&#xff0c;还是数据库的类型&#xff0c;这些信息对于开发者优化自己的网站或者了解行业趋势都非常有用。然而&#xff0c;直接从浏览器获…

LLM开发之自动编码系统实战开发(一)-- MiniRBAC 集成

文章目录 前言&#x1f387;MiniRBAC部署启动日志修改更换Mysql创建数据库数据库连接修改查询 Next ✨ 前言&#x1f387; 首先这个系统呢&#xff0c;俺们目前是还没有做好的&#xff0c;但是相关的技术积累我们是完全没有问题的。当然这个系统其实将是我们这个项目&#xff…

Android 消息机制Handler完全解析(一)

提到Handler相信即使你是刚入行的android开发也会用过&#xff0c;可能你会觉得很简单&#xff0c;但是Handler中包含的内容真的不是你理解的那么简单&#xff0c;可能有些工作3-5年的同学也没有对其有很深入的了解。但Handler在android中的地位非常重要&#xff0c;并且几乎是…

图解Kafka | 5张图讲透Kafka 消费者交付语义

Kafka 消费者交付语义指的是 Kafka 消费者在处理消息时如何保证消息的可靠性和一致性。这涉及到消息是否被丢失、重复处理或者按顺序消费。 Kafka消费者交付语义有三种&#xff0c;即&#xff1a; 最多一次至少一次精确一次 当消费者组/消费者从 Kafka 消费数据时&#xff0…

昂科烧录器支持Airoha达发科技的蓝牙音频芯片AB1568

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中Airoha达发科技的蓝牙音频芯片AB1568已经被昂科的通用烧录平台AP8000所支持。 AB1568是一款获得蓝牙5.3和LE音频认证的单芯片解决方案&#xff0c;包含一个ARM Cortex-M4F应用…

香蕉梨:自然的甜蜜宝藏

在水果的缤纷世界里&#xff0c;有一种独特的存在&#xff0c;它融合了香蕉的软糯与梨子的清甜&#xff0c;那便是令人惊艳的香蕉梨。 食家巷香蕉梨&#xff0c;外形圆润可爱&#xff0c;色泽金黄中带着一抹清新的嫩绿&#xff0c;宛如大自然精心雕琢的艺术品。当你拿起一个香蕉…

使用Java进行中小学违规教育培训数据采集实践-以某城市为例

目录 前言 一、违规教育信息 1、内容管理 2、转换后的内容 二、数据库设计 1、空间数据库 三、字符地址位置转换空间信息 1、实现时序图 2、后台实体类的设计与实现 3、数据持久化操作 四、总结 前言 时间来到2024年8月24日&#xff0c;时间过得很快&#xff0c;2024…

PowerShell | git log 中文乱码问题解决

总结一下: 乱码核心问题就是对不上编码.改成对应编码即可. 明白‌LESSCHARSET环境变量‌是用来设置less命令的字符集编码的。当在命令行中使用less命令查看文件时&#xff0c;如果文件包含非ASCII字符&#xff08;如中文&#xff09;&#xff0c;可能会出现乱码问题。通过设置…

SpringBoot+Vue实现大文件上传(断点续传-前端控制)

SpringBootVue实现大文件上传&#xff08;断点续传&#xff09; 1 环境 SpringBoot 3.2.1&#xff0c;Vue 2&#xff0c;ElementUI 2 问题 在前一篇文章&#xff0c;我们写了分片上传来实现大文件上传&#xff0c;存在一个问题就是&#xff0c;中间失败的话需要重新上传&#…

QT WIN11 FluentUI APP开发

代码 import QtQuick import QtQuick.Controls import FluentUIItem {property bool autoPlay: trueproperty int loopTime: 2000property var modelproperty Component delegateproperty bool showIndicator: trueproperty int indicatorGravity : Qt.AlignBottom | Qt.Align…

【MySQL】一文带你理清<行级锁>(行锁,间隙锁,临键锁)

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

STM32(六):定时器——输出比较实验

PWM驱动呼吸灯 源码&#xff1a; #include "stm32f10x.h" // Device headervoid PWM_Init(void) {RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//开启时钟TIM_InternalClockConfig(TIM2);//选择时基单元的时钟TIM_TimeBaseInitTypeDef TI…

怎么管控终端电脑上的移动端口

管控终端电脑上的移动端口&#xff0c;尤其是USB等移动端口&#xff0c;是确保企业数据安全和提升网络管理效率的重要手段。 一、使用注册表编辑器禁用USB端口&#xff08;适用于Windows系统&#xff09; 打开注册表编辑器&#xff1a; 同时按下“WinR”组合键&#xff0c;打…

【C++从小白到大牛】C++智能指针的使用、原理和分类

目录 1、我们为什么需要智能指针&#xff1f; 2、内存泄露 2.1 什么是内存泄漏&#xff0c;内存泄漏的危害 2.2如何避免内存泄漏 总结一下: 3.智能指针的使用及原理 3.1 RAII 3.2关于深拷贝和浅拷贝更深层次的理解&#xff1a; 3.3 std::auto_ptr 3.4 std::unique_pt…