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

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

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

命名空间、控制组、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中国荣誉推出

,
    推荐阅读
  • 谭松韵个人资料(以娃娃脸霸屏的谭松韵)

    谭松韵又获奖了,这次是第五届金骨朵网络影视盛典的“年度最佳女演员”。这么看来,谭松韵的少女时期确实是顺风顺水的。穿上熟悉的蓝白校服、留着乖巧的学生头,26岁谭松韵在我看来就是16岁女高中生。从出道以来,那张人畜无害的“娃娃脸”就一直是谭松韵的标志。而如今的谭松韵造型则越发出彩。穿起薄纱礼裙,搭配柔顺长直发,此时的谭松韵精致又优雅。穿蓬蓬大礼裙、编着清爽盘发,30岁谭松韵仿佛自带偶像剧女主光芒。

  • 描写植物的作文三年级(描写植物的三年级作文范文)

    我们一起去了解并探讨一下这个问题吧!开始,小草只有像绿豆一样的一颗绿点点。现在,这株小草长得可健壮了。叶子向四面八方展开,靠近根部的叶子是紫红色的,叶子顺着茎的高度慢慢地变绿。这种渐变色让这株无名小草变得漂亮了。在草的头尖上,有八、九个小花苞,有的正含苞欲放,有的开出了淡黄色的花。最主要的是我发现它是长在水泥地里的。原来,它的根深深地扎进墙缝里。小草顽强的生命力真的令人佩服。我一定要保护它。

  • 微波炉怎么正确烤红薯(微波炉烤红薯10分钟就搞定)

    像这个大小的红薯有164g,大概不算皮有个150g吧,那么热量可以算245kcal,相当于大概215g的米饭。那你要是买的是街头那大个的烤红薯,那估计得有一顿饭的热量了吧!如果你没有把烤红薯当主食吃,而且一次吃的量很多,那自然就变成了增肥食物,所以量很重要。你看不能以为红薯是粗粮就多吃,扛不住,它是个粮食啊!但明显,烤红薯的个头都不小。所以,把烤红薯当主食,和杂豆粗粮换着吃,既营养又健康,妙啊!

  • 90届奥斯卡最佳男配角提名(重口味的人兽恋)

    奥斯卡提名名单出来后,一部讲述人兽恋的黑马《水形物语》却拿到了13个提名率先领跑。不过提名拿得多,得不得奖可说不定了,去年的《爱乐之城》也是获得了13个提名,不过最终还是错失了最佳影片。由莎莉·霍金斯饰演的女主艾丽莎是个哑女,由于天生有缺陷,而她却要竭尽全力地去救一只怪兽,并且爱上了他。可是莎莉·霍金斯把哑女的善良、充满好奇、溢满感动都饰演的淋漓尽致,真的不得不让人佩服。

  • 一场释放心灵的温泉旅游(用一场周边的温泉之行)

    重庆旅游在重庆,你要问最适合秋冬的活动是什么?大部分人都会想到它全身都沉浸在温暖的汤浴里,寒意与疲惫统统被一扫而空。北温泉、南温泉、统景温泉、天赐温泉、海昌汤都、海棠晓月、东温泉,温泉之行,安排!若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢。

  • 学学螃蟹怎么挑选(如何挑一篓靠谱)

    今年多部委联合发文,对超过500元以上的月饼礼盒重点监管,但螃蟹躲在价更高、水更深的地带,还没有引起足够重视。蟹券的第一个套路就能把人整蒙圈,姑且称之为虚标价格。可实际上,这些“标价”与实际售价并无直接联系,也没有统一标准。因此,就算消费者能忍,监管部门也不能放任纸螃蟹“吹牛”。近期,市场监管总局表示要在全国开展为期两个月的商品过度包装、“天价”月饼和蟹卡蟹券专项整治。

  • 庆余年若若扮演者(庆余年若若演过什么剧)

    接下来我们就一起去研究一下吧!庆余年若若扮演者《庆余年》中,范若若扮演者是宋轶。宋轶,1989年10月31日出生于湖北省荆门市,中国内地女演员,毕业于中央戏剧学院表演系。

  • 科三全程考试项目及过程(科三全考点总结)

    打开车门前需观察后方交通情况。直线行驶:进入直线行驶前,先换至三挡,已每小时30公里幅度行驶,直线行驶时注意不跑偏,保持适当跟车距离,适时通过内、外后视镜观察交通情况,视线离开不高于2秒。确认安全后,驶入左侧车道,鸣笛或交替使用远近光灯提醒,保持与被超车车辆安全距离后加速超越。超越后,打右转向灯,通过内外后视镜观察,确认安全后驶回原车道。会车:会车前,提前刹车减速至30公里/小时以内。

  • 邓大眼盗墓是什么电影(邓大眼盗墓是一部什么电影)

    销魂玉中国香港,98分钟,1979年12月22日,现在小编就来说说关于邓大眼盗墓是什么电影?下面内容希望能帮助到你,我们来一起看看吧!影片讲述了三个青山精神病院病人讲述的奇异故事。

  • 四下unit2 story time教学(四下Unit5Part)

    以下内容大家不妨参考一二希望能帮到您!四下unit2storytime教学Unit5PartB第2课时一、听录音,写单词。shirt2.old3.sweater4.new5.socks6.jacket7.shortsA.毛衣B.夹克衫C.短袜D.衬衫E.短裤F.新的G.旧的四、用be动词的适当形式填空。()2.妈妈想知道你找的那件外套是什么颜色的,她会问:______A.Whatcolourarethey?