概述
容器化技术在当前云计算、微服务等体系下大行其道,而 Docker 便是容器化技术的典型,对于容器化典型的技术,我们有必要弄懂它,所以这篇文章,我会来分析下 Docker 是如何实现隔离技术的,Docker 与虚拟机又有哪些区别呢?接下来,我们开始逐渐揭开它的面纱。
文件的隔离
了解完进程的隔离,相信你们已经对 Docker 容器的隔离玩法就大概的印象了,我们接下来看看,Docker 内部的文件系统如何隔离,也就是你在 Docker 内部执行 ls
显示的文件夹和文件如何来的。
我们还是以前面的 Docker 命令为例,执行ls
bin dev etc home proc root run sys tmp usr var
进程的隔离
执行成功后我们就会进入到了 Docker 容器内部,我们执行ps -ef
查看进程
/ # ps -ef
PID USER TIME COMMAND
1 root 0:00 /bin/sh
8 root 0:00 ps -ef
使用top
命令查看进程资源
Mem: 1757172K used, 106080K free, 190676K shrd, 129872K buff, 998704K cached
CPU: 0.0% usr 0.2% sys 0.0% nic 99.6% idle 0.0% io 0.0% irq 0.0% sirq
Load average: 0.00 0.01 0.05 2/497 9
PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND
1 0 root S 1300 0.0 1 0.0 /bin/sh
9 1 root R 1292 0.0 3 0.0 top
而我们在宿主机查看下当前执行容器的进程ps -ef|grep busybox
资源的限制
玩过 Docker 的同学肯定知道,Docker 还是可以限制资源使用的,比如 CPU 和内存等,那这部分是如何实现的呢? 这里就涉及到Linux的另外一个概念Cgroups
技术,它是为进程设置资源限制的重要手段,在Linux 中,一切皆文件,所以Cgroups
技术也会体现在文件中,我们执行mount -t cgroup
就可以看到Cgroups
的挂载情况