【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】
大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题:
比如这些技术,将来可能都要部署到我们的服务器上,而且大多数服务器都采用Linux 操作系统
这些应用技术在安装到Linux 上之前,都要做一些准备,因为这些应用都会有自己需要的依赖和函数库
而且每一个应用需要的东西可能还会【一般都会】存在差异
也可能一样,但是版本不同,因此如此复杂的关系,很容易就产生“不兼容”的问题
而且不同的环境之前还有差异【炸了】
因此在以前,开发部署的效率非常的低
【Docker 是如何解决依赖的兼容问题的?】
但是,这样的操作仅限于同一个操作系统,因为我们在打包应用时,肯定会基于某个固定的操作系统去打包,
如果一个应用是 Ubuntu 版本的,那么它的依赖和函数库肯定也是Ubuntu 版本的,现在把这个程序打包好扔到Windows 上显然是不能运行的
【所以Docker 又怎么解决这个问题?】
不同环境的操作系统不同,Docker如何解决?先来了解下操作系统结构
其实所有的Linux 操作系统,它都可以分成下面的情况
内核与硬件交互,提供操作硬件的指令
系统应用封装内核指令为函数,便于程序员调用
用户程序基于系统函数库实现功能
【那么问题来了, 一个Ubuntu 系统的应用为什么不能在 Windows 系统上运行呢?】
Ubuntu和CentOS都是基于Linux内核,只是系统应用不同,提供的函数库有差异
现在我有一个Ubuntu 和 一个CentOS
现在我们把Ubuntu 上的例如MySQL 应用尝试迁移到CentOS 上运行
如果函数库不存在,那就报错了【这就是应用不能跨系统调用的原因】
【那么针对这样的问题,Docker 如何解决?】
Docker如何解决不同系统环境的问题?
【这样就不受系统应用使用的操作系统类型影响了】
u1s1 ,这PPT 做得真漂亮
【Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题?】
【Docker如何解决开发、测试、生产环境有差异的问题】
Docker是一个快速交付应用、运行应用的技术:
可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统
运行时利用沙箱机制形成隔离容器,各个应用互不干扰
启动、移除都可以通过一行命令完成,方便快捷