Docker是什么
Docker是什么
相信我们很多人都使用多VM(Virtual Machine),也就是虚拟机,简单的来说Docker就是类是于VM的容器,但Docker要轻量得多,VM(Virtual Machine)是重量级的;VM是硬件级别的虚拟化技术,而Docker只是内核级别的虚拟化技术,Docker是开源的容器引擎,就拿Docker官方的两张图来说:
VM(Virtual Machine):第一张是VM的图;VM其实就是一个虚拟的硬件环境,在使用VM的时候我们都需要在VM中装一个完整的OS然后再在OS中部署我们的Application,图片中的Hypervisor就是VM的核心,它用于虚拟硬件环境,然后可以在Hypervisor之上安装多个OS;
Docker:第二张就是Docker在于整个结构中的图,Docker没有模拟整个硬件环境,它只需要在宿主主机中装Docker Engine(Docker引擎),然后就可以在Image(镜像)创建多个Container(容器),各个容器运行环境都是独立的可以简单的说每个Container都是一个独立的OS,每个Container与宿主使用同一个内核,对进程与资源进行了隔离;Docker也不是新技术,Docker只是在LXC(Linux Container)的基础上进行封装发展起来的;
光从这两张图就可以看出VM与Docker的区别了,相比Docker,VM是多么的轻量;单个程序很多时候不能够完全的使用单台计算机的硬件资源,这时候VM就出现它能够在单台计算机上装多个OS运行多个程序,但VM上的OS占用资源过多;而Docker与主机共享内核,可以运行更多的Container,Docker比VM更能榨干计算机的硬件资源;
VM(Virtual Machine)
- 需要安装OS
- 基于硬件的虚拟化
- 启动每个OS都需要几十秒
- 主机上的OS数量有限制
- OS占用的资源过多
Docker
- 不需要安装OS
- 基于内核的虚拟化技术
- 每个Container的启动是毫秒级别
- 主机上可以有几百上千个Container
Docker的作用
关于开发
在之前程序的部署是个麻烦的环节,开发者写好程序之后要进行测试就需要在测试机装程序远行的环境,到测试好之后又要在正式机上装完全一样的程序运行环境,当测试机、或正式机上的运行环境与开发的环境有一点不一样程序就会出现问题,而使用了Docker之后就不会出现在测试机配置运行环境、在正式机远行环境这些问题,只需要开发者配置好一个Image,然后再测试机、正式机上下载Image,然后在Container中运行程序即可,省去了来回配置运行环境的问题;
关于程序分发
现在我们每当要使用一个程序或框架的时候都是把软件下下来然后各种折腾程序的远行环境程序才能跑起来,当使用了Docker后就可以把程序放在Image中,使用者只需要把Image下下来即可,不需要去折腾各种环境各种依赖,Docker决解了程序依赖的问题,它把依赖都打包进了Image中;
Docker为CI(Continuous integration)、MicroService的使用提供了很好的使用环境,企业内部的私有云也很多使用了Docker;
Docker发展
短短两三年时间,Docker得到了各大云服务厂商的支持现在亚马逊、微软、谷歌等等的云服务都有支持了Docker;Docker不再只支持Linunx,微软对Docker可以说是很看好的,最新的Windows Server将原生的支持Docker;CoreOS 也发布了与Docker类是的容器引擎;
由于Docker才出现没几年所以Docker周边的工具还是健全,管理过多的容器还是很麻烦的,但Docker现在的生态环境很活跃相信这些只是时间问题;
文章首发地址:Solinx
http://www.solinx.co/archives/372
最新文章
- php cryptr 加密函数
- 00.Web大前端时代之:HTML5+CSS3入门系列~Bug反馈文章
- lua闭合函数
- 【java】:通用小知识
- 【Spring】利用Spring最简单地使用异步方法
- 关于mac book 的启动选项
- JAVA调用系统命令或可执行程序--返回一个Runtime运行时对象,然后启动另外一个进程来执行命令
- Struts2 url传递中文出现乱码
- javascript cookie 操作
- 【Xamarin挖墙脚系列:移动设备应用的开发周期及准则】
- SQLServer使用规范(转载)
- bzoj 3531 [Sdoi2014]旅行(树链剖分,线段树)
- Collection使用方法
- 连接Xively云
- 快速构建Windows 8风格应用28-临时应用数据
- PCL+VS2010环境配置
- Centos7(Linux)网络配置,自动获取ip地址
- ruby利用Zip Gem写一个简单的压缩和解压的小工具
- NSURLSession 所有的都在这里(一)
- django2.0无法加载外部css和js的问题
热门文章
- c++之string.find(string)
- Scalaz(49)- scalaz-stream: 深入了解-Sink/Channel
- ahjesus 单词单数-复数相互转换C#
- 通过rsync+inotify实现数据实时备份同步
- 编译C#代码
- 12款免费的 WordPress 响应式主题下载
- 优秀案例:12个精美的设计工作室 &; 设计公司网站
- [js开源组件开发]query组件,获取url参数和form表单json格式
- Windows 安装 GTK+ 图文说明
- [deviceone开发]-仿微信应用(一):框架搭建