Docker与虚拟化技术比较

1 容器究竟是什么 ?

1) docker与虚拟机的区别


图片.png

虚拟机技术:虚拟出操作系统和硬件的各种环境,有独立的操作系统, 有完整独立的文件系统、IO输入、虚拟网卡等。

docker: 通过约束和修改进程的动态表现,从而为其创造出一个“边界”。
容器,其实是一种特殊的进程而已。

虚拟机是硬件级别的抽象,容器是应用级别的抽象。

  docker  run  -it ubuntu /bin/sh
图片.png

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 容器究竟有什么好处
解决了应用打包的难度

你可能感兴趣的:(Docker与虚拟化技术比较)