科百科
当前位置: 首页 范文大全

容器技术的特点(容器的四大基础技术)

时间:2023-06-15 作者: 小编 阅读量: 3 栏目名: 范文大全

命名空间、控制组、seccomp和SELinux构成了在系统上构建和运行一个容器进程的Linux技术基础。这就限制了进程能访问的内容,从而限制了它所能获得的资源。这是通过分配给容器与宿主系统有不同的UID和GID范围来实现的。用户命名空间使软件能够以root用户的身份在容器内运行。容器引擎会自动创建每种类型的控制组文件系统,并在容器运行时为每个容器设置配额。下面的命令将确保容器可以使用50000微秒的CPU时间片,并将内存的软、硬限制分别设置为500M和1G。

命名空间、控制组、seccomp 和 SELinux 构成了在系统上构建和运行一个容器进程的 Linux 技术基础。

在以前的文章中,我介绍过 容器镜像及其运行时。在本文中,我研究了容器是如何在一些特殊的 Linux 技术基础上实现的,这其中包括命名空间和控制组。

图1:对容器有贡献的 Linux 技术(Nived Velayudhan, CC BY-SA 4.0)

这些 Linux 技术构成了在系统上构建和运行容器进程的基础:

  1. 命名空间
  2. 控制组(cgroups)
  3. Seccomp
  4. SELinux

命名空间

命名空间namespace 为容器提供了一个隔离层,给容器提供了一个看起来是独占的 Linux 文件系统的视图。这就限制了进程能访问的内容,从而限制了它所能获得的资源。

在创建容器时,Docker 或 Podman 和其他容器技术使用了 Linux 内核中的几个命名空间:

[nivedv@homelab ~]$ docker container run alpine ping 8.8.8.8[nivedv@homelab ~]$ sudo lsns -p 29413NS TYPENPROCSPID USER COMMAND4026531835 cgroup2991 root /usr/lib/systemd/systemd --switched...4026531837 user2781 root /usr/lib/systemd/systemd --switched...4026533105 mnt1 29413 root ping 8.8.8.84026533106 uts1 29413 root ping 8.8.8.84026533107 ipc1 29413 root ping 8.8.8.84026533108 pid1 29413 root ping 8.8.8.84026533110 net1 29413 root ping 8.8.8.8

用户

用户(user)命名空间将用户和组隔离在一个容器内。这是通过分配给容器与宿主系统有不同的 UID 和 GID 范围来实现的。用户命名空间使软件能够以 root 用户的身份在容器内运行。如果入侵者攻击容器,然后逃逸到宿主机上,他们就只能以受限的非 root 身份运行了。

挂载

挂载(mnt)命名空间允许容器有自己的文件系统层次结构视图。你可以在 Linux 系统中的/proc/&lt

ID>/mounts 位置找到每个容器进程的挂载点。

UTS

Unix 分时系统Unix Timeharing System(UTS)命名空间允许容器拥有一个唯一主机名和域名。当你运行一个容器时,即使使用 - name标签,也会使用一个随机的 ID 作为主机名。你可以使用unshare 命令来了解一下这个工作原理。

nivedv@homelab ~]$ docker container run -it --name nived alpine sh/ # hostname 9c9a5edabdd6/ # nivedv@homelab ~]$ sudo unshare -u shsh-5.0# hostname isolated.hostname sh-5.0# hostnameisolated.hostnamesh-5.0# sh-5.0# exitexit[nivedv@homelab ~]$ hostnamehomelab.redhat.com

IPC

进程间通信Inter-Process Communication(IPC)命名空间允许不同的容器进程之间,通过访问共享内存或使用共享消息队列来进行通信。

[root@demo /]# ipcmk -M 10MShared memory id: 0[root@demo /]# ipcmk -M 20MShared memory id: 1[root@demo /]# [root@demo /]# ipcs------ Message Queues --------keymsqidownerpermsused-bytesmessages------ Shared Memory Segments --------keyshmidownerpermsbytesnattchstatus0xd1df416a 0root6441048576000xbd487a9d 1root644209715200------ Semaphore Arrays --------keysemidownerpermsnsems

PID

进程 IDProcess ID(PID)命名空间确保运行在容器内的进程与外部隔离。当你在容器内运行 ps命令时,由于这个命名空间隔离的存在,你只能看到在容器内运行的进程,而不是在宿主机上。

网络

网络(net)命名空间允许容器有自己网络接口、IP 地址、路由表、端口号等视图。容器如何能够与外部通信?你创建的所有容器都会被附加到一个特殊的虚拟网络接口上进行通信。

