Docker卷与持久化数据

Docker容器默认的存储是非持久化的,删除容器会导致数据丢失。为了保持数据,需使用卷进行持久化存储。卷是独立于容器的,可创建、挂载和管理,即使容器被删除,卷中的数据仍保留。卷可以通过`dockervolume`命令创建、检查和删除,也可在Dockerfile中预定义。卷的使用确保了生产环境中的数据安全。
摘要由CSDN通过智能技术生成

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

两者都很重要,并且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删除未被使用的指定卷。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值