Docker
Docker是基于Go语言实现的云开源项目。
Docker的主要目标是“ Build(构建),Ship and Run Any app(发布和运行任何应用程序),Anywhere(任何地方)”
通过对应用组件的封装 分发 部署 运行 等生命周期的管理,使用户的APP,及其运行环境能够做到,一次封装,到处运行
APP:可以是一个Web应用/数据库应用等
Docker的产生
Docker没产生前面临的问题:
一款产品从开发到上线,从操作系统到运行环境,再到应用配置。作为开发+运维之间的协作我们需要关心的东西很多,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验。
环境配置麻烦,换一台机器,就要重来一次,费力费时。
传统上:
1:软件编码开发/测试结束后,所产生的成果即是程序或是能够编译执行的二进制字节码等(java为例)。
2:为了让这些程序可以顺利执行,开发团队也得准备完整的部署文件,让运维团队得以部署应用程序,开发需要清楚的告诉运维部署团队,用的全部配置文件+所有软件环境。
3:环境和交接等不定因素众多,导致常常发生部署失败的状况。
Docker解决所面临的问题:
Docker之所以发展如此迅速,也就是因为它对此给出了一个标准化的解决方案。
Docker从根本上解决问题,软件可以带环境安装
也就是说,安装的时候,把原始环境一模一样地复制过来。
开发人员利用Docker可以消除协作编码时,"在我机器上可正常工作"的问题。
Docker镜像的设计
1:Docker得以打破过去[ 程序即应用 ]的观念。
2:透过镜像( images )将作业系统核心除外,运作应用程序所需要的系统环境,由下而上打包(运行文档,配置环境,运行环境,运行依赖包,操作系统发行版),达到应用程序跨平台间的无缝接轨运作。
例子:
之前在服务器配置一个应用的运行环境,要安装各种软件,就拿尚硅谷电商项目的环境来说,Java/Tomcat/MySQL/JDBC驱动包等。
1:安装和配置这些东西非常麻烦
2:不能跨平台
在Windows上安装的这些环境,到了Linux 又得重新安装。
3:不能跨系统
换一台同样的操作系统的服务器,要移植应用也是非常麻烦的。
解决传统上的问题:
1:虚拟机( Virtual machine )就是带环境安装的一种解决方案。
它可以在一种操作系统里面运行另一个操作系统 ,比如Windows 系统里面运行 Linux系统。
应用程序对此号无感知,因为虚拟机看上去就跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要就删掉,对其他部分毫无影响。
这类虚拟机完美的运行另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变。
虚拟机的缺点:
1.资源占用多
2.冗余步骤多
3.启动慢
下图为一个系统使用虚拟机装另一个系统的图
2:LXC,Docker方式
由于虚拟机存在这些缺点,Linux 发展出了另一种 虚拟化技术:Linux容器( Linux Containers,缩写:LXC )
Linux 容器不是虚拟一个完整的操作系统,而是对进程进行隔离。
有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。
容器和虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。
系统因此而变得 高效轻量并保证部署在任何环境中的软件都能此终如一地运行。
下图为:LXC
Docker的前辈
Docker 是基于Linux中LXC技术上发展过来的。
将应用运行在Docker容器上面,而 Docker容器在任何操作系统都是一致的,这就实现了跨平台,垮服务。
只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作系统。
比较Docker和传统地虚拟化方式地不同之处 :
1:传统虚拟机技术是虚拟出一套硬件后,在其运行一个完整地操作系统,在该系统上再运行所需要应用进程。
2:容器内地应用进程直接运行宿主地内核,容器内没用自己的核心,而且也没用进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
3:每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源。
跳转门:
Docker入门第二章:https://blog.csdn.net/weixin_41123719/article/details/84729067
Docker入门第二章:https://blog.csdn.net/weixin_41123719/article/details/84729206
Docker入门第三章:https://blog.csdn.net/weixin_41123719/article/details/84726840
Docker入门第四章:https://blog.csdn.net/weixin_41123719/article/details/84726869
Docker入门第五章:https://blog.csdn.net/weixin_41123719/article/details/84726953
Docker入门第六章:https://blog.csdn.net/weixin_41123719/article/details/84727051