Docker容器的本质,如何实现的 资源隔离、资源限制

Docker容器基于Linux内核的namespace和cgroups技术实现资源隔离与限制。namespace提供进程、文件系统、网络、用户等多方面的隔离,而cgroups则用于限制和控制资源使用,如CPU、内存。尽管namespace能实现一定程度的隔离,但仍有如时间这类资源无法完全隔离,且容器暴露的风险较高。了解这些机制有助于深入理解Docker容器的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

docker 容器本质:
  1. 容器其实就是Linux下一个特殊的进程;
  2. Docker容器通过namespace实现进程隔离通过cgroups实现资源限制;
  3. Docker镜像(rootfs)是一个操作系统的所有文件和目录而不包括内核,Docker镜像是共享宿主机的内核的;
  4. Docker镜像是以只读方式挂载,所有的增删改都只会作用在容器层, 但是相同的文件会覆盖掉下一层,这种方式也被称为"Copy-on-write";
使用Namespace进行容器的隔离有什么缺点呢?

最大的缺点就是隔离不彻底

  1. 容器知识运行在宿主机上的一种特殊的进程,那么多个容器之间使用的就还是同一个宿主机的操作系统内核
  2. 在Linux内核中,有很多资源和对象是不能被Namespace化的,最典型的例子是:时间即如果某个容器修改了时间,那整个宿主机的时间都会随之修改
  3. 容器给应用暴露出来的攻击面比较大,在生产环境中,没有人敢把运行在物理机上的Linux容器暴露在公网上

linux 内核的namespace机制

  • namespace 机制提供一种资源隔离方案。
  • PID,IPC,Network 等系统资源不再是全局性的,而是属于某个特定的Namespace。
  • 每个 namespace下的资源对于其他的 namespace下的资源是透明的,不可见的。

Linux内核实现 namespace的一个主要目的就是实现轻量级虚拟化(容器)服务,在同一个 namespace下的进程可以感知彼此的变化,而对外界的进程一无所知,以达到独立和隔离的目的。

namespace可以隔离什么

一个容器要想与其他容器互不干扰需要能够做到:

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值