docker容器 - 卷(volume)- 挂载

news2024/11/23 12:55:57

目录

参考文档:Volumes | Docker Documentation

什么是卷(volume)?

什么是挂载,它的作用是什么?

一台机器里的多个容器之间共享数据(使用挂载)

首先我们可以使用最简单的docker cp命令复制文件给容器,来实现跟挂载相似的功能

docker容器挂载文件的命令

docker容器挂载卷(volume)的命令

多台机器之间共享数据(NFS挂载的使用)

可查看参考文档:(45条消息) 搭建NFS服务器_Claylpf的博客-CSDN博客

然后可以直接使用docker容器的卷直接挂载nfs服务器


参考文档:Volumes | Docker Documentation

什么是卷(volume)?

在容器化应用程序开发和部署过程中,卷(Volume)是一个非常常见的概念,它可以将主机文件系统或其他容器的文件系统挂载到容器内部的特定路径上,从而为容器提供额外的持久化存储。因此,容器里卷起到的作用主要有以下几个方面:

  1. 持久化存储:容器中的文件系统是短暂且易变的,当容器被删除后,容器内数据也会随之消失。而通过使用卷,可以将需要持久化的数据存储在卷中,从而保证数据的持久化。

  2. 数据共享:容器化应用程序通常由多个容器组成,这些容器需要分享数据或配置信息。通过使用卷,不同的容器之间可以共享相同的卷,从而实现数据共享

  3. 数据备份:通过使用卷,可以将数据备份到独立的存储设备中,例如网络附加存储(NAS)或云存储等。这有助于防止数据丢失、数据损坏或其他故障,提高了数据的可靠性。

总的来说,卷是容器化应用程序中提供持久化存储和数据共享的关键组件之一,可以提高应用程序的稳定性和可靠性,同时也有助于简化应用程序的开发和管理

 我们可以通过docker inspect查看每个容器对应的卷(volume)(mysq会自带卷,nginx不会,需要我们挂载卷)    

[root@mysql _data]# docker inspect sc-mysql-1 | egrep "volume"  #查找sc-mysql-1容器里对应的vloume卷
                "Type": "volume",
                "Source": "/var/lib/docker/volumes/6167418cb7d0a3dfacef4439f410e1860c088d297cf47aeceaf88d3e56528219/_data",
[root@mysql _data]# 

什么是挂载,它的作用是什么?

在计算机中,挂载(Mount)通常指将一个文件系统(如硬盘分区、光盘或NFS共享)连接到另一个系统的目录树上,使得该文件系统中的文件和目录可以被访问。具体来说,挂载可以将文件系统加入到Linux中的虚拟文件系统树中,使得用户可以使用标准的文件操作命令(如ls、cp、mv等)来访问文件系统中的数据。

在实际应用中,挂载的作用有以下几个方面:

  1. 扩展文件系统:通过将新的文件系统挂载到现有的目录中,可以扩展现有文件系统的容量。

  2. 访问远程文件系统:通过挂载远程文件系统,例如NFS、CIFS/SMB文件共享,可以在本地计算机上访问位于远程计算机上的文件。

  3. 分离文件系统:通过挂载和卸载文件系统,可以将不同的文件系统隔离开来,以便于管理和维护,也可以帮助隔离不同的应用程序或用户之间的文件系统。

  4. 简化文件管理:通过挂载,可以将不同的文件系统组织成一个逻辑文件树,并可以使用标准文件操作命令来访问其中的所有文件和目录,简化了文件管理操作。

总的来说,挂载是计算机中一个非常常见的操作,它可以将不同的文件系统组织成一个逻辑文件树,并将它们与应用程序所使用的目录进行连接,扩展了文件系统的存储能力,并且使得用户可以通过统一的界面来管理和访问文件系统中的数据。

一台机器里的多个容器之间共享数据(使用挂载)

首先我们可以使用最简单的docker cp命令复制文件给容器,来实现跟挂载相似的功能

