二、容器隔离的魔法:深入剖析 Linux 命名空间

前言

上一篇文章我们聊到,Linux 的命名空间(Namespaces)和控制组是 K8s 容器化的两大基石。其中命名空间就像给容器画了一个个 “独立结界”,让每个容器里的应用都以为自己独占一台服务器。

但你有没有想过:如果没有这个 “结界” 会怎样?当你同时启动两个 nginx 容器时,它们都会默认监听 80 端口,结果必然是端口冲突;容器里误删了/etc/hosts,宿主机的系统配置也跟着遭殃;查看进程时,宿主机和所有容器的进程混在一起,根本分不清谁是谁。

而命名空间正是为解决这些问题而生的。今天这篇文章就带大家逐一拆解 Linux 的 6 大命名空间,再通过unshare命令亲手打造一个简易容器,让你直观感受隔离的 “魔法”。

一、先搞懂:命名空间到底是什么?

Linux 命名空间是内核提供的一种进程隔离技术。它的核心思路是:对进程可见的系统资源进行 “分组隔离”,让同一命名空间内的进程只能看到本组的资源,看不到其他命名空间的资源。

打个比方,命名空间就像写字楼里的独立办公室。每个办公室(命名空间)里的人(进程)只能看到自己办公室的设备(资源),听不到其他办公室的声音,彼此互不干扰;而写字楼的管理员(Linux 内核)能看到所有办公室的情况,统一管理整栋楼的资源。

在容器技术中,每个容器其实就是一个或一组进程,被包裹在一套完整的命名空间中,从而实现和其他容器、宿主机的隔离。

二、逐一拆解:Linux 的 6 大核心命名空间

Linux 内核提供了 6 种命名空间,分别从进程、网络、文件系统等 6 个维度实现隔离。下面我们逐个剖析,结合通俗解释和实操验证,让你彻底搞懂每个命名空间的作用。

2.1 PID Namespace:进程 ID 的 “独立编号本”

核心作用

隔离进程 ID(PID)。同一命名空间内的进程有独立的 PID 编号序列,不同命名空间的 PID 可以重复,互不影响。

通俗理解

就像两个班级的学生都有 “学号 1” 一样,PID Namespace 让每个容器里都能有PID=1的进程(通常是容器的初始化进程),但这个 PID 在宿主机上会是另一个完全不同的编号。

实操验证
  1. 启动一个容器,进入容器终端查看进程:

    bash

    # 启动busybox容器
    docker run -it --rm busybox /bin/sh
    # 容器内查看进程,PID=1的是/bin/sh
    ps
    
    预期结果:容器内仅显示PID=1/bin/sh进程,看不到宿主机的其他进程。
  2. 打开宿主机新终端,查找该容器对应的宿主机进程:

    bash

    # 查找busybox相关进程
    ps aux | grep busybox
    
    预期结果:会看到容器进程在宿主机上的 PID(比如1234),和容器内的PID=1完全不同。

2.2 Network Namespace:网络的 “独立小局域网”

核心作用

隔离网络资源,包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值