Docker绑定挂载使用手册

news/2024/9/19 18:37:49/ 标签: docker, 容器, 运维

目录

目标

官方文档

绑定挂挂载(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.ppmy.cn/news/1516117.html

相关文章

开发者社区✖️外滩大会「创新者舞台」——《特斯拉,不止于车》

备受瞩目的“2024 Inclusion外滩大会”将于2024年9月5日至7日在上海黄浦世博园区盛大开幕。 外滩大会云集了蚂蚁集团、清华大学、复旦大学、上海交通大学、同济大学、浙江大学、上海报业集团、外滩投资集团等在学术界和产业界享有科技盛誉的组织。 大会将延续 “科技创造可持续…

Cambridge Pixel推出综合安防软件平台VSD-C2

Cambridge Pixel公司专注于雷达数据处理与目标跟踪技术&#xff0c;雷达显控软件。从2012年以来&#xff0c;Cambridge Pixel公司一直专注于开发以雷达和摄像头为核心的联动安防产品。为此先后推出了VSD, RadarWatch, Alarm Server, Camera Manager等一系列产品&#xff0c;应用…

【计算机网络】名词解释--网络专有名词详解

在网络通信中&#xff0c;有许多专业术语和概念&#xff0c;它们共同构成了网络通信的基础。以下是一些常见的网络术语及其定义和相互之间的关系&#xff1a; 一、网络基础 1.1 电路交换&#xff1a;电路交换是一种在数据传输前建立专用通信路径的通信方式。在通信开始前&…

鹭鹰优化算法SBOA优化RBF神经网络的扩散速度实现多数入多输出数据预测,可以更改数据集(MATLAB代码)

一、鹭鹰优化算法介绍 鹭鹰优化算法&#xff08;Secretary Bird Optimization Algorithm, SBOA&#xff09;是一种新型的元启发式算法&#xff0c;它于2024年4月由Youfa Fu等人提出&#xff0c;并发表在SCI人工智能二区顶刊《Artificial Intelligence Review》上。该算法的灵感…

鸿蒙界面开发(四):支付宝首页开发实战

利用了层叠布局和一个scroll滚动组件。 包括底部导航、顶部导航、主体的滚动窗口。 主体的滚动窗口又包括一个快捷导航栏和一个导航窗口、以及主体部分 import text from ohos.graphics.text;Entry Component struct Index {State message: string Hello World;//支付宝首页b…

【Electron】桌面应用开发快速入门到打包Windows应用程序

electron 实现桌面应用开发快速入门到打包Windows应用程序 一、基本介绍 ‌‌Electron 是一个使用‌ JavaScript、‌HTML 和‌ CSS 构建桌面应用程序的框架。它通过将‌Chromium和‌Node.js嵌入到其二进制文件中&#xff0c;允许开发者使用JavaScript代码库创建跨平台的桌面应…

JDK、JRE、JVM之间的关系

三者为包含关系&#xff0c;如下图&#xff1a; JDKjava development kit&#xff08;Java开发工具包&#xff09;JDK JRE java开发工具&#xff08;Java&#xff0c; javac&#xff0c;javadoc&#xff0c;javap等&#xff09;&#xff0c;是用于java开发的最小环境。JREj…

【机器学习】 7. 梯度下降法,随机梯度下降法SGD,Mini-batch SGD

梯度下降法,随机梯度下降法SGD,Mini-batch SGD 梯度下降法凸函数(convex)和非凸函数梯度更新方向选择步长的选择 随机梯度下降SGD(Stochastic Gradient Descent)梯度下降法&#xff1a;SGD: Mini-batch SGD 梯度下降法 从一个随机点开始决定下降方向&#xff08;重要&#xff…

【docker】使用github action来自动发布项目到dockerhub

本文首发于 ❄️慕雪的寒舍 使用github action来自动发布项目到dockerhub。参考 https://msdemt.github.io/p/github-action-build-docker/ 博客 1.准备工作 1.1 dockerhub token https://hub.docker.com/settings/security 登录dockerhub&#xff0c;在用户的account settin…

Ubuntu清除缓存的方法--防止系统崩溃

前情提要&#xff1a;虚拟机出现过好几次的崩溃&#xff0c;终于同事发给了一个可以清除缓存的 1&#xff09;崩溃1&#xff1a;之前将虚拟机放置在某盘中&#xff0c;该盘后续一直有别的东西存入&#xff0c;导致ubuntu直接打不开&#xff0c;后续就将虚拟机直接放在电脑单独…

以简单的例子从头开始建spring boot web多模块项目(五)-thymeleaf引擎

继续向里面加&#xff0c;这次是引入thymeleaf渲染引擎。 使用这个引擎的很多&#xff0c;主要是以下几个优点&#xff1a; Thymeleaf是适用于Web和独立环境的现代服务器端Java模板引擎。Thymeleaf的主要目标是为您的开发工作流程带来优雅的自然模板 -HTML可以在浏览器中正确显…

如何安装和高级 AMP for WP

当 WordPress 是支持 AMP 的 WEB 站点时&#xff0c;主要通过两个插件支持 AMP。 一个是AMP插件。 这个插件也参与谷歌的开发&#xff0c;并被确认为AMP项目的官方插件。 我最初也安装了这个AMP插件&#xff0c;但我不知道是否能够共存的常规网站和AMP兼容网站&#xff0c;很难…

【功能自动化】WebTours实现订票流程并设置检查点

环境搭建&#xff1a; 1.需要配置WebTours网站 代码实现&#xff1a; # 导入包 from selenium import webdriver from selenium.webdriver.support.select import Select from time import sleep# 打开浏览器 driver webdriver.Chrome() driver.get("http://127.0.0.…

Python新手必看!这个模块让Python的重试更加便捷灵活!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 Python重试 📒📝 安装📝 使用📝 进阶使用⚓️ 相关链接 ⚓️📖 介绍 📖 在Python编程中,网络请求、数据库操作或任何可能因外部因素而失败的场景中,错误重试显得尤为重要。它能有效减少因暂时性问题导致的程序崩溃…

java接口 controller层接收list集合传参,postman 调用接口时required parameter XXX is not present

开发过程中开发一个java接口 controller层接收list集合传参&#xff0c;然后postman调用一直不成功&#xff0c;报错 使用RequestParam方式&#xff0c;如果postman 调用接口时报错required parameter XXX is not present 可能是&#xff08;value“items”&#xff09;跟你输…

理解与推导贝叶斯滤波算法

很多时候一些算法看起来极其复杂,极其难懂,不是因为我们愚不可及,而是因为我们看到的是别人省略过很多步骤和脑海中思考过的思路最后呈现出来的公式和文字,而好的博客就应该尽量还原这些思考过程及省略掉的步骤。 像卡尔曼滤波(Kalman filters)、粒子滤波(Particle filt…

七、Centos安装LDAP--Docker版--已失败

参考博客&#xff1a; docker 安装 OpenLDAP 及 LdapAdmin桌面版、页面版(osixia/openldap)_docker安装ldap-CSDN博客 LDAP使用docker安装部署与使用_memberof ldap docker-CSDN博客 目录 一、安装Docker Docker基本使用 管理镜像 二、拉取LDAP镜像 配置docker国内的镜像…

Android笔试面试题AI答之Kotlin常见考点总结

Kotlin面试题主要涵盖了Kotlin语言的基础、特性、高级用法以及与其他编程语言的比较等多个方面。以下是Kotlin常见面试考点的总结&#xff1a; Kotlin基础&#xff1a; 定义与特性&#xff1a;简述Kotlin是什么&#xff0c;以及它的主要特性&#xff0c;如空安全、扩展函数、协…

3.5mm耳机插头制作手机内录线电路图

1.背景 无人直播或录屏直播手机mic会对外界声音的录入&#xff0c;而且很嘈杂。 2.实现功能 手机酷狗播放音频&#xff0c;同时手机内打开录音软件录音&#xff0c;同一台手机操作。 3.电路图 接线分为2种&#xff0c;国标和美标&#xff0c;自己尝试&#xff0c;肯定有一…

OpenCV几何图像变换(5)旋转和缩放计算函数getRotationMatrix2D()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算二维旋转的仿射矩阵。 该函数计算以下矩阵&#xff1a; [ α β ( 1 − α ) ⋅ center.x − β ⋅ center.y − β α β ⋅ center.x ( …