docker - 生产关键数据和非生产非关键数据应存储在哪里?
问题描述
我在一次采访中被问到这个问题,我不确定正确的答案,所以我想听听你的建议。
有人问我是否应该在 docker 实例内部或外部保留生产关键数据?我的选择是什么以及这样做的原因。
如果我们有非生产非关键数据,您的答案会有所不同吗?
用理由支持你的答案。
解决方案
大多数数据应该在容器和容器镜像的外部进行管理。我倾向于将限制在容器中的数据视为临时(中间|可丢弃)数据。否则,如果它被捕获但对我的业务并不重要,为什么要创建它?
“容器”这个名称具有误导性。容器不像虚拟机那样在虚拟机之间存在强大的屏障(隔离)。当您在单个主机上运行多个容器时,您可以枚举它们ps aux
在主机上使用的所有进程。
有很好的论据来保持进程和数据之间的分离,并且在单个容器中同时运行这使得保持这种分离变得更具挑战性。
与进程不同,容器层中的文件更加隔离。尽管这些层在主机操作系统上显示为文件,但您不能简单地ls
从主机操作系统中获取容器层的文件。这使得访问容器中的数据更加复杂。在另一个文件系统上有效地运行一个文件系统也会带来性能损失。
虽然在机器(即docker push
和docker pull
)之间移动容器映像很常见且微不足道,但在机器之间移动容器却不太容易。这通常不是移动进程的问题,因为这些(配置除外)是无状态的并且易于移动和重新创建,但是您的数据是状态并且您希望能够轻松移动这些数据(用于备份,恢复)并且越来越多地移动到在对其执行处理的动态节点池中移动。
不太重要但并非不重要的是,rm -rf *
通过移除容器(docker container rm ...
推荐阅读
- java - Context.startForegroundService() 没有调用 Service.startForeground() 问题
- azure-devops - 哪些 Azure DevOps 代理比其他代理快得多?
- c# - 设置 ListBox.DataSource = null 时出现 C# 错误(可能的事件触发问题?)
- awk - 在更改主键时使用 AWK 合并两个文件
- r - 许多变量的回归 - 提取 b1 值
- firebase - 是否可以使用 Firebase 用户 Snapchat Kit 登录?
- firebase - Firestore 文件的娱乐和费用
- powershell - 电源外壳 ; 使用不同的 UO 批量导入用户
- jquery - Rabbit ToggleClass 无法正常工作
- json - Eloquent - SQLite 查询 json 列中的嵌套值