飞天发布时刻:2024年 Forrester 公有云平台Wave™评估报告解读 了解详情
写点什么

存储在容器中是如何工作的

  • 2015-09-30
  • 本文字数:1471 字

    阅读完需:约 5 分钟

将应用程序运行在容器中已经成为一种趋势,但是容器的概念并不是才有的。容器的起源实际可以追溯到大型机,这项技术在最近逐渐成熟,并以惊人的速度获得用户的兴趣和接受。

容器被设计成运行在操作系统之上的虚拟实例,它包含了应用程序在用户空间(user space)所需的所有内容。同时,容器提供一定的隔离性,使得运行在同一个操作系统之上的容器看起来是独立的,并且拥有整个操作系统。这种隔离还支持容器和外接交互。

目前有少数针对容器的备份软件,有没有一种方法能够使用任何备份软件来备份容器呢?

为了实现写时复制(copy-on-write),容器会使用一种名为叠加(overlay)文件系统的特性。即需要对根镜像进行修改时,容器会利用这一特性,将变更内容写入到独立区域并“覆盖”原有内容。这种修改通常都是瞬时的,也就是说,通常情况下,当容器删除时,这些修改也将不复存在。因此,容器默认是没有永久存储的。

为了解决存储问题,像 Docker 这样的工具,提供了两个新的特性来获得更加持久化的存储:Docker 卷和数据容器。

Docker 卷允许将数据保存在容器的启动卷之外。容器可以在启动时,通过“-v”开关挂载多个独立的数据卷。该参数会在Docker 的配置目录(/var/lib/docker)中创建一个实体,配置内容会保存在/var/lib/docker/volumes 目录中。每个子目录由卷的UUID(universally unique identifier)命名,其中包含该卷的配置,如卷ID、路径、读写权限等。卷的数据内容存储在/var/lib/docker/vfs/dir 目录中,同样由卷的UUID 命名。

卷中的数据可以在主机上进行读写,并且有着标准的文件权限。然而,使用卷的方式,有其优点和缺点。优点是由于采用标准文件系统,对容器的数据的备份、复制、移动等操作,可以在主机操作系统上完成。缺点是卷的名字使用了UUID,并且和容器ID 关联,导致卷路径很难和容器名称关联起来。目前,Docker 提供了 docker cp命令,可以将文件在主机和容器之前复制。

通过挂载外部卷的方式,还可以将存储放到 NFS(Network File System)或者 LUN(Logical Unit Number)上,这样可以方便的对容器数据进行备份。

另一种方式是采用数据容器。数据容器像 Docker 内部的 NFS 服务器一样,可以通过“–volumes-from”开关在容器启动时设置关联的数据容器。使用这种方式的优点是将应用数据独立抽取出来,而不必关心它实际存放的位置。

当然,使用卷和数据容器,可能会遇到一些问题:

  • 孤立的存储:当前一般容器默认的设置是容器删除之后保留容器使用过的存储。这样可能会导致一些卷已经没有容器引用,但是要删除它们成本又非常高,需要遍历主机上所有容器的配置,确保没有容器还在使用才能执行删除。
  • 数据安全:挂载的卷除了操作系统本身的文件权限控制,没有其他安全措施。这些文件可能会被主机上的进程修改,同时容器中的进程访问共享文件,也需要按照主机上的文件权限设置进行配置(如用户和组信息)。
  • 数据完整性:共享数据在数据完整性上无法保证,容器中的应用程序需要自己控制。同时数据备份需要容器或者主机上的应用程序来完成。

最后,容器存储上还有一个问题,就是不同主机上容器之间的存储无法共享。即目前容器可以使用外部存储,但是无法使用在其他主机上的数据容器。目前, ClusterHQ 公司开发了 flocker ,试图解决这一问题。也希望 Docker 官方能够在存储管理上提供分布式解决方案。


感谢魏星对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-09-30 19:003421

评论

发布
暂无评论
发现更多内容

反套路打工:王子公主职场图鉴

脑极体

云计算

高并发环境下的实现与优化策略

gogo

架构 数据库、

10年大厂运营大咖告诉你,如何有效应对消息推送厂商配额

MobTech袤博科技

海外云手机:跨境电商引流的利器

Ogcloud

云手机 海外云手机 云手机海外版 国外云手机 跨境云手机

通过方法引用获取属性名的底层逻辑是什么?

江南一点雨

Java Lambda mybatis

一次接口的性能优化之旅

京东科技开发者

jar包冲突组建设计书

京东科技开发者

流量见顶了以后,APP为何仍然要使用推送通知?

MobTech袤博科技

如何选择高防服务器?稳定性与安全性兼备

一只扑棱蛾子

高防服务器

3分钟教你最大化利用APP消息推送(Push)在运营中的优势

MobTech袤博科技

软件测试学习笔记丨搭建远程可视化、可操作的ubuntu系统

测试人

ubuntu 软件测试 测试开发

20余年运维实践经验总结!一本书掌握数字化运维方法

嘉为蓝鲸

运维 数字化转型 运维管理 IT 运维

都2024年了,你还不知道一键登录怎么选吗?

MobTech袤博科技

秒验:让APP验证和登录远不只是便捷

MobTech袤博科技

阿里巴巴API接口助力,快速搜索“智能手表”新品,精准获取商品ID

技术冰糖葫芦

API Explorer api 货币化 API 文档

10年产品经理教你快速提升消息推送的点击率

MobTech袤博科技

秒验资深玩家熬夜整理的15个常见问题,拿走不谢!

MobTech袤博科技

内部人士揭秘:千万不要关闭手机一键登录验证

MobTech袤博科技

QAnything-1.3.0,支持纯python笔记本运行,支持混合检索

有道技术团队

MobTech积极参与鸿蒙生态建设,HarmonyOS NEXT鸿蒙星河版产品即将发布

MobTech袤博科技

软件测试学习笔记丨自动化测试策略

测试人

软件测试 自动化测试 测试开发

K8s技术全景:架构、应用与优化

不在线第一只蜗牛

架构 Kubernetes 容器

事务隔离:为什么你改了我还看不见?

TimeFriends

第一次面字节,一面很简单,二面被疯狂拷打!

王中阳Go

Go 面试题 大厂面试题 校招 大厂面经

小米一面:电商系统开发遇到了哪些问题?

王磊

Java 面试真题

Sql优化之回表

京东科技开发者

一文快速读懂消息推送的到达率、转化率和卸载率

MobTech袤博科技

2024年本机一键验证登录最强指南已出,请查收!

MobTech袤博科技

存储在容器中是如何工作的_语言 & 开发_金灵杰_InfoQ精选文章