[root@mysql html]# cat index.html    #创建html文件
welcome to sc web!!!
[root@mysql html]# 

[root@mysql html]# docker cp /html/index.html clay-nginx:/usr/share/nginx/html 将创建的文件复制到容器里的html文件夹里

即可实现跟挂载一样的部分功能

但是它缺少了跟挂载一样的同步功能,当我改变外面的文件时,容器内文件并不会发生同步

因此我们需要使用真正的挂载功能

docker容器挂载文件的命令

-v 指定宿主机里的文件挂载到容器里的路径

[root@mysql ~]# docker run -d -p 8804:80 --name clay-nginx-1 -v /html/:/usr/share/nginx/html nginx
1082079b423b1976eee6d98f1e735fb476c7f743d34803f8acef92c12a55348a
[root@mysql ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND                   CREATED             STATUS             PORTS                                   NAMES
1082079b423b   nginx     "/docker-entrypoint.…"   14 seconds ago      Up 13 seconds      0.0.0.0:8804->80/tcp, :::8804->80/tcp   clay-nginx-1
1d0ab6b389bb   nginx     "/docker-entrypoint.…"   About an hour ago   Up About an hour   0.0.0.0:8803->80/tcp, :::8803->80/tcp   clay-nginx
[root@mysql ~]# 

功能展示

docker容器挂载卷(volume)的命令

下面我们进行卷volume的创建 

[root@mysql html]# docker volume create nginx-web #创建volume卷
nginx-web
[root@mysql html]# docker volume ls  #查看所有卷
DRIVER    VOLUME NAME
local     4c7c035ff15b9b022f6fc875d8303f6286cf61d8e89ea1692996760169393f1e
local     6167418cb7d0a3dfacef4439f410e1860c088d297cf47aeceaf88d3e56528219
local     e129efa82af7232ec5cdfd9f1ebb5e2ab35be29216166551aefe7d322b0309bf
local     nginx-web
[root@mysql html]# 

[root@mysql html]# docker volume inspect nginx-web   #查看卷的详细信息
[
    {
        "CreatedAt": "2023-04-16T08:41:37+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/nginx-web/_data",
        "Name": "nginx-web",
        "Options": null,
        "Scope": "local"
    }
]
[root@mysql html]# 

我们在卷里创建一个html文件,用于挂载使用

[root@mysql html]# cd /var/lib/docker/volumes/nginx-web/  
[root@mysql nginx-web]# ls
_data
[root@mysql nginx-web]# cd _data/            #进入卷里保存数据的地方
[root@mysql _data]# ls
[root@mysql _data]# vim index.html
[root@mysql _data]# cat index.html 
welcome to sc study!
[root@mysql _data]# 

对卷进行挂载

[root@mysql ~]# docker run -d -p 8805:80 --name clay-nginx-2 -v nginx-web:/usr/share/nginx/html nginx         #对nginx-web卷进行挂载处理
c917e155a0fba24971a94b72da65b1e2878a621790ca686e70150a6bb41712ef
[root@mysql ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND                   CREATED             STATUS             PORTS                                   NAMES
c917e155a0fb   nginx     "/docker-entrypoint.…"   11 seconds ago      Up 10 seconds      0.0.0.0:8805->80/tcp, :::8805->80/tcp   clay-nginx-2
1082079b423b   nginx     "/docker-entrypoint.…"   21 minutes ago      Up 21 minutes      0.0.0.0:8804->80/tcp, :::8804->80/tcp   clay-nginx-1
1d0ab6b389bb   nginx     "/docker-entrypoint.…"   About an hour ago   Up About an hour   0.0.0.0:8803->80/tcp, :::8803->80/tcp   clay-nginx
[root@mysql ~]# 

查看效果

成功完成对卷的挂载

当然其他的容器,也可以挂载相同的卷,一个卷可以跟无数的容器挂载,因此可以使不同的容器看到一样的东西,实现了数据的共享

当然我们可以使用--mount来挂载文件

多台机器之间共享数据(NFS挂载的使用)

使用NFS服务

可查看参考文档:(45条消息) 搭建NFS服务器_Claylpf的博客-CSDN博客

实验规划图 

当我们搭建好了 nfs 服务器

我们需要在宿主机host上也下载好 nfs 服务

然后可以直接使用docker容器的卷直接挂载nfs服务器

最后对docker容器挂载卷即可

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

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

相关文章

预训练、微调和上下文学习

最近语言模型在自然语言理解和生成方面取得了显著进展。这些模型通过预训练、微调和上下文学习的组合来学习。在本文中将深入研究这三种主要方法,了解它们之间的差异,并探讨它们如何有助于语言模型的学习过程。 预训练 预训练(Pre-training&…

RadEx Pro处理电火花数据操作步骤(上)

最近单位采集了很多的电火花测线,同事在使用GeoSuite AllWorks 2022R1处理这些测线的时候,发现二次波对地层辨识和划分干扰比较严重。GeoSuite AllWorks 压制二次波的能力有限,有人推荐我们试一试地震处理软件RadEx Pro。 两个中文文档“RadE…

7--Gradle进阶 - settings.gradle的文件说明

7--Gradle进阶 - settings.gradle的文件说明 前言 介绍 settings.gradle 文件之前,先来说明一下,settings.gradle 主要是用来多模块工程使用的。 所以我们先来创建一个多模块的工程。 多模块工程创建 1. 创建 root 工程 1.1 配置本地 Gradle 1.2 配置依赖…

一口总结了金九银十(P5-P7 级)1000 多道 Java 面试题,20+ 大厂必考点及 Java 面试框架知识点

Java 面试 “金九银十”这个字眼对于程序员应该是再熟悉不过的了,每年的金九银十都会有很多程序员找工作、跳槽等一系列的安排。说实话,面试中 7 分靠能力,3 分靠技能;在刚开始的时候介绍项目都是技能中的重中之重,它…

微服务架构基础--第2章初识SpringBoot

第2章初识SpringBoot 一.预习笔记 1.SpringBoot的定义: SpringBoot是由Pivotal团队提供的一个全新框架,是为了简化Spring应用的初始搭建过程和开发过程。 2.SpringBoot的优点 1)可快速的构建独立Spring应用程序 2)内嵌Servle…

​DMBOK知识梳理for CDGA/CDGP——第六章 数据存储与操作(附常考知识点)

第六章 数据存储与操作 第六章在CDGA|CDGP考试中的分值占比较少,知识点比较密集,主要考点包括:数据存储与操作的定义、目标、数据库管理员(DBA)的角色定位及类型、数据处理的类型ACID和BASE的区别、数据库环境、活动、…

探索工业智能检测,基于轻量级YOLOv5s开发构建焊接缺陷检测识别系统

前面也有讲过将智能模型应用和工业等领域结合起来是有不错市场前景的,比如:布匹瑕疵检测、瓷砖瑕疵检测、PCB缺陷检测等等,在工业领域内也有很多可为的方向,本文的核心目的就是想要基于目标检测模型来开发构建焊接缺陷检测模型&am…

基于opencv测量图片中物体的尺寸(matlab实现)

1、引言 问题重述 已知书本上右下角放一枚一元人民币(直径2.5厘米),请利用计算机视觉技术预测图片中目标的实际尺寸。 1.预测图片中书本的长与宽(单位:厘米)。 2.预测书本右上方用铅笔画的圆圈的外圆直径…

Cocos Creator:AR 交互

推荐:将 NSDT场景编辑器 加入你的3D工具链 Cocos Creator:AR 交互 3D工具集: NSDT简石数字孪生 AR 交互 AR 交互主要由 cc.ScreenTouchInteractor 组件驱动,该组件将触摸事件转换为点击、拖拽和捏合等手势,交互器将这…

SciencePub学术 | 信号处理类重点SCIEI征稿中

SciencePub学术 刊源推荐: 信号处理类重点SCI&EI征稿中!影响因子高,自引率低,对国人非常友好。信息如下,录满为止: 一、期刊概况: 信号处理类重点SCI&EI 📌【期刊简介】IF&#xff1…

RTK 定位回传数据转内网(局域网)mqtt协议--- 格林恩德 CR102 RTK 针对无人机巡检应用

先简单介绍一下CR102 格林RTK高精度设备,CR102接收机,集成高精度模组与4G, WIFI/蓝牙通信模组;双天线定位定向, 同时内置惯导, 输出加速度和姿态信息。支持4G/WIFI/蓝牙无线传输、 LAN网口传输;…

案例研究|中国矿业大学基于JumpServer构建运维安全体系

中国矿业大学是教育部直属的全国重点高校,是教育部、应急管理部与江苏省人民政府共建高校,先后进入国家“211工程”“985优势学科创新平台项目”和国家“双一流”建设高校行列,学校现坐落于素有“五省通衢”之称的国家历史文化名城——江苏省…

Java实训第七天——2023.6.13

文章目录 一、用Visual Studio Code写一个计算器二、同一个js被多个html引用三、js操作css四、DOM对象属性的操作案例五、js解析json 一、用Visual Studio Code写一个计算器 功能&#xff1a;实现简单的加减乘除 <!DOCTYPE html> <html lang"en"> <…

如何录制声音?推荐这2款电脑录音软件!

案例&#xff1a;怎么录制电脑上的声音&#xff1f;在电脑上怎么录制自己的声音&#xff1f;有没有小伙伴知道操作的步骤。 【我想录制语音会议&#xff0c;还想录制自己的歌声&#xff0c;在电脑上如何录制声音&#xff1f;求一个简单易懂的教程&#xff0c;在线等&#xff0…

使用ReactPy报错:RuntimeError: No built-in server implementation installed.解决

目录 一、问题呈现二、问题原因及解决办法三、处理结果 一、问题呈现 在初次运行ReactPy报错raise RuntimeError("No built-in server implementation installed.") RuntimeError: No built-in server implementation installed.具体报错信息如下&#xff1a; D:\i…

小程序快速渲染机制及双线程技术解析

不管我们对于小程序这种形态存在何种质疑&#xff0c;但不可否认已经融入到我们生活的方方面面&#xff0c;出门打车、扫码、点外卖甚至收能量等等操作都是以小程序进行承载。背后的缘由是小程序足够轻量、便捷、跨平台等特点&#xff0c;为用户提供了丰富的功能和优质的用户体…

作为一个优秀的项目经理,你需要做什么?

经常看到这样的项目经理&#xff0c;一副整天忙得团团转的样子&#xff0c;整天忙得团团转&#xff0c;发出一大堆指令&#xff0c; 经常事无巨细都要亲自过问&#xff0c;他还会不断抱怨说&#xff1a; " 我很忙 " 或 " 我很累 " &#xff0c; " 我…

大厂最全1100道Java面试题及答案整理(2023最新版)

前言 春招&#xff0c;秋招&#xff0c;社招&#xff0c;我们 Java 程序员的面试之路&#xff0c;是挺难的&#xff0c;过了 HR&#xff0c;还得被技术面&#xff0c;小刀在去各个厂面试的时候&#xff0c;经常是通宵睡不着觉&#xff0c;头发都脱了一大把&#xff0c;还好最终…

5、alibaba微服务nacos的引入和使用

1、项目中引入nacos 父项目中已经引入了spring-cloud-alibaba&#xff0c;这个里面就已经包含nacos依赖了&#xff0c;所以在子项目中引入nacos依赖不用添加版本信息 <dependencies><dependency><groupId>org.springframework.boot</groupId><arti…