热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

docker和vagrant比较

2019独角兽企业重金招聘Python工程师标准vagrant:Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它使用Ora

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

  • vagrant:
    Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它 使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境
  • docker:

 

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
  1. dockerClient客户端
  2. Docker Daemon守护进程
  3. Docker Image镜像
  4. DockerContainer容器

比较:

 

相似之处是Vagrant和Docker都是虚拟化技术。Vagrant是基于Virtualbox的虚拟机来构建你的开发环境,而Docker则是基于LXC( LXC)轻量级容器虚拟技术。全面理解这两种虚拟技术的区别,需要阅读很多文档。我这里打个简单的比方,虚拟机之于容器虚拟技术相当于进程和线程。虚拟机内可以包含很多容器,正如一个进程中可以包含很多线程。虚拟机重,容器虚拟技术轻。前者的Image一般以GB计算,Docker则以100MB为单位计算。
 

当然,提问者肯定更希望从应用层面来了解两者的区别。简单点讲,Vagrant就是你的开发环境的部署工具;而docker是你的运行环境部署工具。
很多程序员一定会问,为何还需要一个开发环境部署工具呢,我们平时随随便便就把一个WAMP服务器下载安装配置好了,简单方便,开包即用。
问题是,现实的开发环境会比这复杂太多太多。数据库、缓存服务器、反向代理服务器、Load Balancer、搜索引擎服务器(例如Sunspot或Elastic Search)、网站服务器、实时推送服务器。数据库往往还不止一种,为匹配各种架构一般创业公司都会起Mysql或Postgres,与此同时,根据你的业务需求可能还需要添入Nosql或管理时间序列等各类数据库。这么多种不同的服务器,需要被配置并且完美地在一起配合工作,相信任何老司机都知道,不是易事。即使你对每一块都很熟悉,每一次从头配置起,你总会在某些地方栽跟头,即使依照事先做好的部署脚本来做,你还要保障每个软件工具的版本一致,然后脚本运行准确无误。即使真的有老司机熟练到每一次服务器迁移或者服务器扩容,都能准确无误地部署,那还是躲不过一个事实:老司机有一天也会离职,这项精确的部署技能如何得以香火延续?你教得再好,那也只代表你教的,线上运维问题就像打鼹鼠游戏,此处扑灭,彼处着火。
上述实际部署中会遇到的问题,不知道难倒过多少运维老司机,甚至一个小问题、小迁移,就能让他们痛不欲生、彻夜奋战。放假前五分钟能搞定的事,放假后愣是得用五个小时对付。
转而去思考一番,一个非常顺其自然的方法就是把当前的开发环境做个镜像,然后拷到U盘里,这样每一个新员工加入直接对着U盘安装就行(我有朋友的公司就这么干的!)。但这还是解决不了太多太多开发环境的设置问题,如果开发环境更迭了呢?再做一个u盘么?其他人再安装一遍么?

这个时候,vagrant的就出现了,而vagrant的出现显然就是为了解决以下两个重点问题:(1)开发环境快速部署 (2)开发环境更迭。少一个点没解决好,vagrant的存在都是伪需求。

说白了vagrant就是一个普普通通的装了一个Linux的VirtualBox虚拟机,配以vagrant 团队为之开发的一系列套件,辅助完成诸如安装初始化、文件同步、ssh、部署环境升级、功能插件安装等等一些列问题的开发环境部署套件。也没什么好神秘的。

但关键问题是,因为国内没有非常好的vagrant资源提供商,vagrant在国内没法正常使用。至少,我在国内一共尝试了三次,三次的结果我都是觉得vagrant没法给我周边的程序员增加生产力。原因我已经说了,如果你硬要尝试着玩玩,我建议你先准备好一个国内最好最稳定最快速的网络加速器(俗称FQ),然后在vagrant up、vagrant provision以及其他vagrant需要安装境外资源前把proxy代理先设置好。否则....那得慢出翔来!!! 这是我觉得最不能忍的地方!!!为了装个比体验下硅谷最先进的开发环境部署工具,我tm死死地盯着屏幕vagrant up长达一个小时,还随时有可能断线导致整个过程重来。你知道,我现在想来都是一肚子火!!

DOCKER,我给了它一个大写。它的情况就完全完全不一样了!!

首先,简单地说,Docker就是在内核容器技术(Cgroup和Namespace)的基础上,提供了一个更高层的控制工具,该工具包含一下特性:(1)跨主机部署(2)以应用为中心 (3)自动构建 (4)版本管理 (5)组建重用 (6)共享 (7)工具生态链。 《Docker 进阶与实战》Page.8 By 华为Docker实践小组。

By the way, 国内Docker哪家强? 别胡扯了,技术上,第一绝壁是华为!去Docker的github主页上翻翻它的前200的contributors,看看有多少华为的。技术上是华为,但从生态上,我觉得最强的是阿里,阿里一家就把代码托管、docker持续集成部署以及虚拟主机三块业务全部做了,而且三者都非常好用。仅docker持续集成部署这一项,我觉得就已经完爆我用过的所有的docker服务了,这里我就不一一列举,很多都是业内朋友,难免误伤。而且阿里很有钱,他们可以任性免费到底。所以docker选哪家?我呢,也是docker使用老司机了,从硅谷工作、我的第一个创业项目、第二个创业项目,通通都是docker部署的,我现在使用的是阿里容器服务: https://cs.console.aliyun.com ,配合阿里的虚拟主机以及代码托管(code.aliyun.com),实在不能再方便。

