1. 为什么要有Docker?
假设我们现在正在开发一个项目,使用的是一台笔记本电脑而且开发环境具有特定的配置,其他开发人员身处的环境配置也各不相同。现在你正在开发的应用依赖于某些配置文件。此外,您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。您希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销。那么,你要如何保证应用能够在这些环境中运行和通过质量检测?并且在部署过程中不出现令人头疼的版本、配置问题,也无需重新编写代码和进行故障修复?答案就是使用容器,Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案—系统平滑移植,容器虚拟化技术
。环境配置相当麻烦,换一台机器,就要重来一次,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装
?也就是说,安装的时候,把原始的环境一模一样地复制过来。开发人员可以利用Docker可以消除协作编码时在我的机器上可以正常工作的
问题。
传统上认为,软件编码开发/测试结束后,所产出的成果即是程序或是能够编译执行的二进制字节码等。而为了让这些程序可以顺利执行,开发团队也得准备完整的部署文档,让运维团队得以部署应用程序,开发需要清楚的告诉运维团队,用的全部配置文件+所有软件环境,不过即便如此,仍然常常发生部署失败的情况。Docker的出现使得Docker能够打破过去[程序即应用]的观念。透过镜像将作业系统核心除外,运作应用程序所需要的系统环境,由下而上打包,达到应用程序跨平台间的无缝接轨运作。
2. Docker简介
一次镜像,处处运行
Docker是基于Go语言实现的云开源项目。Docker的主要目标是“Build,Ship and Run Any APP,AnyWhere”,也就是用过对应用组件的封装、分发、部署、运行等生命周期的管理,使得用户的APP及其运行环境能够做到一次镜像、处处运行
。Linux容器技术的出现解决了这样的一个问题,尔Docker就是在它的基础傻上发展过来的,将应用打成镜像,通过镜像称为运行在Docker容器上的实例,而Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。
解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术
3. 容器和虚拟机的区别
虚拟机就是带环境安装的一种解决方案,它可以在一种操作系统里面运行另一种操作系统,应用程序对此毫无感知,因此虚拟机看上去和真实系统一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要就删掉,对其他部分毫无影响,这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变。
传统的虚拟机技术有下面三个短板:
- 资源占用多
- 冗余步骤多
- 启动慢
由于虚拟机存在的一些缺点,Linux发展出了另一种虚拟化技术:Linux容器(LXC),Linux容器是与系统其他部分分隔开的一系列进程,从另一个镜像运行,并由镜像提供支持进程所需要的全部文件,容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的过程中,它都具有可移植性和一致性。Linux容器不是模拟一个完整的操作系统而是对进程进行隔离,有了容器,就可以将软件所需的所有资源打包到一个隔离的容器中。容器和虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因而变得高效轻量并保证部署在任何环境中的软件都能始终如一的运行。
最后做一个对比:
- 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整的操作系统,在该系统上再运行应用进程
- 容器内的应用进程直接运行于宿主机的内核,容器没有自己的内核且也没有进行硬件虚拟。因此容器比传统虚拟机更加方便
- 每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源
4. Docker下载
docker官网:http://www.docker.com/
docker Hub官网:http://hub.docker.com/
docker官网介绍了docker安装以及使用的教程,docker Hub官网就是docker镜像容器的仓库。
Docker并非是一个通用的容器工具,它依赖于已存在并运行的Linux内核环境,Docker实质上是在已经运行的Linux下制造一个隔离的文件环境,因此它执行的效率几乎等同于所部署的Linux主机。因此,Docker必须部署在Linux内核系统上,如果其他系统想部署Docker就必须安装一个虚拟的Linux环境。
window上部署Docker的方法就是先安装一个虚拟机,并在安装的Linux系统的虚拟机汇总运行Docker