docker es持久化_Docker 卷与持久化数据
# 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对此一无所知。数据损坏就是这样发生的。
上述数据损坏问题需要应用程序进行控制。
上一篇: Cookie中允许的字符
下一篇: docker数据持久化
推荐阅读
-
在Docker上用Nacos1.3容器连接MySQL5.6和8.0.18容器进入持久化的具体操作(Nacos单机版)
-
docker-compose一键部署redis一主二从三哨兵模式(含密码,数据持久化)
-
详解Docker的持久化存储和数据共享
-
JAVAEE——宜立方商城06:Redis安装、数据类型和持久化方案、Redis集群分析与搭建、实现缓存和同步
-
Mesos:数据库使用的持久化卷 Mesos数据库
-
Mesos:数据库使用的持久化卷 Mesos数据库
-
重启redis服务数据丢失的问题(rdb与aof持久化策略)
-
详解使用Docker部署MySQL(数据持久化)
-
docker下的 redis 之持久化存储详解
-
从零开始入门 K8s | 应用存储和持久化数据卷:存储快照与拓扑调度 crack工作阿里巴巴