为什么会出现docker?
一般我们做业务系统的时候,会有几个环境:
测试环境,仿真环境,生产环境。
其关系为:先在测试环境进行功能和环境测试及验证,然后在仿真环境中进行部署代码测试,仿真没问题后最后再同步到生成环境中。
三个环境的环境配置必须完全一样,不然会出现一个问题:在我的电脑上可以运行,为啥你的不行???
与此同时,还有其他的风险,比如:
a.版本更新,导致服务不可用;
b.需要集群部署时,需要一台台配置多个服务器环境;
c.因为项目需要进行跨平台部署时,会出现不兼容的情况;
··· ···
有没有一种方法,当我把应用做完后,其他人想用的时候直接拿去用呢,不用去关注环境变量的配置/环境的搭建??
这个时候,docker就要善良登场了~~~
通过logo我们可以看到,一个轮船上装了多个集装箱,而每个集装箱互相之间又是独立的,所以这个就是docker的一个思想。
我们可以在一个平台(虚拟机/物理机)部署多个应用,每个应用之间是独立的,并且每个应用是可移植的,不会依赖于平台的环境。
Docker和虚拟机的区别
传统虚拟机工作原理
在物理服务器上部署虚拟化底层,然后安装虚拟机,最后在虚拟机上安装环境从而进行应用的部署和使用。
虚拟机缺点:
1.资源占用十分多
2.冗余步骤多
3.启动慢
容器化技术
容器化技术不是模拟的一个完整的操作系统,而是把应用当作了系统中的一个服务或进程。
docker和虚拟机技术的不同:
1.传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统山安装和运行软件。
2.容器内的应用直接运行在宿主机的内核,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了。
3.每个容器间互相隔离,每个容器内都有一个属于自己的文件系统,互不影响。
在生产应用中,传统方式和Docker特别尤为明显:
1.应用更快速的交付和部署
传统:一堆帮助文档,安装程序
Docker:打包镜像发布测试,一键运行
2.更便捷的升级和扩缩容
使用docker之后,搭建部署应用和搭积木一样!
项目打包为一个镜像,扩展服务器A,服务器B
3.更简单的系统运维
容器化之后,开发和测试环境高度一致。
4.更高效的计算资源利用
1核2G服务器,可以运行几十个tomcat!
docker是内核级别的虚拟化,可以在一个物理机上可以运行很多的容器实例。服务器的性能可以被压榨到极致。