Docker底层技术Namespace & Cgroup应用

Docker底层技术:

docker底层的2个核心技术分别是Namespaces和Control groups
Namespace:是容器虚拟化的核心技术,用来隔离各个容器,可解决容器之间的冲突。

主要通过以下六项隔离技术来实现:
有两个伪文件系统:/proc和/sys/

  • UTS:允许每个container拥有独立的hostname(主机名)和domainname(域名),使其在网络上可以被视作一个独立的节点而非Host上的一个进程。
  • IPC:contaner中进程交互还是采用linux常见的进程间交互方法,包括常见的信号量,消息队列和共享内存。container的进程间交互实际上还是host上具有相同pid中的进程交互。
  • PID:不同用户的进程就是通过pid namesapce隔离开的,且不同namespace中可以有相同pid。所有的LXC(linux containers)进程在docker中的父进程为docker进程,每个LXC进程具有不同的namespace。
  • NET:不同用户的进程就是通过pidnamespace隔离开的,且不同namespace中可以有相同pid。所有的LXC进程在docker中的父进程为docker进程,每个lxc进程具有不同的namespace。
  • MNT:文件系统的挂载点。
  • USRE:每个container可以有不同的user和groupid,也就是说可以在container内部用container内部的用户执行程序而非Host上的用户。
只要解耦了这6项,其他系统资源即便有共用的情况,计算机也认为是在两个不同的系统中。

cgroup(控制程序对资源的占用)
实现cgroup是的主要目的是为不同用户层面的资源管理,提供一个统一化的接口。从单个进程的资源控制到操作系统层面的虚拟化。

cgroup的作用:
1) 资源的限制:cgroup可以对进程组使用的资源总额进行限制。
2) 优先级分配:通过分配的cpu时间片数量及磁盘IO带宽大小,实际上就是相当于控制了进程运行的优先级
3) 资源统计:Cgroup可以统计系统资源使用量。比如cpu使用时间,内存使用量等。
可用于按量计费。
4) 进程控制:可以对进程组执行挂起,恢复等操作。

cgroup的应用:

1)内存和交换分区的限制:
容器内包括两个部分:物理内存和swap

 在docker中可以通过参数控制容器内存的使用:
 -m或--memory:设置内存的使用限额
--memory-swap:设置swap(交换分区)的使用限额

//基于centos镜像,限制内存为200M,交换分区的内存为300M
[[email protected] ~]# docker run -it -m 200M --memory-swap 300M centos

进入容器查看限制的内存:

[[email protected] /]# cat /sys/fs/cgroup/memory/memory.limit_in_bytes
209715200     #显示的是字节

[[email protected] /]# cat /sys/fs/cgroup/memory/memory.memsw.limit_in_bytes
314572800

2)容器对cpu限制:
通过-c或者--cpu-shares设置容器实验cpu的权重。如果不设置默认是1024.

//基于centos镜像,运行一个容器,名字为containerB,cpu权重限制为512:
[[email protected] ~]# docker run -it --name containerB -c 512 centos
[[email protected] /]# cat /sys/fs/cgroup/cpu/cpu.shares
512

3)限制容器的Block io(磁盘的读写):

bps:每秒读写的数据量。byte per second
iops:每秒io的次数。 io per second

--device-read-bps:设置读取设备的bps
--device-write-bps:设置写入设备的bps

--device-read-iops:设置读取设备的iops
--device-write-iops:设置写入设备的iops

//创建一个容器名为testA,并限制该磁盘每秒写入的数量为为30MB。
[[email protected] ~]# docker run -it --name testA --device-write-bps /dev/sda:30MB centos

写入数据进行测试:

参数解释:
infile=从/dev/zero中提取
outfile=自定义一个名称
bs=1M 文件大小为1M
count=800 总共写800次。
oflag=direct:用来指定directory IO方式写文件,这样才会使--device-write-bps生效。

可以发现每秒写入的数量为80M,大概用时26s。

正常写入磁盘时:

———————— 本文至此结束,感谢阅读 ————————

原文地址:https://blog.51cto.com/13972012/2446058

时间: 2024-08-29 20:44:40

Docker底层技术Namespace & Cgroup应用的相关文章

Docker底层基石namespace与cgroup

容器本质上是把系统中为同一个业务目标服务的相关进程合成一组,放在一个叫做namespace的空间中,同一个namespace中的进程能够互相通信,但看不见其他namespace中的进程.每个namespace可以拥有自己独立的主机名.进程ID系统.IPC.网络.文件系统.用户等等资源.在某种程度上,实现了一个简单的虚拟:让一个主机上可以同时运行多个互不感知的系统. 此外,为了限制namespace对物理资源的使用,对进程能使用的CPU.内存等资源需要做一定的限制.这就是Cgroup技术,Cgro

