[第二部:容器和微服务架构](3)Docker应用程序中的状态和数据

简介: [第二部:容器和微服务架构](3)Docker应用程序中的状态和数据

在大多数情况下,可以将容器视为流程的实例。进程不保持持久状态。虽然容器可以写入其本地存储,但假设实例无限期地存在,就像假设内存中的单个位置是持久的一样。您应该假设容器映像(如进程)具有多个实例,或者最终将被终止。如果它们是由容器编排器管理的,则应该假设它们可能会从一个节点或VM移动到另一个节点或VM。

以下解决方案用于管理Docker应用程序中的数据:

从Docker主机,作为Docker卷:

  • 卷存储在Docker管理的主机文件系统的一个区域中。
  • 绑定挂载可以映射到主机文件系统中的任何文件夹,因此无法从Docker进程控制访问,并且由于容器可以访问敏感的OS文件夹,因此可能会带来安全风险。
  • tmpfs挂载就像虚拟文件夹,只存在于主机的内存中,从不写入文件系统。

从远程存储:

  • Azure存储提供了地理分布存储,为容器提供了一个良好的长期持久性解决方案。
  • 远程关系数据库,如Azure SQL数据库或NoSQL数据库,如Azure Cosmos DB,或缓存服务,如Redis。

从Docker容器:

  • 覆盖文件系统。此Docker功能实现了一个写时拷贝任务,该任务将更新的信息存储到容器的根文件系统中。该信息位于容器所基于的原始图像的“顶部”。如果容器从系统中删除,则这些更改将丢失。因此,虽然可以将容器的状态保存在其本地存储中,但围绕此设计系统将与容器设计的前提冲突,容器设计的前提默认为无状态。

不过,使用Docker卷现在是处理Docker中本地数据的首选方法。如果您需要更多关于容器中存储的信息,请查看Docker存储驱动程序和存储驱动程序。

以下提供了有关这些选项的详细信息:

  • 是从主机操作系统映射到容器中目录的目录。当容器中的代码可以访问该目录时,该访问实际上是对主机操作系统上的一个目录的访问。此目录不与容器本身的生存期绑定,该目录由Docker管理,并与主机的核心功能隔离。因此,数据卷被设计成独立于容器的生命周期来保存数据。如果从Docker主机中删除容器或图像,则不会删除保存在数据卷中的数据。
  • 可以命名或匿名(默认)。命名卷是数据卷容器的发展,使容器之间的数据共享变得容易。卷还支持允许您在远程主机上存储数据的卷驱动程序,以及其他选项。
  • 绑定挂载很久以前就可用了,允许将任何文件夹映射到容器中的挂载点。绑定装载具有比卷更多的限制和一些重要的安全问题,因此建议使用卷。
  • tmpfs挂载基本上是虚拟文件夹,只存在于主机的内存中,从不写入文件系统。它们快速、安全,但使用内存,仅用于临时、非持久性数据。

如图5所示,常规Docker卷可以存储在容器本身之外,但在主机服务器或虚拟机的物理边界内。但是,Docker容器无法从一个主机服务器或虚拟机访问卷

到另一个主机服务器或虚拟机。换句话说,使用这些卷,不可能管理在不同Docker主机上运行的容器之间共享的数据,尽管可以使用支持远程主机的卷驱动程序来实现。


图 5基于容器的应用程序的卷和外部数据源

卷可以在容器之间共享,但只能在同一主机中共享,除非使用支持远程主机的远程驱动程序。此外,当Docker容器由编排器管理时,容器可能在主机之间“移动”,这取决于集群执行的优化。因此,不建议将数据卷用于业务数据。但它们是处理跟踪文件、临时文件或类似不会影响业务数据一致性的文件的良好机制。

  • 远程数据源和缓存工具(如Azure SQL Database、Azure Cosmos DB或远程缓存(如Redis))可以在容器化应用程序中使用,就像在没有容器的情况下开发时使用它们一样。这是一种行之有效的存储业务应用程序数据的方法。
  • Azure存储。业务数据通常需要放在外部资源或数据库中,如Azure存储。具体来说,Azure存储在云中提供以下服务:
  1. Blob存储存储非结构化对象数据。blob可以是任何类型的文本或二进制数据,例如文档或媒体文件(图像、音频和视频文件)。Blob存储也称为对象存储。
  2. 文件存储为使用标准SMB协议的传统应用程序提供共享存储。Azure虚拟机和云服务可以通过挂载的共享跨应用程序组件共享文件数据。本地应用程序可以通过文件服务REST API访问共享中的文件数据。
  3. 表存储存储结构化数据集。表存储是一种NoSQL关键属性数据存储,它允许快速开发和快速访问大量数据。
  • 关系数据库和NoSQL数据库。外部数据库有许多选择,从关系数据库如SQL Server、PostgreSQL、Oracle或NoSQL数据库如Azure Cosmos DB、MongoDB等。这些数据库不会作为本指南的一部分进行说明,因为它们属于完全不同的主题。

最佳实践

  • 不要在docker容器或docker主机(虚拟机)的本地文件中存储任何配置信息。
  • 建议您将配置信息存储在对象存储或其他全局存储服务中。
  • 不要使用本地缓存(如Java Hashmap),建议使用全局缓存(如Redis服务)
相关文章
|
1月前
|
Java Linux C语言
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
361 90
|
2月前
|
Kubernetes 安全 数据安全/隐私保护
云卓越架构:容器安全最佳实践
本次分享由阿里云智能集团解决方案架构师张玉峰主讲,主题为“云卓越架构:容器安全最佳实践”。内容涵盖容器安全的挑战、云原生容器安全架构及典型场景。首先分析了容器安全面临的问题,如镜像漏洞和权限管理。接着介绍了容器安全架构的五个维度:身份权限管理、配置安全检查、运行时防护、镜像安全检测及发布的安全管控。最后通过具体场景展示了容器身份与权限管理、密钥管理、运行时防入侵等最佳实践,强调了安全左移的重要性,确保从开发到运行的全生命周期安全覆盖。
|
2月前
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
201 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
2月前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
148 24
|
2月前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
202 6
|
2月前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
3月前
|
Kubernetes Cloud Native 持续交付
容器化、Kubernetes与微服务架构的融合
容器化、Kubernetes与微服务架构的融合
81 1
|
3月前
|
运维 Kubernetes Docker
深入理解容器化技术及其在微服务架构中的应用
深入理解容器化技术及其在微服务架构中的应用
107 1
|
3月前
|
弹性计算 运维 开发者
后端架构优化:微服务与容器化的协同进化
在现代软件开发中,后端架构的优化是提高系统性能和可维护性的关键。本文探讨了微服务架构与容器化技术如何相辅相成,共同推动后端系统的高效运行。通过分析两者的优势和挑战,我们提出了一系列最佳实践策略,旨在帮助开发者构建更加灵活、可扩展的后端服务。
|
3月前
|
Kubernetes Cloud Native Docker
云原生之旅:从传统架构到容器化服务的演变
随着技术的快速发展,云计算已经从简单的虚拟化服务演进到了更加灵活和高效的云原生时代。本文将带你了解云原生的概念、优势以及如何通过容器化技术实现应用的快速部署和扩展。我们将以一个简单的Python Web应用为例,展示如何利用Docker容器进行打包和部署,进而探索Kubernetes如何管理这些容器,确保服务的高可用性和弹性伸缩。

热门文章

最新文章