在大多数情况下,可以将容器视为流程的实例。进程不保持持久状态。虽然容器可以写入其本地存储,但假设实例无限期地存在,就像假设内存中的单个位置是持久的一样。您应该假设容器映像(如进程)具有多个实例,或者最终将被终止。如果它们是由容器编排器管理的,则应该假设它们可能会从一个节点或VM移动到另一个节点或VM。
以下解决方案用于管理Docker应用程序中的数据:
从Docker主机,作为Docker卷:
- 卷存储在Docker管理的主机文件系统的一个区域中。
- 绑定挂载可以映射到主机文件系统中的任何文件夹,因此无法从Docker进程控制访问,并且由于容器可以访问敏感的OS文件夹,因此可能会带来安全风险。
- tmpfs挂载就像虚拟文件夹,只存在于主机的内存中,从不写入文件系统。
从远程存储:
- Azure存储提供了地理分布存储,为容器提供了一个良好的长期持久性解决方案。
- 远程关系数据库,如Azure SQL数据库或NoSQL数据库,如Azure Cosmos DB,或缓存服务,如Redis。
从Docker容器:
- 覆盖文件系统。此Docker功能实现了一个写时拷贝任务,该任务将更新的信息存储到容器的根文件系统中。该信息位于容器所基于的原始图像的“顶部”。如果容器从系统中删除,则这些更改将丢失。因此,虽然可以将容器的状态保存在其本地存储中,但围绕此设计系统将与容器设计的前提冲突,容器设计的前提默认为无状态。
不过,使用Docker卷现在是处理Docker中本地数据的首选方法。如果您需要更多关于容器中存储的信息,请查看Docker存储驱动程序和存储驱动程序。
以下提供了有关这些选项的详细信息: