docker的一些必要文件,一些必要系统文件都是与宿主机共享,包括内核

如果虚拟机内服务对内核版本有要求,这个服务就不太适合用docker来实现,因为docker虚拟机的内核是与宿主机共用,宿主机内核是什么版本docker虚拟机提供的内核就是什么版本

 

Busybox:欺骗层,模拟根目录

 

解耦:解除耦合,冲突

 

耦合:冲突现象,

 

docker在一个进程里就可以运行一个系统

 

 

Namespace(名称空间):

用来隔离容器。

 

Namespace(六项隔离,为以下六项)

 

IPC: 共享内存,消息队列

 

MNT: 挂载点,文件系统

 

NET: 网络栈

 

PID: 进程编号

 

USER: 用户,组

 

UTS: 主机名,域名

 

 

 

Namespec六项隔离,实现了容器与宿主机,容器与容器之间的隔离

 

 

 

Cgroup(控制组):

 

资源的限制。

 

 

 

四大功能

 

1)资源限制:cgroup可以对进程组使用的资源总额进行限制。

 

2)优先级分配:通过分配的cpu时间片数量以及硬盘lo带宽大小

 

3)资源统计:cgroup可以统计系统资源使用量,比如cpu使用量,内存使用量等。用于按量计费,同时还支持挂起功能,也就是说通过cgroup把所有资源限制起来,对资源都不能使用,注意并不是说我们的程序不能使用了,只是不能使用资源,处于等待状态。

 

4)进程控制:可以对进程执行挂起,恢复等操作。

 

 

 

 

 

内存限额:

 

容器内存包括两个部分:物理内存和swap

 

可以通过参数控制容器内存的使用量:

 

-m或者--memory:设置内存的使用限额

 

--memory-swap:设置内存+swap的使用限额

 

 

 

举个例子:

 

运行一个容器,并且限制该容器最多使用200M内存和100Mswap

 

[root@localhost ~]# docker run -it -m 200M --memory-swap 300M centos:7

 

[root@327fe1d037da /]# cd /sys/fs/cgroup/memory/

 

 

 

//内存使用限制

 

[root@327fe1d037da memory]# cat memory.limit_in_bytes

 

209715200 (字节)

 

 

 

//内存+swap限制

 

[root@327fe1d037da memory]# cat memory.memsw.limit_in_bytes

 

314572800 (字节)

 

[root@7503019624b6 memory]# cat memory.limit_in_bytes

 

9223372036854771712

 

对比一个没有限制的容器,我们会发现,如果运行容器之后不限制内存的话,意味着没有限制。

 

 

 

 

 

Cpu使用

 

通过-c或者--cpu-shares设置容器使用cpu的权重,如果不设置默认为1024

 

举个例子:

 

//没有限制,1024

 

[root@localhost ~]# docker run -it --name containerA centos:7

 

[root@930f1bb8a67a /]# cd /sys/fs/cgroup/cpu

 

[root@930f1bb8a67a cpu]# cat cpu.shares

 

1024

 

 

 

//限制cpu使用权重为512

 

[root@localhost ~]# docker run -it --name containerB -c 512 centos:7

 

[root@7eda354446af /]# cd /sys/fs/cgroup/cpu

 

[root@7eda354446af cpu]# cat cpu.shares

 

512

 

 

 

容器的block io

 

磁盘的读写。

 

Docker中可以通过设置权重,限制bpsiops的方式控制容器读写磁盘的io

 

Bps:每秒读写的数据量 byte per second

 

Iops:每秒io的次数 io per second

 

默认情况下,所有容器都能够平等的读写磁盘,也可以通过--blkio-weight参数改变容器的blockio的优先级。

 

--device-read-bps:显示读取某个设备的bps

 

--device-write-bps:显示写入某个设备的bps

 

--device-read-iops:显示读取某个设备的iops

 

--device-write-iops: 显示写入某个设备的iops

 

 

 

//限制testA这个容器,写入/dev/sda这块磁盘的bps30M

 

[root@localhost ~]# docker run -it --name testA --device-write-bps /dev/sda:30MB centos:7

 

 

 

///dev/zero输入,然后输出到testOut文件中,每次大小为1M ,总共800次,oflag=direct用来指定directlo方式写入,这样才会使--device-write-bps生效

 

[root@ed40eacae5ec /]# time dd if=/dev/zero of=test.out bs=1M count=800 oflag=direct

 

 

 

 

 

//不做限制再运行一个容器

 

[root@localhost ~]# docker run -it --name testB  centos:7

 

[root@adc83bdbfd93 /]#  time dd if=/dev/zero of=test.out bs=1M count=800 oflag=direct

 

 

 

posted on 2020-04-08 15:20  痴人_说梦  阅读(39)  评论(0)    收藏  举报