[nivedv@homelab ~]$ docker container run --rm -it alpine sh/ # ping 8.8.8.8PING 8.8.8.8 (8.8.8.8): 56 data bytes64 bytes from 8.8.8.8: seq=0 ttl=119 time=21.643 ms64 bytes from 8.8.8.8: seq=1 ttl=119 time=20.940 ms^C[root@homelab ~]# ip link show veth84ea6fcveth84ea6fc@if22:

控制组

控制组(cgroup)是组成一个容器的基本模块。控制组会分配和限制容器所使用的资源,如 CPU、内存、网络 I/O 等。容器引擎会自动创建每种类型的控制组文件系统,并在容器运行时为每个容器设置配额。

[root@homelab ~]# lscgroup | grep dockercpuset:/dockernet_cls,net_prio:/dockercpu,cpuacct:/dockerhugetlb:/dockerdevices:/dockerfreezer:/dockermemory:/dockerperf_event:/dockerblkio:/dockerpids:/docker

容器运行时为每个容器设置了控制组值,所有信息都存储在 /sys/fs/cgroup/*/docker。下面的命令将确保容器可以使用 50000 微秒的 CPU 时间片,并将内存的软、硬限制分别设置为 500M 和 1G。

[root@homelab ~]# docker container run -d --name test-cgroups --cpus 0.5 --memory 1G --memory-reservation 500M httpd[root@homelab ~]# lscgroup cpu,cpuacct:/docker memory:/dockercpu,cpuacct:/docker/cpu,cpuacct:/docker/c3503ac704dafea3522d3bb82c77faff840018e857a2a7f669065f05c8b2cc84memory:/docker/memory:/docker/c3503ac704dafea3522d3bb82c77faff840018e857a2a7f669065f05c8b2cc84[root@homelab c....c84]# cat cpu.cfs_period_us 100000[root@homelab c....c84]# cat cpu.cfs_quota_us 50000[root@homelab c....c84]# cat memory.soft_limit_in_bytes 524288000[root@homelab c....c84]# cat memory.limit_in_bytes 1073741824

SECCOMP

Seccomp 意思是“安全计算secure computing”。它是一项 Linux 功能,用于限制应用程序进行的系统调用的集合。例如,Docker 的默认 seccomp 配置文件禁用了大约 44 个系统调用(总计超过 300 个)。

这里的思路是让容器只访问所必须的资源。例如,如果你不需要容器改变主机上的时钟时间,你可能不会使用 clock_adjtimeclock_settime系统调用,屏蔽它们是合理的。同样地,你不希望容器改变内核模块,所以没有必要让它们使用create_moduledelete_module系统调用。

SELinux

SELinux 是“安全增强的 Linuxsecurity-enhanced Linux”的缩写。如果你在你的宿主机上运行的是 Red Hat 发行版,那么 SELinux 是默认启用的。SELinux 可以让你限制一个应用程序只能访问它自己的文件,并阻止任何其他进程访问。因此,如果一个应用程序被破坏了,它将限制该应用程序可以影响或控制的文件数量。通过为文件和进程设置上下文环境以及定义策略来实现,这些策略将限制一个进程可以访问和更改的内容。

容器的 SELinux 策略是由 container-selinux包定义的。默认情况下,容器以container_t标签运行,允许在/usr目录下读取(r)和执行(x),并从/etc目录下读取大部分内容。标签container_var_lib_t是与容器有关的文件的通用标签。

总结

容器是当今 IT 基础设施的一个重要组成部分,也是一项相当有趣的技术。即使你的工作不直接涉及容器化,了解一些基本的容器概念和方法,也能让你体会到它们如何帮助你的组织。容器是建立在开源的 Linux 技术之上的,这使它们变得更加美好。

本文基于 techbeatly的文章,并经授权改编。

via: https://opensource.com/article/21/8/container-linux-technology

作者:Nived V选题:lujun9972译者:wxy校对:turbokernel

本文由 LCTT原创编译,Linux中国荣誉推出

,
    推荐阅读
  • 以前年度业务招待费税前扣除(一文读懂业务招待费税前扣除标准)

    《企业所得税法实施条例》第四十三条:企业发生的与生产经营活动有关的业务招待费支出,按照发生额的60%扣除,但最高不得超过当年销售(营业)收入的0.5%。、年度申报案例:A105060广告费和业务宣传费跨年度纳税调整明细表及填报说明】销售(营业)收入包括销售货物收入、提供劳务收入等主营业务收入,还包括其他业务收入、视同销售收入。超过5万元部分不能税前扣除。

  • 揭西春卷怎么做(揭阳春卷做法)

    主料:五花肉1000克、马蹄1000克、蒜苗350克、香菇(干)250克、虾米250克、面粉500克、鸡蛋6个、食盐2茶匙、蚝油适量、鸡精适量、五香粉6克、豆膜适量;,下面我们就来说一说关于揭西春卷怎么做?马蹄去皮切粗粒,五花肉去皮切成1厘米左右的厚度,蒜苗切小段,香菇泡好切片。打入鸡蛋,加食盐,蚝油,鸡精,五香粉搅拌均匀。豆腐膜从中间切开,只用一半的长度。关火同时再包第二锅,要是家里蒸锅数量多,也可以一次性包好。

  • 油菜花里的守望者(油菜花里的守望者)

    在影片中,因为母亲外出打工,旺旺从小就患上了“缺爱症”。应该说,临产女人的出现在旺旺的潜意识中充当了“母亲”的角色。所以,面对女人的出走,旺旺站在油菜地里大吼大叫。在生活中,旺旺是一个性格怪诞的小孩。这一刻,对旺旺来说,也意味着青春和爱的复苏和觉醒。因此,我们称之为这是一部具有母性气质的暖片绝不为过。

  • 奔驰b级买哪个好(奔驰B级不受欢迎)

    机油泵目前存在故障,需要去正规的店面进一步检修机油泵阀门线束等部位,看一下具体哪个部件出问题了。客户了解车况后,对这车算是比较满意。我们作为独立第三方检测机构,主要就是负责在粉丝买车之前,帮粉丝检查车辆是不是有过事故,至于成交与否就看车况粉丝是否满意了,我们的职责是不促

  • 乌拉盖草原几月去最好(这些月份去风景最好)

    接下来我们就一起去了解一下吧!乌拉盖草原几月去最好最佳旅游时间一般为夏季,每年的5月~9月份这段时间草原上的气候温和是草原旅游的最佳时间段。而7月~9月份这三个月由于草原上的草已经非常茂盛,且牛羊成群在草原上可以真正感受到“风吹草低见牛羊”的意境,而且这段时间还能草原上还有各种各样的活动盛会,非常热闹。

  • 司藤那个叫什么族(司藤的简介)

    司藤,异界外星苅族之产物,异变于西南,性狠辣,逢敌从无败绩,同类切齿,悬门色变。《司藤》是由李木戈执导,景甜、张彬彬、李沐宸、张亦驰领衔主演,吴俊余特别主演的奇幻悬爱剧。该剧改编自尾鱼同名小说,讲述了设计师秦放意外坠入山崖,唤醒沉睡数十年的外星后裔司藤,两人彼此守护共同成长的故事。

  • 2021洛阳牡丹节赏花旅游活动有哪些(2021洛阳牡丹节赏花旅游活动有哪些景点)

    国色天香·赏花旅游板块赏花游园系列活动时间:4月1日至5月10日地点:洛阳各牡丹观赏园、龙门石窟内容:1.第39届中国洛阳牡丹文化节赏花游园、研学、快闪活动(中国国花园)2.“王城之春”第十三届国际牡丹插花花艺展、洛阳牡丹灯会等(王城公园)3.牡丹仙子花车巡游、百姓大舞台、七彩隋唐摄影大赛等(隋唐城遗址植物园)4.国际牡丹切花花艺大赛(神州牡丹园)5.2021国家牡丹园梦幻灯光节6.高山牡丹、百年

  • 酸菜炖鱼块的家常做法(酸菜炖鱼块的家常做法与步骤)

    分别在鱼块的所有的部位,依次抹上料酒、盐(一勺半)、一半的五香粉,再撒上一半切好的葱、姜、蒜,盖上盖子腌20分钟。煎好的鱼取出,若锅里油不多就再加点,火调大一些,爆香葱姜蒜小辣椒,加入酸菜炒透,期间盐和五香粉要加入,炒好后倒入开水,把鱼均匀放入,烧开。

  • 必须断奶的10种方法(附快速轻松断奶方法)

    豆豆平时一直配搭着喝一点奶粉,每次大概60ML,所以提前适应奶粉这一关就可以省略了。辅食方面,豆豆也进入了蛋鱼肉、蔬菜、米面和水果全面摄取的阶段,断了母乳,营养也应该没有问题。都说傍晚的娃要找娘,果然,到了近傍晚,豆豆的奶瘾就上来了,哼哼唧唧要吃奶。感谢姥姥提供的断奶绝招;感谢家人的紧密配合;感谢豆豆体贴妈妈;感谢自然的造物主……