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内存和100M的swap
[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中可以通过设置权重,限制bps和iops的方式控制容器读写磁盘的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这块磁盘的bps为30M
[root@localhost ~]# docker run -it --name testA --device-write-bps /dev/sda:30MB centos:7
//从/dev/zero输入,然后输出到test。Out文件中,每次大小为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


浙公网安备 33010602011771号