首页 > 其他分享 >[Docker]Namespace与Cgroups

[Docker]Namespace与Cgroups

时间:2023-04-13 15:22:10浏览次数:48  
标签:容器 Cgroups 隔离 Namespace Linux 进程 Docker

目录

什么是 Namespace?

Namespace 是 Linux 容器技术的一个重要概念,其作用是对运行于其中的进程提供隔离,确保容器和宿主机之间是完全隔离的。Namespace 在 Linux 内核中已经存在了很长一段时间,最初的设计目的是为了更好地支持多用户场景下的文件系统挂载。自那以后,Namespace 已经得到了进一步的扩展和应用,成为了实现容器隔离的主要技术之一。

Namespace 技术的核心思想是将一个进程的视角从全局视图中调整到一个更加狭窄的、虚拟化的空间中,使其认为自己是运行在一个独立的环境中,从而实现进程间的隔离。这种隔离范围不仅包括文件系统、网络、进程编号空间等,还包括主机名、用户等信息。通过使用 Namespace 技术,可以达到企业级隔离和完全隔离的效果。

Namespace 的类型

Linux 中有以下 7 种不同的 namespace,每种 namespace 对于容器技术的实现具有不同的作用和意义:

  1. PID Namespace:PID Namespace 用于隔离容器内的进程编号空间,使得在不同的 PID Namespace 中运行的进程看起来像是在独立的进程空间中运行,而不会彼此混淆。

  2. Mount Namespace:Mount Namespace 用于隔离文件系统挂载点,使得不同的容器之间可以拥有自己独立的文件系统结构,不会相互影响。容器中的文件系统会被 chroot 到指定的目录中,并使用各自的 Mount Namespace 维护文件系统状态。

  3. IPC Namespace:IPC Namespace 用于隔离某些进程间通信(IPC)资源,包括 System V IPC 和 POSIX IPC。在不同的 IPC Namespace 中运行的进程无法相互通信,从而实现了进程间通信隔离。

  4. Net Namespace:Net Namespace 用于隔离网络设备、网络栈、端口和路由信息等。不同的 Net Namespace 中可以拥有自己独立的网络资源,可以实现不同容器的互访与隔离。

  5. UTS Namespace:UTS Namespace 用于隔离主机名和域名等系统识别信息。为不同的容器分配不同的容器名,从而避免名称冲突,提高了容器之间的独立性。

  6. User Namespace:User Namespace 用于隔离用户和用户组的编号空间。(UID 和 GID)。在容器中运行的进程可以拥有唯一的 UID 和 GID,这样做可以避免容器进程干扰宿主机进程,提高容器进程的独立性。

  7. Cgroup Namespace:Cgroup Namespace 用于对应不同的控制组层次结构,可以在应用级别隔离应用程序的资源。每个应用程序会视为一个单独的控制组层级,控制组中运行的进程仅可访问该控制组的资源。

综上所述,Linux 中有 7 种不同的 namespace,每种 namespace 都有自身的独特作用,将容器中的进程、文件系统、网络等资源隔离封装,保证了容器环境之间的相对独立性,从而为容器提供了更高的安全性和可靠性。

Namespace 的实现和使用

在使用 Namespace 时,需要使用系统调用来创建和管理 Namespace。可以使用 clone() 系统调用创建一个新的 Namespace,并使用 setns() 系统调用将一个进程移动到另一个 Namespace 中。这些系统调用提供了官方的程序接口,使得程序员可以在 Linux 内核空间中使用 Namespace 技术,实现容器隔离。

在 Docker 中,Namespace 技术被广泛应用。Docker 使用 Namespace 来提供容器内部的隔离,隔离文件系统、网络设备、进程编号、进程之间通信等等。同时,Docker 还支持用户自定义的 Namespace 类型,因此用户可以根据自己的需求创建自己的 Namespace。

什么是 Cgroups?

Cgroups (control groups) 是 Linux 系统中的一种容器内核技术,它可以限制进程组使用的资源数量和分配,并将它们隔离到一个或多个分层的分组中,以实现对进程、任务或用户组的资源限制。

Cgroups 可以限制多种计算机资源,包括CPU、内存、网络带宽、磁盘I / O等,并允许系统管理员调整和控制该进程组的资源限制。这使得 Cgroups 成为用于容器隔离的关键技术,并可以帮助保护系统免受不安全或恶意代码的破坏。

Cgroups 的特征

Cgroups 是一种强大的容器内核技术,并具有以下特征:

  • 层次结构:Cgroups 可以组合为一个有层次结构的组的集合,并且可以在层次结构中设置各种限制条件,这使得限制和资源管理更加透明和灵活。

  • 动态管理:Cgroups 允许在运行时动态地添加、删除、和更改各个控制组和组中的进程和资源。

  • 用户定义:Cgroups 允许用户定义各种限制条件,以适应特定应用场景,使得 Cgroups 更加适应各种不同的应用。

Cgroups 的使用

Cgroups 是 Linux 内核的一部分,可以通过系统调用(syscalls)实现 Cgroups。在 Cgroups 启用之后,它会根据其自定义的规则来动态地限制诸如 CPU、内存、I/O 等系统资源的进程组。

