Docker-导言
Docker出现的原因
每一款产品的出示都是为了解决一些痛点问题
相信我们都经历过这种场景
我们的项目在本地跑起来一点毛病都没有
开心地将jar包分享给同学
过了一会,同学一脸嫌弃地找你去看他在服务器上运行后齐刷刷的报错信息,觉得你写的代码不行,跑都跑不起来
看了报错,发现他没有安装redis,没有安装es,没有安装mysql等等软件
这时候就很无奈了,只能帮其一步步进行安装,进行配置
安装完成后,可能还要调一堆的bug,浪费了大量的时间
我们现在的结构是(Linux + jar + Redis环境 + ES环境 + Mysql环境… )
这就会导致上面出现的问题,就算他早就安装了这些软件,如果版本和你使用的不一致,那么也有可能报错
这时候,就希望有样东西可以帮我们解决这个问题
那么这个东西就是Docker
在使用Docker之后,结构就变成了(Linux+(jar + Redis环境 + ES环境 + Mysql环境… ))
将jar包和环境一起打包,就不会出现开头出现的问题啦
下面让我们来学习Docker吧
认识Docker
传统运行应用
所有的应用都是跑在同一个宿主机上
使用共同的类库(Lib)
所以请你想象这种场景:
APP1(将其比作放射物质)+APP2(将其比作食物)
那么这种情况下,APP2会被APP1破坏
如果有些应用又依赖APP1,那么就会牵扯很多应用无故躺枪
导致Linux大环境牵连受损,很难处理
当我们使用了Docker技术之后
所有的应用都是在Docker的管理下运行的
这里的应用就要换个名字了,叫容器
每一个容器都有一套自己的环境,并且不会受到其他容器环境的影响,容器之间是相互隔绝的
就算有两个水火不容的应用出现在了同一个容器中,也不会影响到其他容器的环境
下面看一下Docker官方给出的一张体系架构图
优势
传统虚拟机技术 VS Docker容器技术
虚拟机实现资源隔离的方法是利用独立的OS,并利用Hypervisor虚拟化CPU、内存、IO设备等实现的
Docker比虚拟机有更少的抽象层,不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源
而虚拟机加载GuestOs是分钟级启动的
docker利用的是宿主机的内核,而不需要Guest OS。
因此,Docker通过镜像新建一个容器的时候,不需要像虚拟机一样重新加载一个虚拟机内核
我们知道,引导、加载操作系统内核是一个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的。
而docker由于直接利用宿主机的操作系统,则省略了这个过程,因此新建一个docker容器只需要几秒钟。
另外,现代操作系统是复杂的系统,在一台物理机上新增加一个操作系统的资源开销是比较大的
所以docker对比虚拟机在资源消耗上也占有比较大的优势。
在一台物理机上我们可以很容易建立成百上千的容器,而只能建立几个虚拟机
安装Docker
1 | #卸载之前的Docker |
如果你购买了阿里云、百度云、腾讯云的服务器,可以配置一个容器镜像加速
这个镜像加速走的是服务器内网,写我的也没有用哦
卸载Docker
1 | #卸载docker依赖 |