持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情
以前我们要运行一个应用,需要在物理服务器上面安装一个操作系统,并在操作系统上面部署安装好你的应用,有如下缺点:
- 部署很慢
- 成本很高,需要物理服务器
- 资源浪费
- 难于迁移和扩展,需要另外一台准备好的机子才能迁移App,没法做扩展
- 可能会被硬件厂商限定平台,例如Sun的服务器可能没办法迁移到X86平台
虚拟化技术
通过一层Hypervisor来做物理资源的虚拟化,在此之上再来安装操作系统-虚拟机,如果物理资源比较丰富,可以通过虚拟化来实现物理资源调度。提高利用率。
每一个App可以独立运行在一个VM里面。
优点
目前绝大部分的服务都部署云上。
局限性
操作系统占用了额外资源
开发和运维面对的挑战
我们开发一个项目,会分前后台,后台会采用Java,python等语言,数据库也不同,对于一个App来说可以使用的开发方式是特别多的,所以如果进行测试就需要安装所有的依赖和工具,很烦。
运维来说还要部署一个App,哪怕直接部署云机器,也需要安装一堆依赖,安装数据库,后台环境等等,还有监控工具等。
而且开发和运维之间也缺乏沟通,开发和运维的应用环境也很可能不同。
容器
容器其实充当了开发和运维之间的沟通,他可以把App进行打包(container)为一个集装箱-一种标准,按照标准打包之后这个就可以随意运输到任何环境。
实现应用之间的隔离,这个可能没有虚拟化技术的隔离彻底,但是也可以实现。
共享同一个OS的核心,例如同一个物理机或者虚拟机。
容器和虚拟机区别
Docker是容器技术的一种实现,在Docker上面创建Container。
当然容器和虚拟机是可以一起使用的,例如进行物理资源虚拟化之后产生Linux虚拟机,并在Linux虚拟机上安装Docker,创建container,运行不同的App,实现了资源的利用。
Docker是在2013年由dotCloud创建,其实Docker利用了之前底层的LXC技术,2013年进行了开源。
2016年分了企业版和社区版。