在使用 Cgroups 时,可能需要先安装 cgroup-tools 和 libcgroup 工具。这些工具提供了访问 Cgroups 功能的实用程序,使得用户可以管理、观察和测试资源限制条件。

在 Docker、Kubernetes 等容器平台中,Cgroups 正在被广泛使用。通过将不同的容器放在 Cgroups 分组中,这些容器之间可以保持资源隔离和独立性,并可以在 OS 级别上分配计算机资源,这提供了更好的容器隔离和性能管理,也成为当前流行的容器的核心技术之一。

总结

Namespace 是 Linux 中的一个重要概念,也是容器技术的核心。它可以将一个进程的视角从系统全局视图调整到一个虚拟化的空间中,实现进程的隔离和保护。Linux 提供了几种不同类型的 Namespace,每种 Namespace 都具有不同的用途和作用。在构建容器时,我们需要使用这些不同类型的 Namespace 来隔离非必要的应用程序和文件系统,提高容器的安全性和可靠性。

Cgroups 是一种强大的容器内核技术,与 Linux 内核一起提供资源管理和限制的功能,可以实现限制进程的资源使用和分配,并保持它们隔离在一个或多个分层的分组中。在 Docker、Kubernetes 等容器平台中,Cgroups 正在被广泛应用,可以帮助实现更好的容器隔离和性能管理。

参考连接

标签:容器,Cgroups,隔离,Namespace,Linux,进程,Docker
From: https://www.cnblogs.com/Skybiubiu/p/17314971.html

相关文章

  • Docker MySql8 创建、删除、授权用户
    1、登录MySql8#登录数据库dockerexec-itmysql8mysql-uroot-proot123456#切换数据库实例usemysql;2、用户操作2.1、查看用户selecthost,user,authentication_string,pluginfromuser;2.2、创建本地用户#创建一个用户名为admin,密码为admin123456的......
  • 1 容器操作 、2 应用部署、3 迁移与备份、 4 Dockerfile
    目录1容器操作2应用部署2.1mysql部署2.2redis2.3nginx3迁移与备份4Dockerfile1容器操作#启动容器 dockerstart容器id#停止容器 dockerstop容器id#文件拷贝 #容器的文件copy到宿主机上(不是在容器内执行)dockercp容器名称:容器目录需要拷贝的文件或......
  • Docker 镜像制作
    容器转为镜像容器转为镜像dockercommit容器id镜像名称:版本号镜像生成压缩文件dockersave-o压缩文件名称镜像名称:版本号压缩文件解压为镜像dockerload-i压缩文件名称 Dockfile生成镜像......
  • a note when using docker locally
    whenbuildingthegetting-startedapplicationprovidedbyofficialsite,Igotaerrorsaying, #0138.4node-pre-gypERR!installrequesttohttps://github.com/TryGhost/node-sqlite3/releases/download/v5.1.2/napi-v6-linux-musl-x64.tar.gzfailed,reason:so......
  • 在dockerfile中使用非root用户
    16、在dockerfile中使用非root用户前言:当在运行容器时,默认都是以root的账号进行启动的,但这个root账号和宿主机的root账号的权限是不一样的,会受到capabilities的限制。那如果是非特权的容器,使用容器的root账号启动是否安全的呢。(1)启动一个centos-test的容器#dockerrun......
  • PaddleSpeech docker develop-gpu-cuda10.2-cudnn7-latest 缺失 libsndfile1-dev 和
    Paddle可以說是各種坑,但支持國產,含淚試用了百度飛漿的Speech。1.坑點Dockerdevelop-gpu-cuda10.2-cudnn7-latest缺失:1.libsndfile1-dev2.CUDA_VISIBLE_DEVICES 2.安裝教程也沒什麼安裝教程。下載docker鏡像和項目源碼。dockerpullpaddlecloud/paddlespeech:devel......
  • CentOS安装Docker、Docker-Compose
    一、安装Docker二、安装Docker-Compose2.1sudocurl-L"https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-$(uname-s)-$(uname-m)"-o/usr/local/bin/docker-compose2.2安装完后执行:sudochmod+x/usr/local/bin/docker-compose......
  • docker的技术学习
    Docker神器的使用原创 生信小尧 生信小尧 2023-02-2117:38 发表于广东收录于合集#linux5个 点击蓝字关注我们  什么是Docker?Docker是一个开源的应用容器引擎诞生于2013年初,基于Go语言实现,dotCloud公司出品(后改名为DockerInc)Docker可以让开发......
  • 学习笔记397—Docker数据管理
    Docker有两种数据管理的方式数据卷:容器内数据直接映射到本地主机环境;数据卷容器:使用特定容器维护数据卷.数据卷数据卷是一个可供容器使用的特殊==目录==,它将主机操作系统目录直接映射进容器数据卷的特性:可以在容器之间共享和重用,容器间传递数据将变得高效与方......
  • Docker介绍下载安装、制作镜像及容器、做目录映射、做端口映射
    在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物......