在运维工作中,docker封闭了哪些资源?
在运维工作中,Docker主要通过两种关键技术——命名空间(Namespaces)和控制组(cgroups)——来实现资源的封闭和隔离。以下是Docker封闭的主要资源类型及其具体实现方式:
1. 通过命名空间实现资源隔离
命名空间是Linux内核提供的一种资源隔离方案,它使得一组进程能够拥有自己独立的系统资源视图,从而避免与其他进程产生冲突。Docker利用这一机制,为每个容器提供了独立的运行环境。具体来说,Docker使用了以下几种命名空间:
- PID命名空间:确保每个容器都有自己独立的进程ID列表,容器内的进程不会与宿主机或其他容器的进程相互干扰。
- 网络命名空间:为每个容器提供独立的网络接口和虚拟IP地址,使得容器能够拥有自己独立的网络环境,实现网络资源的封闭。
- 挂载命名空间:隔离文件系统的挂载点,让不同容器有不同的文件视图。这保证了容器内对文件系统的操作不会影响到宿主机或其他容器。
此外,Docker还使用了UTS命名空间(提供主机名和域名隔离)、IPC命名空间(提供信号量、消息队列和共享内存隔离)等,以实现更全面的资源隔离。
2. 通过控制组实现资源限制
控制组(cgroups)是Linux内核提供的一种机制,用于限制、记录和隔离进程组所使用的物理资源。Docker利用这一机制,对容器的CPU、内存、磁盘IO等资源进行了精确的控制和限制。具体来说:
- CPU资源限制:
- 通过
--cpus参数设置容器可以使用的CPU核心数。 - 通过
--cpu-shares参数设置容器在CPU资源竞争中的权重。 - 通过
--cpu-period和--cpu-quota参数设置容器在每个CPU调度周期内的使用时间上限。
- 通过
- 内存资源限制:
- 通过
--memory参数设置容器可以使用的最大内存量。 - 通过
--memory-swap参数设置容器可以使用的内存和swap空间的总和。
- 通过
- 磁盘IO资源限制:
- 通过
--device-read-bps和--device-write-bps参数限制容器对特定设备的读写速度。 - 通过
--blkio-weight参数设置容器在磁盘IO资源竞争中的权重。
- 通过
3. 其他资源封闭措施
除了上述通过命名空间和控制组实现的资源封闭和限制外,Docker还采取了以下措施来确保容器的安全性和稳定性:
- 文件系统隔离:Docker使用Union File System技术,将容器的文件系统与宿主机的文件系统隔离开来。容器内的文件操作只会在其自己的可写层中进行,不会影响到宿主机的文件系统。
- 进程隔离:由于容器内的进程运行在独立的PID命名空间中,因此它们与宿主机上的其他进程相互隔离。这保证了容器内的进程不会干扰到宿主机的进程调度和运行。
- 网络隔离:通过Docker的网络驱动(如Bridge、Overlay等),实现了容器与宿主机、容器与容器之间的网络隔离。这使得容器能够拥有自己独立的网络环境,提高了网络的安全性。
综上所述,Docker通过命名空间和控制组等技术手段,实现了对CPU、内存、磁盘IO等多种资源的封闭和限制。这些措施不仅提高了容器的安全性和稳定性,还为运维人员提供了更灵活的资源管理手段。

浙公网安备 33010602011771号