docker容器 - 卷(volume)- 挂载

news/2024/10/30 15:21:35/

目录

参考文档: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.ppmy.cn/news/381140.html

相关文章

日本东京成田国际机场的第三候机楼

东京成田机场 3 号航站楼在日前正式开放,而由 MUJI 为之打造的软装设计也随之展露于大众眼前。一改品牌一贯简单低调的全白风格,MUJI 为该航站楼带来 400 张以绿、蓝色为主调的沙发凳,同时摒弃掉传统机场美食街式的设计,以橡木材质…

CFH Clearing在日本东京新增TY3数据中心

银行间流动性供应商CFH Clearing发布公告称,正式在日本东京新增TY3数据中心,以便于为亚洲投资者提供高效的、低延迟的交易执行。 TY3数据中心将于2016年4月正式启动,该数据中心将复制伦敦LD4的报价基础,交叉连接至全球一级银行。正…

【实战】(字节跳动、日本东京大学)学习使用白盒表示+GAN来创作卡通图片:Learning to Cartoonize Using White-Box Cartoon Representations

要说亚洲动漫制作的王者,当然是我们一衣带水的邻邦——日本。 2020年字节跳动和日本东京大学联合发表了一篇《Learning to Cartoonize Using White-Box Cartoon Representations》(学习使用白盒表示GAN来创作卡通图片),基于卡通图…

日本东京开启全球首次自动驾驶出租车载客试验

2019独角兽企业重金招聘Python工程师标准>>> 据日本共同社8月27日报道,开发汽车自动驾驶技术的风险企业ZMP(东京)和出租车巨头日之丸交通(东京)27日开始在东京都内展开搭载普通乘客的自动驾驶出租车实证试验。据日之丸交通称,出租车公司通过自…

CFHClearing在日本东京新增TY3数据中心

日前,银行间流动性供应商CFHClearing发布公告称,正式在日本东京新增TY3数据中心,以便于为亚洲投资者提供高效的、低延迟的交易执行。 TY3数据中心将于2016年4月正式启动,该数据中心将复制伦敦LD4的报价基础,交叉连接至…

学术界布局区块链,日本东京大学开始提供区块链课程

任何世界级的项目都必须让这一领域的学生具备竞争能力,区块链无处不在。 日本东京大学的研究生工程学院已经开始提供区块链课程,这要归功于一个团体为其提供的80万美元捐赠。该团体包括以太坊基金会和日本银行业巨头三井住友金融集团。 根据三井住友金…

东京语言学校推荐|日本语言学校哪个好

学生和家长在咨询日本留学时,经常会问花水木的老师们推荐去那些语言学校。因为语言学校各有特色,加之大家申请语言学校的目的不同,所以我们花水木的老师推荐的语言学校也不尽相同。今天,花水木君以常见的考学和就职的赴日目的&…

10年日语营业转行IT从深圳到日本东京圈工作生活2019copy

10年日语营业转行IT从深圳到日本东京圈工作生活2019 主旨:成人学历可以来日本,拖家带口可以来日本,不通过中介可以来日本,只会日语不会IT可以来日本。 序章 日本对于我来说确实曾经像一个童话, 日本对于我来说确实…