docker容器和虚拟机的共同点在于,都可以在宿主机上提供 虚拟化 环境,各个虚拟环境是相互隔离的
它们的主要区别在于
虚拟机是base在硬件层上的,也就是硬件级别的虚拟化,虚拟机有独立的虚拟硬件,独立的虚拟bios,独立的虚拟驱动
而docker base在rootfs层上的
Linux系统的最底层是 系统kernel,一个典型的Linux启动需要两个File system
- bootfs
- rootfs
bootfs (boot file system) 主要包含 bootloader 和 kernel, bootloader主要是引导加载kernel, 当boot成功后 kernel 被加载到内存中后 bootfs就被umount了
rootfs (root file system) 包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件。
由此可见对于不同的linux发行版, bootfs基本是一致的, rootfs会有差别, 因此不同的发行版可以公用bootfs
如果你的应用需要特定的系统内核例如只能运行在 Linux 内核2.6上,那么此应用不适合使用docker,此时应该选择虚拟机方案
大多数的应用,都不依赖于内核