containerjava
为了更好理解JAVA容器,查询了容器的概念以及容器的诞生缘由和历史:spring
容器技术是怎么一个概念呢?其实,IT里的容器技术是英文单词Linux Container的直译。container这个单词有集装箱、容器的含义(主要偏集装箱意思)。不过,在中文环境下,我们要交流要传授,若是翻译成“集装箱技术” 就有点拗口,因此结合中国人的吐字习惯和文化背景,更喜欢用容器这个词。不过,若是要形象的理解Linux Container技术的话,仍是得念成集装箱会比较好。咱们知道,海边码头里的集装箱是运载货物用的,它是一种按规格标准化的钢制箱子。集装箱的特点,在于其格式划一,并能够层层重叠,因此能够大量放置在特别设计的远洋轮船中(早期航运是没有集装箱概念的,那时候货物杂乱无章的放,很影响出货和运输效率)。有了集装箱,那么这就更加快捷方便的为生产商提供廉价的运输服务。docker
所以,IT世界里借鉴了这一理念。早期,你们都认为硬件抽象层基于hypervisor的虚拟化方式能够最大程度上提供虚拟化管理的灵活性。各类不一样操做系统的虚拟机都能经过hypervisor(KVM、XEN等)来衍生、运行、销毁。然而,随着时间推移,用户发现hypervisor这种方式麻烦愈来愈多。为何?由于对于hypervisor环境来讲,每一个虚拟机都须要运行一个完整的操做系统以及其中安装好的大量应用程序。但实际生产开发环境里,咱们更关注的是本身部署的应用程序,若是每次部署发布我都得搞一个完整操做系统和附带的依赖环境,那么这让任务和性能变得很重和很低下。编程
基于上述状况,人们就在想,有没有其余什么方式能让人更加的关注应用程序自己,底层多余的操做系统和环境我能够共享和复用?换句话来讲,那就是我部署一个服务运行好后,我再想移植到另一个地方,我能够不用再安装一套操做系统和依赖环境。这就像集装箱运载同样,我把货物一辆兰博基尼跑车(比如开发好的应用APP),打包放到一容器集装箱里,它经过货轮能够垂手可得的从上海码头(CentOS7.2环境)运送到纽约码头(Ubuntu14.04环境)。并且运输期间,个人兰博基尼(APP)没有受到任何的损坏(文件没有丢失),在另一个码头卸货后,依然能够完美风骚的赛跑(启动正常)。app
Linux Container容器技术的诞生(2008年)就解决了IT世界里“集装箱运输”的问题。Linux Container(简称LXC)它是一种内核轻量级的操做系统层虚拟化技术。Linux Container主要由Namespace和Cgroup两大机制来保证明现。那么Namespace和Cgroup是什么呢?刚才咱们上面提到了集装箱,集装箱的做用固然是能够对货物进行打包隔离了,不让A公司的货跟B公司的货混在一块儿,否则卸货就分不清楚了。那么Namespace也是同样的做用,作隔离。光有隔离还没用,咱们还须要对货物进行资源的管理。一样的,航运码头也有这样的管理机制:货物用什么样规格大小的集装箱,货物用多少个集装箱,货物哪些优先运走,遇到极端天气怎么暂停运输服务怎么改航道等等... 通用的,与此对应的Cgroup就负责资源管理控制做用,好比进程组使用CPU/MEM的限制,进程组的优先级控制,进程组的挂起和恢复等等。性能
什么是java容器?网站
类似的,docker容器中若是装的是app,java容器中装载的就是组件 ,而容器以外的程序须要和这些组件交互必须经过容器 。ui
举个例子,IE发送了一个请求给容器,容器经过调用其中的一个组件进行相关处理以后将结果反馈给IE,这种与客户端软件交互的组件就叫作servletspa
那什么是组件呢?操作系统
组件其实就是一个应用程序块 。可是它们不是完整的应用程序,不能单独运行 。就有如一辆汽车,车门是一个组件,车灯也是一个组件 。可是光有车灯车门没有用,它们不能跑上公路 。在java中这些组件就叫作javabean,有点像微软之前的com组件 。
要特别说明的是,因为任何一个java文件编译之后都是以类的形式存在 。因此javabean确定也是一个类,这是毫无疑问的。
injection
Java的依赖注入:依赖注入,出自spring的IOC和DI,是Spring的两大特性之一(另外一个AOP面向切面编程)
之前对象使咱们手动实例化,好比:Service层调用Dao层,须要Dao d = new Dao;可是这样会致使两个层之间的耦合性大大加强。而spring的IOC,反转控制,会在咱们须要实例对象的时候,由spring容器为咱们提供,并经过DI依赖注入来实现目标对象的得到,完成解耦操做。
能够经过setter方法注入、构造注入、注解注入。 依赖注入是Spring的思想,在使用Spring进行开发时,能够将对象交给spring进行管理,在初始化时spring建立一批对象,当你须要用的时候只要从spring的容器中获取对象,而不用本身去new,固然在对象建立的时候能够注入另外一个对象。好比A,B两个对象都由spring管理,A中持有对B的引用,那么spring在生成A对象的时候就已经吧B对象的一个实例给到A了,当你在A中用到B的时候直接使用就能够了。
以上摘自网站或参考网站:https://blog.csdn.net/u010325193/article/details/80195168 https://cloud.tencent.com/developer/article/1116709?fromSource=waitui
通过对容器的理解,我的对将来容器的见解和发展趋势作如下估测:
容器技术感受目前来讲已经很强大了,能够作不少事情,应该也将会愈来愈完善,功能也可能会更加智能化
因为学识浅薄,我的认为技术发展是不会趋于饱和化的。所以容器技术会发展成智能工做的移动生产车间?(可能理解不够?有什么不对的地方见谅以及指出错误)