解决开发运维过程中存在的问题
一款产品从开发到上线,从操作系统,到运行环境,再到应用配置
作为开发+运维之前的协作我们需要关心很多东西,这是互联网公司不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验
Docker之所以发展如此迅速,也是因为它给出了一个标准化的解决方案
----------------------------------------------------------------------------------------------------------------
从根本上解决问题,软件可以带环境安装
安装的时候,把原始环境一模一样的复制过来,开始人员利用Docker可以消除编码时“"在我上可以正常工作"”的问题
--------------------------------------------------------------------------------------------------------------
Docker特征:一次构建,处处运行
Securely build, share and run modern applications anywhere
- Docker基于Go语言实现的云开源项目
-
主要目标:Build,Skip and Run Anywhere Anyway
-
通过对应用组件的封装,分发,部署,运行等生命周期的管理,使用户的App(web应用或者数据库应用)及应用环境能够做到一次封装,到处运行
-
Linux容器技术的出现就解决了这样一个问题,而Docker就是在他的基础上发展过来的,将应用运行在Docker容器上,而Docker容器在任何操作系统上都是一致的,这就实现了跨平台,跨服务器
-
只需要一次配置好环境,换到别的机器上就可以一键部署,大大简化了操作
解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术
虚拟化技术
Virtual machine 虚拟机
代表:VMware 和 Oracle VM VirtualBox软件
- 带环境安装的一种解决方案
- 在一个操作系统中运行另一个操作系统
- 比如windows系统里面运行Linux系统。而且程序对此毫无感知,因为虚拟机看上去和真实的系统一模一样
- 对于底层系统来说,虚拟机就是一个普通文件,不需要了就删除,对其它部分毫无影响
- 这类虚拟机完美了运行另一套系统,能够使应用程序,操作系统,硬件三者之间的逻辑不变
- 使用硬件资源虚拟化技术,完整的模拟一台真正的计算机
缺点
- 启动时间是分钟级,启动慢
- 资源占用多
- 冗余步骤多
Liunx容器 LXC Linux Container
- Linux 容器 不是模拟一个完整的操作系统, 而是对进程进行隔离
- 有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中
- 与虚拟机不同,不需要捆绑一整套的操作系统,只需要软件工作所需的库资源和设置
系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一运行
- 传统虚拟机是虚拟出了一套硬件后,在其上运行了一个完整的操作系统,在系统之上再运行所需的应用程序
- 而容器内的应用程序直接运行在宿主的内核之上,容器内没有自己的内核,而且也没有进行硬件虚拟,因此,Docker启动比虚拟机更为轻便
- 每个容器之间互相隔离,每个容器都有自己的系统,容器之间进程不会相互影响,能区分计算资源
Docker比VM块
Docker比虚拟机更少的抽象层,Docker不需要Hypervisor实现硬件资源虚拟化
运行在docker容器上的程序直接使用的都是实际物理机的硬件资源,因此CPU,内存利用率上效率有明显的提升
Docker利用的是宿主机的内核,而不需要Guest OS
当新建一个容器时,Dockers不需要和虚拟机一样重新加载一个操作系统,避免引寻加载操作信息内核等比较费时费资源的过程
当新建一个虚拟机时,虚拟机需要加载Guest OS,新建过程时分钟级别的,而Docker利用的是宿主机的操作系统,省略了这个过程,因此新建一个docker容器只需要几秒钟
开发/运维 DevOps 开发自运维
一次构建,随处运行
- 更快速的应用交付和部署
- 更便捷的升级和扩缩容
- 更简单的系统运维
- 更搞笑的计算资源利用
更轻量
- 基于容器的虚拟化,仅包含业务运行所需的runtime环境,Centos/Ubuntu基础镜像仅170M,宿主机可部署100-1000个容器
- 更高效
- 计算 无操作系统虚拟化的开销
- 系统盘 aufs/dm/overlayfs 数据盘 volume
- 网络 宿主机网络 NS隔离
- 更敏捷,灵活
- 分层的存储和包管理 ,devops理念
- 支持多种网络配资