欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

docker es持久化_Docker 卷与持久化数据

程序员文章站 2022-05-11 22:59:58
...

# Docker的非持久化数据

每个Docker容器都有自己的非持久化存储。非持久化存储自动创建,从属于容器,生命周期与容器相同。这意味着删除容器也会删除全部非持久化数据。

# Docker的持久化数据

如果希望自己的容器数据保留下来(持久化),则需要将数据存储在卷上。卷与容器是解耦的,从而可以独立地创建并管理卷,并且卷并未与任意容器生命周期绑定。最终效果即用户可以删除一个关联了卷的容器,但是卷并不会被删除。

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

总体来说,用户创建卷,然后创建容器,接着将卷挂载到容器上。卷会挂载到容器文件系统的某个目录之下,任何写到该目录下的内容都会写到卷中。即使容器被删除,卷与其上面的数据仍然存在。

创建卷docker volume create myvo1查看卷[[email protected] ~]# docker volume lsDRIVER    VOLUME NAMElocal     myvo1删除卷docker volume prune会删除未装入到某个容器或者服务的所有卷,所以谨慎使用docker volume rm挂在卷docker container run -dit --name  container1 --mount source=bizvol,target=/vol1 tomcat

# 在集群节点间共享数据

在swarm集群中,若存在多个服务,卷配置会被多个服务创建,但是卷中的数据不会共享。所以在集群多个节点共享数据还需要使用共享存储.比如NFS.

数据损坏问题:

基于图1,设想下面的场景:Node 1上的容器A在共享卷中更新了部分数据。但是为了快速返回,数据实际写入了本地缓存而不是卷中。此时,容器A认为数据已经更新。但是,在Node 1的容器A将缓存数据刷新并提交到卷前,Node 2的容器B更新了相同部分的数据,但是值不同,并且更新方式为直接写入卷中。此时,两个容器均认为自己已经将数据写入卷中,但实际上只有容器B写入了。容器A会在稍后将自己的缓存数据写入缓存,覆盖了Node 2的容器B所做的一些变更。但是Node2上的容器B对此一无所知。数据损坏就是这样发生的。

docker es持久化_Docker 卷与持久化数据

上述数据损坏问题需要应用程序进行控制。

相关标签: docker es持久化