1 容器究竟是什么 ?
1) docker与虚拟机的区别
虚拟机技术:虚拟出操作系统和硬件的各种环境,有独立的操作系统, 有完整独立的文件系统、IO输入、虚拟网卡等。
docker: 通过约束和修改进程的动态表现,从而为其创造出一个“边界”。
容器,其实是一种特殊的进程而已。
虚拟机是硬件级别的抽象,容器是应用级别的抽象。
docker run -it ubuntu /bin/sh
mac是宿主机,在容器里执行ps
容器里有两个进程在跑。这就意味着,/bin/sh和ps隔离在一个跟宿主机完全不同的世界中。
这其实是一个障眼法。
/bin/bash以为自己是pid为1的进程,实际上在宿主机里前面还有很多进程。
在docker虚拟了一个操作系统。但docker使用了linxu的namespace的技术。除了pid NAMESPACE, 还提供了 Mount,UTS 、IPS、 NetWork和user各种NameSpace。
除了namespace,还依靠了 cgroups和rootfs.
实际上 docker隔离并没有虚拟机那么彻底。
1。隔离性
首先,既然容器只是运行在宿主机上的一种特殊的进程,那么多个容器之间使用的就还是同一个宿主机的操作系统内核。
2。其次,在 Linux 内核中,有很多资源和对象是不能被 Namespace 化的,最典型的例子就是:时间。
3 Cgroups 就是 Linux 内核中用来为进程设置资源限。
Linux Cgroups 的全称是 Linux Control Groups.它最主要的作用,就是限制一个进程组能够使用的资源上限,包括CPU, 内存、硬盘、网络。
3 容器究竟有什么好处
解决了应用打包的难度