一、什么是容器?

Linux 容器技术能够让您对应用及其整个运行时环境(包括全部所需文件)一起进行打包或隔离。从而让您可以在不同环境(如开发、测试和生产等环境)之间轻松迁移应用,同时还可保留应用的全部功能。—了解容器

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特性,很多人初学 Docker 时常常会混淆容器和虚拟机。—容器 - Docker —— 从入门到实践

容器是一种操作系统虚拟化形式。可以使用一个容器来运行从小型微服务或软件进程到大型应用程序的所有内容。容器包含所有必要的可执行文件、二进制代码、库和配置文件。—什么是容器?— 优势和用例 | NetApp

容器是软件的可执行单元,它采用通用方式封装了应用程序代码及其库和依赖项,因此可以随时随地运行容器(无论是在桌面、传统 IT 还是云端)。—什么是容器? - 中国 | IBM

容器化是软件开发的一种方法,通过该方法可将应用程序或服务、其依赖项及其配置(抽象化为部署清单文件)一起打包为容器映像。…总而言之,容器在整个应用程序生命周期工作流中提供以下优点:隔离性、可移植性、灵活性、可伸缩性和可控性。 最重要的优点是可在开发和运营之间提供隔离。 —容器和 Docker 简介 | Microsoft Docs

就像运输行业使用物理容器来隔离不同的货物,以便通过轮船和火车运输,软件开发技术也越来越多地使用一种称为容器化的方法。应用程序移动到其他环境就无法正确运行,这个问题从有软件开发就存在了。会出现这种问题,通常是由于各环境的配置基础库要求和其他依赖项存在差异。 容器为应用程序打包和部署提供轻量级、不可变的基础结构来解决此问题。应用程序或服务、其依赖项及其配置打包为容器映像。—什么是容器?| Microsoft Azure

个人理解:容器可以用来隔离某些东西。防止软件在不同环境部署时运行不了的问题。

二、IoC container(Inversion of Control (IoC) container)控制反转

Spring提供的容器又称为IoC容器。用来管理Bean。

  • 传统:

我需要new 一个Student类,Student依赖Person类,Person依赖Animal类。需要哪个类就new哪个类。

  • IoC:

我告诉IoC:我现在在需要一个Apple类。

理解不太到位,还需参考抛开 Spring 去理解 IOC 思想:原来 IOC 容器这么简单_勇往直前的专栏-CSDN博客加强理解。

三、依赖注入

依赖注入是实现控制反转的一种方式。

3.1 什么是依赖?

如果一Class A中有Class B的实例,则称Class A对Class B有一个依赖。

  1. public class Human {
  2. ...
  3. Father father;
  4. ...
  5. public Human() {
  6. father = new Father();
  7. }
  8. }

3.2 什么是依赖注入?

在Class内部以new的方式来初始化Humun实例不够灵活。以下,将father以变量的形式传入依赖的方式叫做依赖注入。

  1. public class Human {
  2. ...
  3. Father father;
  4. ...
  5. public Human(Father father) {
  6. this.father = father;
  7. }
  8. }

参考

  1. 了解容器
  2. 容器 - Docker —— 从入门到实践
  3. 什么是容器?— 优势和用例 | NetApp
  4. 什么是容器? - 中国 | IBM
  5. 容器和 Docker 简介 | Microsoft Docs
  6. 什么是容器?| Microsoft Azure
  7. 抛开 Spring 去理解 IOC 思想:原来 IOC 容器这么简单_勇往直前的专栏-CSDN博客
  8. Core Technologies
  9. 控制反转(IoC)与依赖注入(DI) - 简书