Docker卷与持久化数据

news/2024/11/30 1:28:07/

数据主要分为两类,持久化的与非持久化的。

两者都很重要,并且Docker均有对应的支持方式。每个Docker容器都有自己的非持久化存储。非持久化存储自动创建,从属于容器,生命周期与容器相同。这意味着删除容器也会删除全部非持久化数据。如果希望自己的容器数据保留下来(持久化),则需要将数据存储在卷上。卷与容器是解耦的,从而可以独立地创建并管理卷,并且卷并未与任意容器生命周期绑定。最终效果即用户可以删除一个关联了卷的容器,但是卷并不会被删除。

容器与非持久数据:容器擅长无状态和非持久化事务。每个容器都被自动分配了本地存储。默认情况下,这是容器全部文件和文件系统保存的地方。读者可能听过一些非持久存储相关的名称,如本地存储、GraphDriver存储以及SnapShotter存储。总之,非持久存储属于容器的一部分,并且与容器的生命周期一致——容器创建时会创建非持久化存储,同时该存储也会随容器的删除而删除

在Linux系统中,该存储的目录在/var/lib/docker/<storage-driver>/之下,
是容器的一部分。在Windows系统中位于C\ProgramData\Docker\windowsfilter\目录之下。

如果在生产环境中使用Linux运行Docker,需要确认当前存储驱动(GraphDriver)与Linux版本是否相符。

在容器中持久化数据的方式一般采用卷。

总体来说,用户创建卷,然后创建容器,接着将卷挂载到容器上。卷会挂载到容器文件系统的某个目录之下,任何写到该目录下的内容都会写到卷中。即使容器被删除,卷与其上面的数据仍然存在。
如图:
在这里插入图片描述
Docker卷挂载到容器的/code目录。任何写入/code目录的数据都会保存到卷当中,并且在容器删除后依然存在。

1.创建和管理容器卷

$ docker volume create myvol

默认情况下,Docker创建新卷时采用内置的local驱动。恰如其名,本地卷只能被所在节点的容器使用。使用-d参数可以指定不同的驱动。

第三方驱动可以通过插件方式接入。这些驱动提供了高级存储特性,并为Docker集成了外部存储系统
如图:
在这里插入图片描述

现在卷已经创建成功,读者可以通过docker volume ls命令进行查看,还可以使用docker volume inspect命令查看详情。

[root@open ~]# docker volume inspect myvol 
[{"CreatedAt": "2023-06-26T15:05:15+08:00","Driver": "local","Labels": {},"Mountpoint": "/var/lib/docker/volumes/myvol/_data","Name": "myvol","Options": {},"Scope": "local"}
]

Driver和Scope都是local。这意味着卷使用默认local驱动创建,只能用于当前Docker主机上的容器。Mountpoint属性说明卷位于Docker主机上的位置。在本例中卷位于Docker主机的/var/lib/docker/volumes/myvol/_data目录。在Windows Docker主机上对应内容为Mountpoint": "C:\ProgramData\Docker\ volumes\myvol\_data。

有两种方式删除Docker卷。
● docker volume prune。
● docker volume rm。
docker volume prune会删除未装入到某个容器或者服务的所有卷,所以谨慎使用!docker volume rm允许删除指定卷。两种删除命令都不能删除正在被容器或者服务使用的卷。

此外,还可以通过在Dockerfile中使用VOLUME指令的方式部署卷。具体的格式为VOLUME <container-mount-point。但是,在Dockerfile中无法指定主机目录。这是因为主机目录通常情况下是相对主机的一个目录,意味着这个目录在不同主机间会变化,并且可能导致构建失败。如果通过Dockerfile指定,那么每次部署时都需要指定主机目录。

卷在容器和服务中的使用

$ docker container run -dit --name voltainer \--mount source=bizvol,target=/vol \alpine

即使系统中没有叫作bizvol的卷,命令也应该能够成功运行。这里引出了很有意思的一点。
● 如果指定了已经存在的卷,Docker会使用该卷。
● 如果指定的卷不存在,Docker会创建一个卷。

卷与持久化数据——命令
● docker volume create命令用于创建新卷。默认情况下,新卷创建使用local驱动,但是可以通过-d参数来指定不同的驱动。
● docker volume ls会列出本地Docker主机上的全部卷。
● docker volume inspect用于查看卷的详细信息。可以使用该命令查看卷在Docker主机文件系统中的具体位置。
● docker volume prune会删除未被容器或者服务副本使用的全部卷。谨慎使用!
● docker volume rm删除未被使用的指定卷。

这里只是说明了本体卷的使用,还有在集群节点间共享存储等内容。


http://www.ppmy.cn/news/586308.html

相关文章

【C++详解】——红黑树

目录 红黑树的概念 红黑树的性质 红黑树节点的定义 红黑树的结构 红黑树的插入操作 情况一 情况二 情况三 红黑树的验证 红黑树的查找 红黑树与AVL树的比较 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示…

近红外和短波红外的区别

红外线是波长介乎微波与可见光之间的电磁波&#xff0c;波长为0.75&#xff5e;1000 μm&#xff0c;其中&#xff0c;近红外、短波红外、中波红外、长波红外所在区间如下&#xff1a; - 近红外 (Near Infrared, NIR) : 0.75~1.1 μm - 短波红外 (Short Wave Infrared, SWIR) :…

傅里叶红外光谱仪

在做红外光谱&#xff08;FTIR&#xff09;测试时&#xff0c;科学指南针检测平台工作人员在与很多同学沟通中了解到&#xff0c;好多同学对FTIR测试不太了解&#xff0c;针对此&#xff0c;科学指南针检测平台团队组织相关同事对网上海量知识进行整理&#xff0c;希望可以帮助…

红外波长的分类

红外线是波长介乎微波与可见光之间的电磁波&#xff0c;波长为0.75&#xff5e;1000 μm&#xff0c;其中&#xff0c;近红外、短波红外、中波红外、长波红外所在区间如下&#xff1a; - 近红外 (Near Infrared, NIR) : 0.75~1.1 μm - 短波红外 (Short Wave Infrared, …

红外发射管的使用以及发射角度与强度问题

红外发射管也称红外线发射二极管&#xff0c;属于二极管类。它是可以将电能直接转换成近红外光(不可见光)并能辐射出去的发光器件&#xff0c;主要应用于各种光电开关及遥控发射电路中。红外线发射管的结构、原理与普通发光二极管相近&#xff0c;只是使用的半导体材料不同。红…

红外收发基本原理

2017-05-04 作者&#xff1a;ll 嵌入式基础知识 红外收发基本原理 1、红外通信的基本原理 1.1 、红外通信的框架 红外通信由发送端和接收端两部分组成&#xff0c;发送端对数据进行编码&#xff0c;然后调制成一系列的脉冲信号&#xff0c;然后通过带有红外发射管的发射电路发…

pebblely无需代码连接集简云数据表的方法

1 使用场景 当电商UI接到一个设计产品图的需求时&#xff0c;按照常规的工作安排&#xff0c;从对接需求到最后完成效果图最短时间都要在5天左右&#xff0c;如果遇到高要求的客户&#xff0c;后期还需要在电脑上进一步调整细节&#xff0c;一张成片起码要花上数小时时间去完成…

红外成像概述

红外成像概述 1 红外线 红外线&#xff08;Infrared&#xff0c;简称IR&#xff09;是波长介乎微波与可见光之间的电磁波&#xff0c;其波长在760奈米&#xff08;nm&#xff09;至1毫米&#xff08;mm&#xff09;之间&#xff0c;是波长比红光长的非可见光&#xff0c;对应频…