热门标签 | 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



推荐阅读
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 字节跳动夏季招聘面试经验分享
    本文详细记录了字节跳动夏季招聘的面试经历,涵盖了一、二、三轮面试的技术问题及项目讨论,旨在为准备类似面试的求职者提供参考。 ... [详细]
  • 本文将指导您如何在Docker环境中高效地搜索、下载Redis镜像,并通过指定或不指定配置文件的方式启动Redis容器。同时,还将介绍如何使用redis-cli工具连接到您的Redis实例。 ... [详细]
  • 深入分析十大PHP开发框架
    随着PHP技术的发展,各类开发框架层出不穷,成为了开发者们热议的话题。本文将详细介绍并对比十款主流的PHP开发框架,旨在帮助开发者根据自身需求选择最合适的工具。 ... [详细]
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社区 版权所有