写点什么

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

  • 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:003387

评论

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

OpenAI o1 模型到来后,谈谈提示词工程的未来

Baihai IDP

程序员 AI Prompt LLMs 提示词工程

零代码赋能高等教育数字化转型的实践与思考

明道云

普洱市具有资质等保测评机构在哪里?电话多少?

行云管家

网络安全 等保 云南 普洱市

Qt 开发 macOS 应用的技术难点

北京木奇移动技术有限公司

软件外包公司 QT外包开发 QT开发公司

更轻更省!DataSimba敏捷版直播火热预约中

奇点云

想在 Java 八股文面试中脱颖而出?这1000 道互联网大厂 工程师面试题必不可少

Summer

Java 程序员 面试 架构师 编程开发

心理行业需要用到堡垒机的几个情形讲解

行云管家

心理 网络安全 等保 堡垒机

macOS Developer Beta Access Utility(苹果开发者工具)

Rose

SketchUp Pro 2023:专业级3D建模,轻松实现创意构想

Rose

ARM版CentOS Linux系统镜像文件(苹果M1专用) 及安装教程

Rose

车企接连入局人形机器人赛道,「小米」、「小鹏」能否维持先发优势

机器人头条

小米 人形机器人 具身智能 小鹏

在手机上运行基于AirTest的自动化脚本

mobileauto

Python 自动化 Airtest

阿里大佬翻遍全网Java面试文章,总结出这份1658页文档,GitHub收获25K+点赞

Summer

Java 编程 程序员 面试 大厂

创意无限,绘图神器!OmniGraffle Pro,设计新高度

Rose

audirvana mac中文破解版 原生无损音乐播放器

Rose

EndNote X9汉化安装包 及EndNote X9安装教程

Rose

GPUStack v0.4:文生图模型、语音模型、推理引擎版本管理、离线支持和部署本地模型

SEAL安全

Stable Diffusion LLM Whisper Speech-to-Text Text-to-Speech

信创背景下医院信息化建设的挑战与机遇

明道云

WZRY·农活自动化助手

mobileauto

Python 自动化 王者荣耀 手游 Airtest

一个明知没啥前途也要开张的市场开张了

明道云

Sensei for Mac v1.5.9中文版 好用的系统优化清理工具

理理

数字藏品NFT的合约开发

北京木奇移动技术有限公司

软件外包公司 音乐NFT 体育NFT

解锁数据洞察新境界!Tableau Desktop Pro 2020

Rose

流行的写作应用程序和文本编辑器 Ulysses for Mac中文直装版

理理

Sound Control Mac应用音量控制工具

理理

淘宝天猫API接口探索:商品详情与关键字搜索商品列表的实战应用

代码忍者

API 接口 pinduoduo API

MAMP PRO永久版:本地开发神器!

Rose

哪款远程控制软件最合适日常使用?几款远控软件盘点

科技热闻

RFID技术在ERP系统中的集成应用

积木链小链

ERP RFID

“泡沫”催生行业“繁荣”,切入具身智能赛道正当时!!

机器人头条

机器人 强化学习 大模型 人形机器人 具身智能

Cinema 4D R21下载[C4D R21]中文汉化破解版安装方法

理理

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