Linux容器如何工作?

原文

Linux容器如何工作

我有机会在工作中使用几种不同的容器技术,所以我想我会写一些博客文章来解释容器是什么,并深入探讨LXC的工作方式。

什么是容器?

将计算资源分配到单个裸机(bare metal)主机上有时很有用。也许你想要隔离进程的安全性,或者只是想要最有效地使用计算机上可用的计算资源。Unix系统早在1979年就拥有了chroot的隔离功能,而2005年标志着对虚拟化兴趣的复苏。Chroot环境允许系统管理员限制进程只能访问文件系统上的特定子目录树,但不支持限制对其他资源(CPU,内存,网络等)的访问。虚拟化在主操作系统之上引入了虚拟机管理程序(hypervisor)层,允许在现有系统之上创建新的虚拟机。

虽然这提供了隔离,但它会因为在客户虚拟机上安装另一个操作系统副本而引入开销。与这两种方法相比,你可以将容器想象为chroot概念的扩展。它限制对主机文件系统特定部分的访问,但也提供了限制访问主机上其他计算资源的机制。与虚拟机相比,容器使用主机操作系统和内核来提供隔离和限制,因此可以完全避免虚拟机管理程序和客户操作系统层的开销。Docker的人创建了一个非常好的图形,比较了虚拟机和容器之间差异 。结果是,更多的计算资源可用于你真正关心的进程,并且容器环境的设置比创建类似的虚拟机环境简单得多。

容器如何工作?

容器通过四个主要组件工作: 名称空间(namespaces)控制组(cgroups)映像(images)和用户空间工具,如LXCdocker

在传统的Linux系统中, init进程在机器启动时启动,并且每个后续进程都从其父进程派生(fork-execed)出来(init在进程树的根上)。每个正在运行的进程都存在于一个相同的环境中,并且能够访问该计算机上的所有资源。命名空间允许你将资源组合到一个共同的集合中。然后可以将进程与该名称空间相关联,从而为他们提供该机器上可用资源的更有限视图。Linux内核中目前有六个命名空间。这些大致可以分为:安装,进程,网络,进程间通信,主机名和用户(mount, process, network, interprocess communication, hostname, 和 user)。命名空间的价值应该是明确的:例如,如果一个进程需要对网络进行更改,则可以自由进行,而不会影响其他命名空间中的进程。这与容器有何关系?回想一下,Linux系统上的所有进程都从init进程派生。Linux容器的一个主要组件是在新的命名空间下创建一个新的init进程。没有名称空间功能,就不可能在主机上运行多个init进程。因此,仅凭名称空间(namespaces),我们就有能力生成一个进程树并操纵一些底层系统资源,而不会影响主机系统。如果容器的主要优点之一是隔离,那么是什么来阻止新产生的容器过度使用主机的资源呢?例如消耗太多的磁盘,内存或处理能力?这是cgroups发挥作用的地方。

C组(或“控制组(control groups)”)负责限制和记录系统资源的使用情况。该功能在2008年Linux内核中开始可用。使用cgroups,我们可以限制CPU使用率,内存,磁盘等等。描述如何配置cgroup超出了本概述的范围,但如果你想了解更多信息,可以查看内核文档 。通过命名空间和cgroups的组合,我们能够生成一个单独的进程层次结构(process hierarchy),并对系统资源进行有限的访问,并且我们可以限制这个进程层次结构对它可以看到的资源的访问量。尽管如此,我们仍然缺少容器生态系统的一个主要组件,那就是它可以访问的文件系统的内容。

容器最常见的误解之一是它们“就像一个迷你虚拟机”。混乱是可以理解的。当你在Linux容器中时,它看起来就像任何其他Linux发行版一样。你会看到你熟悉的文件系统布局,设备和系统软件。但是容器文件系统的内容不是完整的操作系统,而是目标操作系统的精简版本。底层资源和内核由主机提供,系统软件和设备由映像提供。因此,主机Linux发行版能够运行看起来完全不同的Linux发行版的容器。映像本身是通过采用超薄版本的目标发布版创建的,并以减小其大小并使其可在容器中运行的方式进行操作。描述这些映像的构建方式也超出了本文的范围,但你可以通过查看LXC github存储库来了解如何创建LXC映像。因此命名空间,cgroup和映像提供了三个主要的构建块,使容器可以工作。最后剩下的技术是一组用户工具,它们可以让你无缝地操纵这些概念并在容器内部创建自己的环境。在下一篇文章中,我将详细介绍如何使用LXC来实现这一点。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • Docker白皮书 译者:李毅 中国惠普大学资深培训专家 摘要 最近几年中软件开发方式的演进已经根本性地改变了应...
    Leo_Liyi阅读 970评论 0 1
  • 一、Docker 简介 Docker 两个主要部件:Docker: 开源的容器虚拟化平台Docker Hub: 用...
    R_X阅读 4,377评论 0 27
  • Docker容器技术已经发展了好些年,在很多项目都有应用,线上运行也很稳定。整理了部分Docker的学习笔记以及新...
    __七把刀__阅读 11,422评论 0 59
  • 今儿必须写一下关于回家后开车的各种不爽了(特指老区但不限于老区) 路窄、汽车多、自行车、电瓶车还有三马子到处都是,...
    婧哔哔阅读 415评论 0 0
  • 今早,路上,桃花灿然怒放了。 1 美人含笑靥生花, 相看丹唇含玉砂。 天色莫嫌多晦暗, 一街流火亮如霞。 3 花似...
    庆善阅读 516评论 4 8