原标题:容器持久化存储必要性及解决方案比较
容器的特性决定了容器本身是非持久化的,容器被删除,其上的数据也一并删除。而其上承载的应用分为有状态和无状态。容器更倾向于无状态化应用,可水平扩展的,但并不意味所有的应用都是无状态的,特别是银行的应用,一些服务的状态需要保存比如日志等相关信息,因此需要持久化存储。以下内容解答了关于容器存储持久化的若干疑问,包括解决方案解析及比较。
Docker容器关闭后,容器产生的数据还在磁盘上吗?
Docker里的数据不做持久化的话数据是不保留的。所有的数据都是临时的,关了或者重启都会让数据丢失。
如何持久化保存容器的数据,这是自Docker诞生之日起就一直存在的问题。在Docker的初始设计中,数据与容器共生共灭,人们很难把容器从一台机器迁移到另一台机器。时至今日,存储的发展和变革给了容器持久化存储以多种多样的解决之道。
容器架构使用到三种类型的存储:
第一是镜像存储。这可以利用现有的共享存储进行交付,要求类似于服务器虚拟化环境中虚拟机镜像分发保护的平台架构。容器镜像的一项好处在于其存储容量相较于完整的虚拟机镜像小了许多,因为它们不会复制操作系统代码。此外,容器镜像的运行在设计之初便是固定的,因此可以更高效地存储、共享。但也因此,容器镜像无法存储动态应用程序的数据。
第二类需要存储的数据是容器的管理。当然,可以借助现有存储完成这项工作。不论使用Docker、Kubernetes、Tectonic、Rancher还是其它类型的容器管理,都需要存储配置数据、日志记录等管理数据。
第三类存储,容器应用的存储,是最具挑战的。只有支持真正的微服务式编程时,容器代码可以直接写入镜像目录和文件。但是容器使用一种分层文件系统,将所有新写入的数据存储在临时虚拟层,最底层的容器镜像却未被修改。一旦容器消失——相比虚拟机,容器的设计寿命更短——所有的临时存储都会随之消散。
Docker等容器管理产品提供可插拔的卷管理。例如Flocker是开源Docker可插拔卷中的最受欢迎的替代品,可以通过集群智能管理、迁移数据卷及其容器。大多数传统存储供应商和云存储服务提供商为其存储阵列生成各类容器系统卷插件,就是很好的顺应了时代的发展。
什么是容器持久化存储?会带来哪些优势,以及会带来哪些潜在的风险点?
容器持久化数据卷:在容器中运行的应用,应用真正需要保存的数据,可以写入持久化的Volume数据卷。在这个方案中,持久层产生价值,不是通过弹性,而是通过灵活可编程,例如通过设计的API来扩展存储。这个方案结合了持久层和或纯云原生设计模式。
Docker发布了容器卷插件规范,允许第三方厂商的数据卷在Docker引擎中提供数据服务。这种机制意味着外置存储可以超过容器的生命周期而独立存在。而且各种存储设备只要满足接口API标准,就可接入Docker容器的运行平台中。现有的各种存储可以通过简单的驱动程序封装,从而实现和Docker容器的对接。可以说,驱