前言
为何要了解原理? 了解原理对于Docker的学习使用有什么好处吗? Docker和其他的虚拟化(比如KVM等虚拟化的方式)有什么区别? 为啥现在人们都开始用Docker了?
首先来说 如果实际使用的话, 涉及到简单的使用方面,其实并不会涉及到原理的问题, 一般的软件也好, 编程语言也好, 其主要目的是为了让人更少的关心原理的问题,将更多的精力放在处理业务逻辑上, 对于原理方面的问题, 最好可以一点都不用考虑, 那对我们来说了解原理有什么好处呢? 花时间了解,很少使用的原理到底值不值?
我认为,了解原理是对问题本质的一种把握, 其实事情都有相似的地方, 软件的产生都有它存在的意义和目的, Docker解决了什么问题呢? 这个问题好像并没有什么标准的方案? 我在此写一下我自己的看法.
首先解决的是环境不一致的问题, 常见的情况如下:
A: 你的程序跑不起来啊?
B: 不可能的,在我的机器上好好的,怎么在你的机器上不行了呢? 肯定是你系统环境和我的环境不一致造成的.
第一个问题: 环境不一致的问题.
A: 我的应用为啥自从你的应用上线后就不好使了? 是不是你的应用在这台服务器做了什么?
B: 我修改了```,可能对环境造成了影响,没办法的,环境无法隔离啊.
第二个问题: 同一台服务器环境无法隔离,如果采用虚拟化(尤指虚拟机),则会出现下面的情况
A: 为啥我应用很小,还需要再虚拟机上跑, 还得浪费一个装操作系统的资源,而且启动一个虚拟机还这么慢.
B: 这没办法,服务机的虚拟化解决的是资源调配的问题,Docker解决的是应用的开发,测试和部署的问题.
第三个问题: 服务器虚拟化浪费资源,且启动启动过程慢
所以Docker解决的是什么问题: 1. 隔绝物理硬件差异性和系统差异性 2. 快速分发和部署
那Docker的原理是什么呢?
Docker使用Go语言开发, 使用Linux内核和内核的功能(Cgroup和namspace)来分割进程,以便各进程相互独立运行,Cgroups是Linux的尼日河功能,它让两件事情变为可能,限制Linux进程组的资源占用(内存 CPU);为进程组制作PID UTS IPC 网络 用户及转载命名空间, 而采用Union FS 等技术 可以实现将一个文件系统挂载到其他的文件系统之上.由此可以将系统的进程 网络 文件系统进行隔离,从而实现Docker的环境的隔离.
引用