Docker虚拟化与普通虚拟化的区别
Docker虚拟化占用资源较少,更快的启动,具备更好的性能,而普通虚拟化占用资源较大启动须要1,2分钟。Docker中的容器与宿主机的内核相同,若是虚拟机服务器对内核版本有要求,这个服务就不太适合docker来实现,而适合普通虚拟化。
注意:**全虚拟化,所须要的硬件都必须准备好(KVM,vm)nginx
docker容器与宿主机内核的关系:
查看镜像
docker images
进入容器
docker run -it centos:latest /bin/bash
docker run -it --name test centos:7 /bin/bash
查看容器根目录(与宿主机的/目录基本相同)
由此能够看出内核也相同
若是虚拟机服务对内核版本有要求,这个服务就不太适合docker来实现了。
内核,若是须要安装的服务与宿主机的内核不匹配,那么能够考虑,别的虚拟化软件,由于容器中的内核与宿主机的内核相同*。web
busybox:欺骗层。
Docker是不占用端口的,运用的是在后台运行(由图)
解耦:解除耦合,解除冲突
耦合:冲突现象。
在docker程序run ......》新的centos系统(nginx,web)
对于docker来讲只是运行了一个进程而已。docker
Namespace和cgroup的意思与做用:
Namespace(名称空间);用来隔离容器
Cgroup(控制组):对容器资源的限制。
Namespace的六项隔离,与docker容器cgroup方面的功能:***
Namespace的六项隔离:
IPC:共享内存,消息队列
MNT:挂载点,文件系统
NET:网络栈
PID:进程编号
USER:用户。组
UTS:主机名,域名。
Namespec :六项隔离,实现了容器与宿主机,容器与容器之间的隔离。
cgroup的功能:
1》资源限制:cgroup能够对进程组使用的资源总额进行限制。
2>优先级分配:经过分配的cpu时间片数量以及硬盘IO带宽的大小,实际上相对于控制了进程运行的优先级别
3》资源统计:cgroup能够统计系统资源使用量,好比cpu使用时间,内存使用量等,用于按量计费,同时还支持挂起动能,也就是说经过cgroup把全部资源限制起来,对资源都不能使用,注意着并非说咱们的程序不能使用了,知识不能使用资源,处于等待状态。
4》进程控制;能够对进程组执行挂起,恢复等操做。*centos
测试实验:
下载一个httpd
启动
systemctl start httpdbash
资源的限制
cd /sys/fs/cgroup
目录下是对cpu 内存等的各类限制
权重值
cat cpu.shares
cat tasks(pid编号)
这里记录的都是进程编号服务器
选项: 内存限额: 容器内存包括两个部分,物理内存,和swap 能够经过参数控制容器内存使用量: -m或者--memory:设置内存的使用限额 --memory-swap:设置内存+swap的使用限额。 举个例子: 运行一个容器,而且限制该容器最多使用200M内存和100M的swap dokcer run -it -m 200M --memory-swap 300M centos:7 **进入此目录下能够清晰查看内存与swap等限制:** [root@4e168a544caf memory]# pwd /sys/fs/cgroup/memory 内存使用限制 [root@4e168a544caf memory]# cat memory.limit_in_bytes 209715200字节 内存+swap限制 [root@4e168a544caf memory]# cat memory.memsw.limit_in_bytes 314572800
对比一个没有限制的容器咱们会发现,若是运行容器以后不限制内存的话,意味着没有限制。网络
CPU使用, 经过-c使用--cpu-shares设置容器使用cpu的权重,若是不设置,默认为1024 举个例子: 没有限制 :(1024) ** docker run -it --name containerA centos:7** [root@dbe30b65321c /]# cd /sys/fs/cgroup/cpu [root@dbe30b65321c cpu]# cat cpu.shares 1024(默认值) 有限制:(512) **docker run -it --name containerB -c 512 centos:7** [root@7b8e6a807f06 cpu]# cat cpu.shares 512(限制的值) [root@7b8e6a807f06 cpu]# pwd /sys/fs/cgroup/cpu **容器的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 好比: 1.限制testA这个容器。写入/dev/sda这块磁盘的bps为30MB *docker run --name testA --device-write-bps /dev/sda:30MB centos:7* 删除容器: *docker rm testA* 2.从/dev/zero输入,而后输出到tet.out文件中,每次大小为1M,总共800次,oflag=direct用来指定directlO方式写文件,这样才会使—device-write-bps生效。 [**root@docker ~]# docker run -it --name testA --device-write-bps /dev/sda:30MB centos:7 [root@cf54dd8861da /]# time dd if=/dev/zero of=test.out bs=1M count=800 oflag=direct**
[root@cf54dd8861da /]# du -h test.out
800M test.out
没有对testB限制磁盘的读写(代表该下载与上传只与网速相关)
[root@docker ~]# docker run -it --name testB centos:7
[root@3a76843b4339 /]# time dd if=/dev/zero of=test.out bs=1M count=800 oflag=direct
800+0 records in
800+0 records out
838860800 bytes (839 MB) copied, 1.54945 s, 541 MB/side
real 0m1.551s
user 0m0.001s
sys 0m0.636s性能
根据对比也能够看出无法限制空间利用率大小测试