畅谈Docker底层技术-LXC与Cgroup

#Docker LXC及Cgroup    docker最为为LXC+AUFS组合,其中LXC负责资源管理,AUFS负责镜像管理:而LXC包括cgroup,namespace,chroot等组件 并通过cgroup资源管理     那么,从资源管理的角度来看,Docker,Lxc,Cgroup三者的关系是怎样的呢? cgroup是在底层落实资源管理,LXC在cgroup上面封装了一层,随后,docker有在LXC封装了一层:    Cgroup其实就是linux提供的一种限制,记录,隔离进程组所

docker底层技术概览

docker解决了云计算环境难于分发并且管理复杂,而用KVM.Xen等虚拟化又浪费系统资源的问题.Docker最初是基于lxc构建了容器引擎,为了提供跨平台支持,后又专门开发了libcontainer来抽象容器引擎.但无论是libcontainer还是lxc,其底层所依赖的内核特性都是相同的.我们来看看docker都使用了技术来实现容器引擎的. 命名空间 Docker使用了pid.network.ipc.美mnt.uts等命名空间来隔离网络.文件系统.进程等资源.注意,由于Linux并不是nam

实现容器的底层技术 - 每天5分钟玩转 Docker 容器技术(30)

为了更好地理解容器的特性,本节我们将讨论容器的底层实现技术.cgroup 和 namespace 是最重要的两种技术.cgroup 实现资源限额, namespace 实现资源隔离. cgroup cgroup 全称 Control Group.Linux 操作系统通过 cgroup 可以设置进程使用 CPU.内存 和 IO 资源的限额.相信你已经猜到了:前面我们看到的--cpu-shares.-m.--device-write-bps 实际上就是在配置 cgroup. cgroup 到底长什么

5、Docker架构和底层技术

5.1 Docker Platform Docker提供了一个开发,打包,运行APP的平台 把APP和底层infrastructure隔离开来 5.2 Docker Engine 后台进程(dockerd) REST API Server CLI接口(docker) [[email protected] ~]# docker version Client: Version: 18.03.1-ce API version: 1.37 Go version: go1.9.5 Git commit:

第 4 章 容器 - 030 - 实现容器的底层技术

实现容器的底层技术 cgroup 和 namespace 是最重要的两种技术. cgroup 实现资源限额 namespace 实现资源隔离 cgroup cgroup 全称 Control Group. Linux 操作系统通过 cgroup 可以设置进程使用 CPU.内存 和 IO 资源的限额. 前面我们看到的--cpu-shares.-m.--device-write-bps 实际上就是在配置 cgroup. cgroup 存在 /sys/fs/cgroup 文件中. 举个例子:启动一个容

28-实现容器的底层技术

为了更好地理解容器的特性,本节我们将讨论容器的底层实现技术.cgroup 和 namespace 是最重要的两种技术.cgroup 实现资源限额, namespace 实现资源隔离. cgroup cgroup 全称 Control Group.Linux 操作系统通过 cgroup 可以设置进程使用 CPU.内存 和 IO 资源的限额.相信你已经猜到了:前面我们看到的--cpu-shares.-m.--device-write-bps 实际上就是在配置 cgroup. cgroup 到底长什么

Docker(linux container) 所依赖的底层技术

1 Namespace 用来做PID的隔离,有了namespace,在docker container里头看来,就是一个完整的linux的世界.在host看来,container里的进程,就是一个普通的host进程,namespace提供这种pid的映射和隔离效果,host承载着container,就好比造物者创造一个个世外桃源. 2 Cgroups 在我的另外一篇博文里,有详细介绍cgroup如何做到内存,cpu和io速率的隔离,移步cgroups 3 Chroot 如何在container里

3.Docker与LXC、虚拟化技术的区别——虚拟化技术本质上是在模拟硬件,Docker底层是LXC,本质都是cgroups是在直接操作硬件

先说和虚拟化技术的区别 难道虚拟技术就做不到吗? 不不不,虚拟技术也可以做到,但是会有一定程度的性能损失,灵活度也会下降.容器技术不是模仿硬件层次,而是 在Linux内核里使用cgroup和namespaces来打造轻便的.将近裸机速度的虚拟技术操作系统环境.因为不是虚拟化存储,所以容器技术不会管 底层存储或者文件系统,而是你放哪里,它操作哪里. 这从根本上改变了我们如何虚拟化工作负载和应用程序,因为容器速度比硬件虚拟化技术更快,更加便捷,弹性扩容的更加高效,只是它的工作负载要求操作系统,而不是