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



推荐阅读
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • 从Oracle安全移植到国产达梦数据库的DBA实践与攻略
    随着我国对信息安全和自主可控技术的重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。本文介绍了如何降低从Oracle到国产达梦数据库的技术门槛,保障用户现有业务系统投资。具体包括分析待移植系统、确定移植对象、数据迁移、PL/SQL移植、校验移植结果以及应用系统的测试和优化等步骤。同时提供了移植攻略,包括待移植系统分析和准备移植环境的方法。通过本文的实践与攻略,DBA可以更好地完成Oracle安全移植到国产达梦数据库的工作。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 如何利用 Myflash 解析 binlog ?
    本文主要介绍了对Myflash的测试,从准备测试环境到利用Myflash解析binl ... [详细]
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社区 版权所有