同为容器,IoC和Docker有啥不同?
Spring中有容器技术,Docker中也有,容器技术中,能学到哪些思想呢?
小伙伴们,我是小周,今天梳理一下 IoC
容器和 Docker
容器,无论你是哪个阶段,都会学到一些新知识,它不是编码能力,更多是思想。
一、IoC容器
如果你没学过Spring框架也没关系,因为下面讲的重点不是编码。
IoC,全称Inverse Of Control
,翻译过来就是控制反转,那所谓控制反转,控制是控制谁?反转又是反转什么?
控制反转作为 Spring 框架的核心思想之一,这里的控制
是指为成员变量赋值的控制权,反转
是指控制权由原来的 new 转变为工厂配置文件。
先说一下控制权在开发手上的问题,假如项目的业务很庞大,开发在这个类中改一下,发现这个类还需要另一个类,开发又去另一个类改一改代码,无奈由于业务量大,他又发现又有依赖了,这样的开发效率很低,开发者很头疼一直在找代码改代码,如果这个开发者对业务很熟还可以,如果不熟简直就是噩梦。
现在容器技术来了,这是指 Spring 的容器,也管它叫工厂,在开发中告诉工厂对象的全类名,并给这个对象一个唯一标识,工厂在启动时就会通过读取全类名,再利用反射机制完成单例对象的创建和管理,为什么要这样呢?带来了什么好处?
三个字:解耦合
二、耦合
耦合指两个或两个以上的体系或两种运动形式之间通过各种交互作用而彼此影响,从而联合起来产生增力,协同完成特定任务的现象。
软件工程中的耦合是指各个模块依赖程度,为了便于维护,自然希望耦合越低越好。
三、解耦合
通过一些手段,降低模块间或程序间的依赖程度,在Spring中通过抽取到配置文件配合IoC容器进行了解耦,当然这并不是全部,还有配置文件的依赖注入,也是解耦的体现。
简单说就是程序运行期间,不用去修改源码,通过其他手段,比如修改配置文件,就可以影响程序的表现。
四、IoC思想
IoC容器,是指对于成员变量赋值的控制,从代码中new转变为Spring工厂和配置文件中,好处就是解耦合。
我们学到了,如果想要降低依赖,可以通过在两者之间加一层,Spring中这一层讲是工厂,IoC容器,有了这一层,就可以将对象和配置文件联系起来,从而通过配置文件管理对象,达到降低依赖的效果。
五、Docker容器
Docker 容器是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何安装了docker引擎的服务器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。
六、沙箱
沙箱是一个虚拟系统程序,沙箱提供的环境相对于每一个运行的程序都是独立的,不会对现有的系统产生影响,即沙箱提供一个限制该应用程序对系统资源的访问权限。
七、沙箱的应用
1. 搭建测试环境,沙箱的应用只能访问自己的应用访问目录,应用间的资源不能共享,这样就形成了一个相对安全的机制,由于沙箱具有非常良好的独立性、隔离性,所以能让一些具有高风险的软件进行测试。
2. 应用容器的使用,如Docker就是应用沙箱机制,这样使得应用组件经过Docker的封装,使得在项目的迁移、测试环境到生产环境的部署,保证了应用程序的运行环境保持一致性,同时也减少大量在环境搭建上的工作量。
七、Docker思想
与 IoC 容器不同,Docker 容器不是管理对象的,把它比作集装箱我觉得更合适,使用沙箱技术,在Linux中,容器技术是一种进程隔离的技术,应用可以运行在一个个相互隔离的容器中,与虚拟机相同的是,可以为这些容器设置计算资源限制,挂载存储,连接网络,而与虚拟机不同的是,这些应用运行时共用着一个Kernel(内核)
既然这样,我们就可以使用容器将运行环境和代码一起装起来,也就是所谓 Docker容器,通过进行隔离,运行它,这样多个容器共用一个内核,和虚拟机的操作系统级别虚拟化技术相比,优势一下就出来了。
八、总结
可见,同样是容器技术,一个用于解耦让代码方便管理和维护,一个是一次打包,处处运行,代码之上,还有很重要的就是思想,我觉得多想多去理解,这和编码同等重要。
好了,这就是本文全部内容了,如果觉得写的还不错,点赞支持小周啊!👋
更多推荐
所有评论(0)