创业圈的docker服务,我比较推荐http://daocloud.io,很久以前我还去他们家上海总部做过使用开发demo,这是一家很有工程师文化的企业,而且里面确实有好几个国内docker界顶级玩家。

话说到此,docker之所以在国内能流行起来,是因为docker在国内有强大的群众基础;而这个群众基础的建立是多方面原因的,例如:docker的管理高层也多次来华参加活动,助力docker;无数个docker服务商在做着各种各样的docker底层设施工作。可是归根结底,docker之所以会受到如此追捧,是因为docker是一门真正意义上的具有革命性和划时代意义的普惠技术,而vagrant不是。docker可以帮助你实现秒级部署、分钟级服务器栈迁移。这是历史上还从来没有发生过的事。

那针对国内可以流畅使用docker但无法正常使用vagrant的情况,作如何处理呢?

我们团队的解决方案是将服务器部署的docker编排脚本(docker-compose)直接修改参数以适应Local开发。每次开发前,docker-compose up -d,再配以各类脚本。结果是,这样开发起来比在硅谷用Vagrant还要爽!!Vagrant所有的操作都可以用在docker中一样做,例如:

  • 复制文件: vagrant scp; docker cp
  • ssh: vagrant ssh; docker-compose exec CONTAINER /bin/sh

所以,到最后,我们发现,开发部署都用docker还有一个额外好处,vagrant的开发环境到部署环境还是存在差异的,而我们开发用的起docker集群的编排脚本无需经过调试直接复制到服务器端就能一行命令解决部署:
docker-compose up -d

 

Vagrant is a tool focused on providing a consistent development environmentworkflow across multiple operation systems. Docker is a container managementthat can consistently run software as long as a containerization system exists.

Containers are generally more lightweight than virtual machines, so startingand stopping containers is extremely fast. Most common development machinesdon't have a containerization system built-in, and Docker uses a virtual machinewith Linux installed to provide that.

Currently, Docker lacks support for certain operating systems (such asBSD). If your target deployment is one of these operating systems,Docker will not provide the same production parity as a tool like Vagrant.Vagrant will allow you to run a Windows development environment on Mac or Linux,as well.

For microservice heavy environments, Docker can be attractive because youcan easily start a single Docker VM and start many containers above thatvery quickly. This is a good use case for Docker. Vagrant can do this as wellwith the Docker provider. A primary benefit for Vagrant is a consistent workflowbut there are many cases where a pure-Docker workflow does make sense.

Both Vagrant and Docker have a vast library of community-contributed "images"or "boxes" to choose from.


转:https://my.oschina.net/u/3477605/blog/3041918



推荐阅读
  • PostgreSQL 最新动态 —— 2022年4月6日
    了解 PostgreSQL 社区的最新进展和技术分享 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 本文探讨了SSDP(简单服务发现协议)和WSD(Web服务发现)协议,特别是SSDP如何通过固定多播地址239.255.255.250:1900实现局域网内的服务自发现功能。文中还详细介绍了SSDP协议的关键操作类型及其应用场景。 ... [详细]
  • Python第三方库安装的多种途径及注意事项
    本文详细介绍了Python第三方库的几种常见安装方法,包括使用pip命令、集成开发环境(如Anaconda)以及手动文件安装,并提供了每种方法的具体操作步骤和适用场景。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 本月初,我们为大家推荐了一系列精选书单,助力大家提升技术水平。月底,我们将介绍几位行业大牛,帮助大家找到人生导师。InfoQ一直致力于为用户提供有价值的资源和支持。 ... [详细]
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • 本文探讨了如何通过一系列技术手段提升Spring Boot项目的并发处理能力,解决生产环境中因慢请求导致的系统性能下降问题。 ... [详细]
  • 深入解析Hadoop的核心组件与工作原理
    本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ... [详细]
  • 解决Python中 'NoneType' 对象无属性 'find_all' 错误
    本文详细探讨了在Python编程中遇到的常见错误——'NoneType'对象没有属性'find_all',并深入分析其原因及解决方案。通过理解find_all函数的工作原理和常见用法,帮助读者避免类似问题。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 本文探讨了现代分布式架构的多样性,包括高并发、多活数据中心、容器化、微服务、高可用性和弹性架构等,并介绍了与这些架构相关的重要管理技术,如DevOps、应用监控和自动化运维。文章还深入分析了分布式系统的核心概念、主要用途及类型,同时对比了单体应用与分布式服务化的优缺点。 ... [详细]
  • 本文详细介绍了如何在Python3环境中配置Appium1.4.6,并指导如何连接模拟器进行自动化测试。通过本文,您将了解从环境搭建到模拟器连接的完整流程。 ... [详细]
  • 本教程旨在指导开发者如何在Mac上设置React Native的开发环境,以进行iOS应用的开发。文中详细介绍了必要的软件安装步骤,包括Xcode、Homebrew、Node.js、Watchman以及React Native CLI等工具的安装方法。 ... [详细]
author-avatar
打工仔成军军
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有