运维进阶dockernamespace、cgroup介绍

2023年 10月 7日 65.2k 0

引申的问题

1.怎么样保证每个容器都有不同的文件系统并且 能互不影响?
2.一个docker主进程内的各个容器都是其子进 程,那么实现同一个主进程下不同类型的子进 程?各个进程间通信能相互访问(内存数据)吗?
3.每个容器怎么解决IP及端口分配的问题?
4.多个容器的主机名能一样吗?
5.每个容器都要不要有root用户?怎么解决账户 重名问题?

NameSpace技术

image.png

MNT Namespace(磁盘挂载点和文件系统的隔离)

每个容器都要有独立的根文件 系统有独立的用户空间
使用chroot技术把 容器的根运行环境(容器根目录) 锁定到一个指定的目录

image.png

IPC Namespace(进程间通信的隔离)

IPC namespce隔离进程间通 信资源(同一个IPC namespace的进程可实现内 存等资源共享,但是不同的 IPC namespace则严格隔离)
image.png

UTS Namespace(主机名隔离)

UTS namespace(UNIX Timesharing System包含了运行 内核的名称、版本、底层体系结 构类型等信息)用于系统标识, 其中包含了hostname 和域名 domainname ,它使得一个容 器拥有属于自己hostname标 识,这个主机名标识独立于宿主 机系统和其上的其他容器

image.png

PID Namespace(进程隔离)

Linux系统中,有一个PID为1的进 程(init/systemd)是其他所有进程 的父进程,那么在每个容器内也 要有一个父进程来管理其下属的 子进程,那么多个容器的进程通 PID namespace进程隔离(比如 PID编号重复、器内的主进程生成 与回收子进程等)

image.png

Net Namespace(网络隔离)

每一个容器都类似于虚拟机一 样有自己的网卡、监听端口、 TCP/IP协议栈等,docker使用 network namespace启动一 个vethX接口,这样你的容器 将拥有它自己的桥接ip地址, 通常是docker0,而docker0 实质就是Linux的虚拟网桥,网 桥是在OSI七层模型的数据链 路层的网络设备,通过mac地 址对网络进行划分,并且在不 同网络直接传递数据。

image.png

User Namespace(用户隔离)

供用户隔离:

  • 各个容器内可能会出现重名的用户 和用户组名称,或重复的用户UID 或者GID,那么怎么隔离各个容器 内的用户空间呢?

  • User Namespace允许在各个宿 主机的各个容器空间内创建相同的 用户名以及相同的用户UID和 GID,只是会把用户的作用范围限 制在每个容器内,即A容器和B容 器可以有相同的用户名称和ID的账 户,但是此用户的有效范围仅是当 前容器内,不能访问另外一个容器 内的文件系统,即相互隔离、互不 影响

image.png

linux cgroups技术(Linux Control Groups)

背景:
在一个容器,如果不对其做任何资源限制,则宿主机会允许其占用无限大的内存空间,有时候会因为代码bug程序会一直申请内存,直到把宿主机内存占完

限制一个进程组能够使用的资源上限,包括CPU、内存、磁盘、网络带宽等等。还能够对进程进行优先级设置,以及将进程挂起和恢复等操作。

image.png

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论