中间件:你可以理解他就是某个通用功能组件,他是应用层面上的事情。比如,服务化中间件dubbo(阿里开源),数据中间件、消息中间件等,他们的出现是帮助应用开发人员隔绝这些复杂领域细节的,方便应用开发人员focus在业务逻辑上,而不用太关心实现本身。
如果某个业务领域有一个通用问题需要解决,比如局域网下的超大文件传输,这个时候市面上的通用组件可能无法满足你的需求,你自己遵循某种协议写一个出来,它也可以算作中间件。
容器:
容器提供给Application一个运行环境,需要遵循容器的协议标准。往应用层面上讲,有tomcat、jetty等应用容器,往系统层面上讲,比较流行的有docker。常见的虚拟机也可以算作一种容器,比如在windows机器上安装一个虚机,上面运行linux系统。