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
Docker是什么的更多相关文章
- docker——容器安装tomcat
写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...
- Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境
首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...
- Docker 第一篇--初识docker
已经多年不写博客, 看完<晓松奇谈>最后一期猛然觉醒, 决定仔细梳理下自己这几年的知识脉络. 既然决定写, 那么首先就从最近2年热门的开源项目Docker开始.Docker 这两年在国内很 ...
- 在docker中运行ASP.NET Core Web API应用程序(附AWS Windows Server 2016 widt Container实战案例)
环境准备 1.亚马逊EC2 Windows Server 2016 with Container 2.Visual Studio 2015 Enterprise(Profresianal要装Updat ...
- docker for mac 学习记录
docker基本命令 docker run -d -p 80:80 --name webserver nginx 运行容器并起别名 docker ps 展示目前启动的容器 docker ps -a 展 ...
- scrapy爬虫docker部署
spider_docker 接我上篇博客,为爬虫引用创建container,包括的模块:scrapy, mongo, celery, rabbitmq,连接https://github.com/Liu ...
- [原][Docker]特性与原理解析
Docker特性与原理解析 文章假设你已经熟悉了Docker的基本命令和基本知识 首先看看Docker提供了哪些特性: 交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上, ...
- 开发者的利器:Docker 理解与使用
困扰写代码的机器难免会被我们安装上各种各样的开发工具.语言运行环境和引用库等一大堆的东西,长久以来不仅机器乱七八糟,而且有些相同的软件还有可能会安装不同的版本,这样又会导致一个项目正常运行了,却不小心 ...
- 使用python自动生成docker nginx反向代理配置
由于在测试环境上用docker部署了多个应用,而且他们的端口有的相同,有的又不相同,数量也比较多,在使用jenkins发版本的时候,不好配置,于是想要写一个脚本,能在docker 容器创建.停止的时候 ...
- 微服务与Docker介绍
什么是微服务 微服务应用的一个最大的优点是,它们往往比传统的应用程序更有效地利用计算资源.这是因为它们通过扩展组件来处理功能瓶颈问题.这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个 ...
随机推荐
- css知多少(10)——display
1. 引言 网页的所有元素,除了“块”就是“流”,而且“流”都是包含在“块”里面的(最外层的body就是一个“块”).在本系列一开始讲<浏览器默认样式>的时候,大家也都看到了浏览器默认样式 ...
- 分享50款 Android 移动应用程序图标【上篇】
在这个移动程序流行的时代,持续增长的应用程序经济充满了商业机遇.任何对应用程序设计感兴趣的人,将会喜欢上这里的50个独特的 Android 应用程序图标.这些例子中的图标能够让应用程序的设计更具吸引力 ...
- CSS代码记录
1. 内容横向滚动的代码 .ul { display: box; display: -webkit-box; width: 250px; background: yellow; overflow-y: ...
- Git正确的协作方式(很简单)
最近部门有人书写了一篇很好的Git协作方式,操作也简单,分支能以保持一条干净的线进行协作开发.这里做个笔记,方便之后查看. PS:本文非原创. 原则 不过分相信自己,自己的修改,可能影响所有人 不过分 ...
- 简单PHP会话(session)说明
现在程序员愈发的不容易了,想要精通,必然要寻本溯源,这其实与目前泛滥的愈发高级的语言以及众多的框架刚好相反,因为它们在尽可能的掩盖本源使其简单,个人称之为程序员学习悖论. 注:作者接触web开发和ph ...
- GP服务将矢量数据加入到栅格数据中的方法
1.如何将矢量数据加入栅格数据中 1. Conversion Tools -->To Raster-->Polygon to Raster 2. Spatial Analyst Tool ...
- c中的数组与字符串
一. 数组的基本概念 一个int类型的变量能保存一个人的年龄,如果想保存整个班的年龄呢? 1. 什么是数组 数组,从字面上看,就是一组数据的意思,没错,数组就是用来存储一组数据的 2. 数组的特点 l ...
- [转]setValue和setObject的区别
在使用NSMutableDictionary的时候经常会使用setValue forKey与setObject forKey,他们经常是可以交互使用的,代码中经常每一种的使用都有. 1,先看看setV ...
- 设计模式 之 装饰者(Decorator)模式
装饰者模式(Decorator):动态地为一个对象添加一些额外的职责,若要扩展一个对象的功能,装饰者提供了比继承更有弹性的替代方案. 结构图: 抽象构件类(Component):给出一个抽象的接口,用 ...
- LB 简单比较 – F5、NetScaler、LVS、Nginx、Haproxy
LB 简单比较 – F5.NetScaler.LVS.Nginx.Haproxy 负载均衡技术是构建大型网站必不可少的架构策略之一.它的目的是,把用户的请求分发到多台后端的设备上,用以均衡服务器的负载 ...