首页 > 其他分享 >docker 容器的数据卷

docker 容器的数据卷

时间:2023-04-11 16:15:16浏览次数:43  
标签:容器 -- volume 挂载 docker 数据

一 Docker 数据卷简介

1.1 为什么用数据卷

•宿主机无法直接访问容器中的文件

•容器中的文件没有持久化,导致容器删除后,文件数据也随之消失

•容器之间也无法直接访问互相的文件

为解决这些问题,docker加入了数据卷(volumes)机制,能很好解决上面问题,以实现:

•容器与主机之间、容器与容器之间共享文件

•容器中数据的持久化

•将容器中的数据备份、迁移、恢复等

1.2 数据卷的特点

•数据卷存在于宿主机的文件系统中,独立于容器,和容器的生命周期是分离的。

•数据卷可以目录也可以是文件,容器可以利用数据卷与宿主机进行数据共享,实现了容器间的数据共享和交换。

•容器启动初始化时,如果容器使用的镜像包含了数据,这些数据会拷贝到数据卷中。

•容器对数据卷的修改是实时进行的。

•数据卷的变化不会影响镜像的更新。数据卷是独立于联合文件系统,镜像是基于联合文件系统。镜像与数据卷之间不会有相互影响。

一个数据卷可以被多个容器同时挂载

一个容器也可以被挂载多个数据卷

二 Docker 数据卷管理

 配置数据卷

创建启动容器时,使用-v参数 设置数据卷

  docker run ... -v 宿主机目录(文件):容器内目录(文件)...

注意事项:

  1、目录必是绝对路径

  2、如果目录不存在,会自动创建

  3、可以挂载多个数据卷(-v /root/data1:/root/data1  -v /root/data2:/root/data2)

[root@localhost ~]# docker run -it --name=c7 -v /root/data:/root/data_container centos /bin/bash

 数据卷容器

多容器进行数据交换

  1、多个容器挂载同一个数据卷

   2、数据卷容器

  配置数据卷容器

1、创建启动c3数据卷容器,使用-v参数 设置数据卷

docker run -it --name=c3 -v /volume centos:7 /bin/bash

2、创建启动c1,c2容器,使用--volumes-from参数 设置数据卷

docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash

docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash

 

 

 

2.1 Docker挂载容器数据卷的三种方式

bind mounts:将宿主机上的一个文件或目录被挂载到容器上。

volumes:由Docker创建和管理。使用docker volume命令管理

tmpfs mounts:tmpfs 是一种基于内存的临时文件系统。tmpfs mounts 数据不会存储在磁盘上。


2.2 bind mounts方式挂载数据卷

 

2.3 volumes方式挂载数据卷

1
2
3
4
5
6
7
8
9
10
11
12
13
# 利用docker run/create为容器挂载数据卷
# 用法:
	方式一: -v, --volume参数
	    	-v VOLUME-NAME:容器中的文件或者文件夹路径
	方式二:--mount 参数
		--mount type=volume, src=VOLUME-NAME, dst=容器中的文件或者文件夹路径
# volume对象管理:
	docker volume 命令管理volume数据卷对象
	docker volume create		创建数据卷对象
	docker volume inspect		查看数据卷详细信息
	docker volume ls			查看已创建的数据卷对象
	docker volume prune		删除未被使用的数据卷对象
	docker volume rm		删除一个或多个数据卷对象

2.4 tmpfs mount方式挂载数据卷

1
2
3
# 利用docker run/create为容器挂载数据卷
# 用法:
	--mount type=tmpfs, dst=PATH

2.5 共享其他容器的数据卷-数据卷容器

1
2
3
# 利用docker run/create 的--volumes-from参数指定数据卷容器
# 用法:
	docker run/create --volumes-from CONTAINER

三 Docker 数据卷注意事项

Docker的数据卷更多会是使用volumes方式来进行使用。使用时需注意:

​ •如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。

​ •如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉。

这两个规则都非常重要,灵活利用第一个规则可以帮助我们初始化数据卷中的内容。掌握第二个规则可以保证挂载数据卷后的数据总是你期望的结果。

     

标签:容器,--,volume,挂载,docker,数据
From: https://www.cnblogs.com/cm920/p/17211109.html

相关文章

  • CentOS安装Minio(rpm和docker方式)
    RPM方式:1、下载minio  中国镜像地址:https://dl.minio.org.cn/server/minio/。我下载的版本是:minio-20230407052858.0.0.x86_64.rpm2、安装rpm文件scpminio-20230407052858.0.0.x86_64.rpmroot@172.29.87.194:/home#将文件从windows复制到linux主机中rpm-ivhminio-2......
  • 【Spring MVC】简单数据绑定
    实体类:  spring-mvc.xml<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:......
  • 堆:剑指 Offer 41. 数据流中的中位数
    题目描述:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。例如,[2,3,4] 的中位数是3[2,3]的中位数是(2+3)/2=2.5设计一......
  • SQLServer 客户端链接服务器到Oracle数据库 全攻略
    引言和第三方公司进行接口对接时,发现某一个模块第三方只提供一个视图,还让我们直接调用他们数据库......
  • 多进程下载nadc上的数据
    importwgetfrombs4importBeautifulSoupasbsimportrequestsimportrandomimportrequestsfromtqdmimporttqdmfromconcurrent.futuresimportThreadPoolExecutor,Future,as_completed,waitfrommultiprocessingimportcpu_countheaders=[&#......
  • Linux 上 定时备份 postgresql 数据库
    Linux上定时备份postgresql数据库为了避免操作数据库的风险因此计划每天对postgresql数据库进行定时备份1.服务器地址:备份服务器地址10.10.10.101(虚构)postgresql数据库所在的服务器地址10.10.10.100(虚构)因为我有单独的备份数据库不在同一个服务器上操作首先要保证这......
  • mysql查询报表数据补全12个月
    mysql中生成多行序列1SELECT2SUBSTRING_INDEX(3SUBSTRING_INDEX('1,2,3,4,5,6,7,8,9,10,11,12',',',help_topic_id+1),',',-1)ROWNUM4FROM5mysql.help_topic6WHERE7help_topic_id<(LENGTH('1,2,3,4......
  • 字节跳动大数据架构面经 有用 看1
    1面试官:简单的做个自我介绍吧面试官,您好!我叫xxx,xxxx年x月毕业于xxx学校,xx学历,目前就职于xxx公司xxx部门,职位为:大数据开发工程师,主要从事于xxx组件、平台的开发工作。工作以来,我先后参加了xxx项目、xxx项目以及xxx项目,积累了丰富的项目经验,同时,这x个项目......
  • Kotlin Compose 删除条目并刷新数据源 Flow 与Pager3 与 Compose 最佳做法
    删除方式有很多种。。成功的却不多。。分享一下首先在viewModel中创建两个变量privateval_deletedDialogHashs=mutableStateOf(setOf<String>())valdeletedDialogHashs:State<Set<String>>=_deletedDialogHashs在viewModel中声明的删除方法也很简单funremoveFeedDial......
  • Python 链接数据库,快速操作数据库类。让你操作数据库so so 的
    importpymysqlclassDatabaseHandler:def__init__(self):self.db=pymysql.connect(host='127.0.0.1',user='root',db='test')#创建游标对象self.cursor=self.db.cursor()#def__del__(self):......