Vagrant开发运维实战

978-7-115-56337-8
作者: 亚历克斯▪布朗顿(Alex Braunton)
译者: 高远
编辑: 陈聪聪

图书目录:

详情

Vagrant 是一款开源软件,它允许开发者以编程的方式管理虚拟机,致力于帮助团队之间共享开发环境。本书不仅全面地介绍了 Vagrant 的各个知识点,还包含了很多相关生态的应用技巧。本书前8章以循序渐进的方式介绍了 Vagrant 的各个功能点和特性,后6章则详细介绍了5种主流服务开通工具(Ansible、Chef、Docker、Puppet和Salt)以及它们是如何与 Vagrant 完美结合的,通过阅读本书,相信读者一定能有所收获。 本书可以供对 Vagrant 有很少甚至没有经验的初学者阅读;已经对Vagrant有所了解的读者,在阅读本书后也将更好地理解和使用 Vagrant。无论读者处于什么水平,通过本书讲解的全新知识点以及应用技巧,一定能有所收获。

图书摘要

版权信息

书名:Vagrant开发运维实战

ISBN:978-7-115-56337-8

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。


著     [英] 亚历克斯•布朗顿(Alex Braunton)

译    高 远

责任编辑 陈聪聪

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315


Copyright © Packt Publishing 2021. First published in the English language under the title Hands-On DevOps with Vagrant.

All Rights Reserved.

本书由英国 Packt Publishing 公司授权人民邮电出版社有限公司出版。未经出版者书面许可,对本书的任何部分不得以任何方式或任何手段复制和传播。

版权所有,侵权必究。


Vagrant是一款开源软件,它允许开发者以编程的方式管理虚拟机,帮助团队之间共享开发环境。本书不仅全面地介绍Vagrant的各个知识点,还包含很多相关生态的应用技巧。本书前8章以循序渐进的方式介绍Vagrant的各个功能点和特性,后6章则详细介绍5种主流配置管理工具(Ansible、Chef、Docker、Puppet和Salt),以及它们是如何与Vagrant协同工作的。阅读完本书,相信读者一定能有所收获。

本书可供Vagrant开发与运维的初学者阅读,已经对Vagrant有所了解的读者在阅读本书后也将更好地理解和使用Vagrant。无论读者处于什么水平,通过学习本书讲解的全新知识点和应用技巧,都能有所收获。


亚历克斯•布朗顿(Alex Braunton)是一名白天专注于LAMP技术栈Web开发,夜晚专注于研究硬件技术的极客。他热衷于各种技术领域,并且喜欢用他的Respberry Pi系列组件去构建机器人和家装自动化系统。目前他专注于提高自己的DevOps知识,并且尝试了一系列技术,如无服务器架构、虚拟现实以及GraphQL。他还收藏了大量的盆景,经常和家人一起讨论盆景艺术和历史。

首先要感谢我的妻子弗朗西斯卡(Francesca)。没有她的支持,这本书是不可能完成的。我还要感谢Packt团队,他们引导我完美地完成了本书的每一步,尤其是罗希特•拉杰库马尔(Rohit Rajkumar)和达塔特拉亚•莫尔(Dattatraya More)。我要感谢米切尔•桥本(Mitchell Hashimoto)[与阿蒙•达加(Armon Dadgar)联合创办了HashiCorp公司]创造了一个非常出色的软件——Vagrant,他的想法和代码真正激发了我的灵感。


米查•沃翁凯维奇(Michal Wolonkiewicz)获得驾照前刚刚开始参与home meteo工作站网络的搭建。作为公共和私营部门系统工程师,他获得了自己的第一次商业经验,改进了投资银行的基础设施,并指导开发人员如何使用它们。他还经营着一家咨询公司,其目标是提供IT、电信和安全技术方面的专业知识。您可以通过邮箱michal@wolonkiewi.cz联系到他。

特别感谢我的家人——我的妻子艾达(Ada)和我的儿子沃伊切赫(Wojciech),他们让我更强大、更富有耐心。


Vagrant是一款开源工具,它允许开发者以编程的形式管理虚拟机。Vagrant主要致力于创建世界各地团队之间可以共用的开发环境,解决了“在我的机器上运行正常”这种问题,并允许任何人使用Vagrantfile配置文件创建其他原始机器的副本。

Vagrant由米切尔·桥本创建并维护,并且一直由他提供支持和更新。这款软件自2010年创建以来一直在不断完善。

在本书中,我们将介绍Vagrant的方方面面。本书可供对Vagrant开发与运维知之甚少的初学者阅读。我们将介绍如何安装Vagrant,以及启动运行它所需的所有基本知识。

本书也可供需要进阶的读者阅读,以帮助其更好地理解和使用Vagrant。我们将使用Chef和Ansible等配置管理工具来介绍可用的命令、网络、多机器配置等。

无论您处于什么水平,通过学习本书讲解的全新知识点和应用技巧,您都能有所收获。

第1章带领您走进Vagrant的世界。本章通过介绍Vagrant的基础知识来引导您阅读本书。您将了解Vagrant是什么、Vagrant的优点、VirtualBox是什么,以及DevOps是什么。您还将了解Vagrant如何适应DevOps环境、如何将Vagrant用作DevOps工具,以及一些其他软件。

第2章介绍如何在Windows、macOS和Linux操作系统上安装VirtualBox和Vagrant。您将学习通过浏览VirtualBox和Vagrant官网完成下载、安装以及验证已安装的软件等  操作。

第3章介绍使用Vagrant提供的有效命令的方法。您将了解所有可用的Vagrant命令和子命令。您还将了解Vagrant命令的结构、如何使用help命令获取更多信息,以及每个命令的简要说明。在本章结尾,您将掌握通过命令行管理Vagrant的方法。

第4章涵盖Vagrant box的方方面面。我们将研究如何管理Vagrant box,包括安装、删除和版本管理。我们还将创建一个box,来建立Vagrant环境的基本依赖。在这一章,我们还将介绍Vagrant Cloud及其用途。Vagrant Cloud是一个可搜索并下载Vagrant box的网站。我们将介绍一系列内容,包括如何使用Vagrant Cloud网站、如何搜索特定的box以及如何安装它。

第5章探索Vagrantfile的知识,Vagrantfile允许您轻松定义Vagrant机器。Vagrantfile提供许多不同的配置项,例如网络、文件夹同步、多机器选项、原生配置和特定程序的配置等。一旦创建,您就将学习Vagrantfile的语法、格式以及如何验证它们。

第6章介绍如何简单地配置Vagrant网络并用它创建一些强大的设置。这一章主要介绍3种主要的网络配置项:端口转发、专用网络和公用网络。您将通过实例学习如何使用这3种网络,并且了解它们各自的优点。

第7章介绍多机器配置功能,它允许使用单个Vagrantfile管理和配置多台Vagrant机器。您将创建一个模拟真实场景的多机器环境,创建一台运行Web服务的机器和一台运行数据库的机器,这些机器将按照网络配置进行通信。这将为您后面的学习打下坚实的基础,并帮助您使用多机器选项创建强大的环境。

第8章探索Vagrant插件与文件同步。虽然Vagrant提供了很多特性,但是您仍然可能会有一些额外的功能需求。在这一章,您将学习关于Vagrant插件的内容。您会发现安装和使用Vagrant插件有多么简单。您将学习很多的命令和子命令,学习如何使用Vagrant同步文件以及不同的可用配置项。

第9章介绍如何使用Vagrant处理配置管理需求,这是Vagrant的又一个强大特性,可以让您很轻松地配置Vagrant机器。这一章将向您详细介绍配置管理工具、Shell形式和文件形式的配置管理。在使用这些类型的配置管理方式时,您也可以了解到多种可用的配置选项。

第10章介绍使用Ansible和Ansible Playbook配置Vagrant环境。在学习如何在机器上使用Ansible配置Vagrant box之前,您还将简要了解如何在Vagrant机器上安装Ansible。

第11章介绍如何使用Chef和Chef Cookbook来配置Vagrant环境。您将学习如何使用基本选项(Chef Solo)和高级选项(Chef Client)来配置机器。

第12章深入研究如何使用Docker配置Vagrant环境。我们将研究如何从Docker Hub搜索并拉取镜像,以及将镜像作为容器启动的过程。我们还将介绍在将Docker用作Vagrant配置器时可以接受的不同配置项。

第13章探索如何使用Puppet配置Vagrant环境。您将学习Vagrant支持的两种主要方式:Puppet Apply和Puppet Agent。使用Puppet Agent时,您将学习如何连接Puppet Master进而从中检索指令。

第14章解决使用Salt配置Vagrant环境的问题。您还将了解Salt State,它帮助我们将制定的包和服务添加到配置管理流程中。

本书同时面向初学者和进阶读者。它将教您安装所需的软件,如果您已经安装了,请检查版本,因为您的版本与本书使用的可能存在差异。您可能需要升级软件,这些软件包括以下几种。

本书的每一章都值得反复阅读,这样您就不会错过任何东西。如果您需要更多的信息或者说明,可以查阅Vagrant的官方文档。


本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。

本书提供源代码。

要获得以上配套资源,请在异步社区本书页面单击按钮,跳转到下载界面,按提示进行操作即可。注意,为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,选择“提交勘误”选项卡,输入错误信息,单击“提交”按钮即可,如右图所示。本书的作者和编辑会对您提交的错误信息进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

我们的联系邮箱是fudaokun@ptpress.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们。

如果您所在的学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值内容的动力之源。

“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。详情请访问异步社区官网https://www.epubit.com。

“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社的计算机图书出版经验积累和专业编辑团队,相关图书在封面上印有异步图书的Logo。异步图书的出版领域包括软件开发、大数据、AI、测试、前端、网络技术等。

异步社区

微信服务号


一场激动人心的旅程即将为您开启。本节将会重点关注Vagrant与其在DevOps中的角色。通过这些章节,您将学习一些有趣且有用的内容,以及关于Vagrant的知识和技巧。在开始的几章中,我们会专注于Vagrant的基础知识,并演示如何在计算机上安装和运行Vagrant。在后面的几章中,我们会专注于讲解Vagrant的核心功能,即命令、网络、多机器、Vagrantfile以及配合使用的配置管理工具(如Chef、Docker和Ansible)。学习完本书,您将掌握Vagrant坚实的基础知识以及部分DevOps日常工作流中的必要技能。

在本章中,我们将帮助您理解什么是Vagrant、什么是VirtualBox,以及如何将Vagrant与DevOps生态联系起来。我们还将介绍DevOps生态中当前开发工具的状态,并介绍组织中的不同人员如何使用Vagrant——而不仅是开发人员!学完本章,您将对Vagrant、VirtualBox和DevOps的基础知识有更进一步的了解。

在本节中,我们将介绍Vagrant的特性、优点,以及它在DevOps中作为工具使用的规范。

Vagrant看起来很简单,但实际上非常复杂。它允许您快速、轻松地创建和自定义虚拟环境(Vagrant box)。Vagrant可以轻松地与多个provider软件集成,例如VirtualBox、VMware和Docker。这些provider实际用于创建虚拟环境(虚拟机),而Vagrant能为这些虚拟机提供可自定义的接口。

Vagrant拥有大量命令,您可以通过命令行终端来管理虚拟环境。使用这些命令可以从Vagrant Cloud快速下载和配置一个虚拟环境。Vagrant Cloud中托管了许多流行的环境,例如Ubuntu操作系统、PHP Laravel运行环境。

Vagrant是一款在许多程序员的工具箱中都能找到的重要软件。它允许每个人拥有相同环境的副本,通常被用来解决“它在我的机器上工作”这种常见的问题。

Vagrant由米切尔·桥本(Mitchell Hashimoto)创建,并于2010年3月发布。Vagrant相关业务现在是米切尔·桥本于2012年与阿蒙·达加(Armon Dadgar)共同创立的HashiCorp公司的一部分。Vagrant是一个用Ruby语言编写的开源软件,目前使用MIT许可证,可以在macOS、Windows、FreeBSD或Linux上运行。

Vagrant本质上是虚拟化相关栈中的一层。作为一个可以使用易编程接口控制虚拟环境的层,Vagrant依赖于VirtualBox这样的provider程序来为这些环境提供支持,但它也可以配置provider使它们协调工作,例如Vagrant控制虚拟环境的内存(RAM)。

Vagrant提供了很多特性来帮助您构建和配置虚拟环境。Vagrant的特性可以归纳为以下一些关键字:Vagrantfile、box、网络、配置管理和插件。可以使用命令行工具和Vagrantfile两种主要的方式来控制Vagrant。命令行工具一般用来执行管理员的一些任务,例如下载或导入一个新的Vagrant box,或者删除一个已有的Vagrant box。

1.Vagrantfile

Vagrantfile是一种用Ruby语言编写的配置文件。它很容易理解,可以在修改它后执行vagrant up命令来快速测试结果是否符合预期。可以轻松地共享Vagrantfile并将其加入版本控制。它是轻量级的,包含其他用户复制其虚拟环境或者应用程序所需要的一切。

2.box

box是类似Vagrantfile的一类包,常用于复制虚拟环境并能被共享。执行vagrant box add命令可以轻松下载它们。Vagrant Cloud提供了一个非常易于搜索的box列表,其中包含大量box的信息,例如创建者、版本、下载次数以及简要说明等。

3.网络

Vagrant在创建虚拟环境时支持3种主要的网络:端口转发、私有网络和公有网络。最简单的网络是端口转发,它允许您通过客户机操作系统访问特定的Vagrant机器端口。公有和私有网络更复杂,能提供更多的配置,相关内容我们将在以后的章节中介绍。

4.配置管理

Vagrant中的配置管理为您提供了更多配置Vagrant机器的方法。您可以在创建机器的同时安装软件和配置。您可以使用Shell脚本、Docker、Chef、Ansible和Puppet等其他配置管理软件来配置Vagrant机器。

5.插件

Vagrant插件提供了另一种定制和扩展Vagrant功能的可能。它们允许您与Vagrant的底层进行交互,赋予Vagrant更多新的命令行工具。

Vagrant允许您轻松打包可以在其他开发人员之间共享的虚拟环境。这种打包的虚拟环境通常称为Vagrant box,用它可以配置出运行Web应用程序或者代码的镜像生产环境。这样可以最小化在将应用/代码部署到生产环境时出现的问题。

Vagrantfile的优势在于,它的文件通常很小,易于编辑和测试;它的语法也很容易理解,由此提供了一种构建复杂环境的简单方法。

Vagrant可供团队中的不同成员使用,包括开发、运维和设计人员。

1.开发人员

对开发人员来说,Vagrant允许他们将代码或者应用程序打包成易于分享的、完全一致的开发环境。打包后的开发环境可以被使用不同操作系统的开发人员使用,如macOS、Linux或者Windows操作系统。

2.运维人员

运维人员可以使用Vagrant简单而快速地测试部署工具和脚本。Vagrant支持很多流行的运维/DevOps部署工具,如Puppet、Docker和Chef。测试部署脚本和基础架构拓扑时,使用Vagrant是一种成本更低、更快速的选择。所有事情都可以使用Vagrant在本地完成,也可以使用Vagrant与Amazon Web Services等服务配合完成。

3.设计人员

Vagrant可以让开发人员和运维人员创建运行代码的虚拟环境,为设计人员准备好应用程序,以便在他们的计算机上轻松运行此环境并对应用程序进行修改。当开发人员做了变更或者必须更新Vagrantfile的时候,反馈是实时的,而且无须进行额外的配置。

VirtualBox是Vagrant支持的众多provider之一。它是一款强大的虚拟化软件,可以让您在现有的操作系统上创建虚拟环境。它允许您完全自定义虚拟机硬件,包括RAM、CPU、硬盘驱动器、声卡和显卡等。

VirtualBox最初于2007年1月由Innotek GmbH公司发布,该公司后来被Sun Microsystems公司收购,后者又被Oracle公司收购。Oracle公司正在积极维护和发布VirtualBox的新版本。

VirtualBox是由x86 Assembly、C++ 和C语言构建的。它可以运行和支持许多不同的操作系统,例如Windows、Linux、Solaris和macOS。

DevOps是目前IT界的一个流行术语。关于DevOps究竟是什么,有很多不同的解释。简单来说,DevOps是开发和运维的混合体。它本质上是一种了解运维与基础设施的“混合程序员”,或者是了解编程并可以开发应用程序的系统管理员。

DevOps是方法论、实践、哲学和软件的混合体。DevOps通过创建适用于所有部门的工作流来简化整个项目的生命周期。DevOps中没有既定的规则和标准,它通常是一个通过开发和发布代码的简单方法来连接开发人员和基础架构团队的过程。

DevOps的优点在于任何公司都可以遵循自己的想法、方法和实践来开展。大公司可能拥有一个完整的DevOps部门或团队;较小的公司可能只需要一个或两个专门的DevOps员工;而初创公司必须仔细做好预算,一名员工可以同时担任开发人员和DevOps的角色。

在本节中,您将了解Vagrant在DevOps中的当前开发状态、Vagrant如何适应DevOps,以及如何将Vagrant用作日常DevOps工具。学习完本节,您将更好地理解Vagrant是如何作为DevOps过程的一部分用于开发的。

正如前面所述,DevOps是软件开发、运维,系统管理、测试,以及质量保障的混合体。DevOps不是一个新生事物,但是它并不一定有一个“领导者”或者一套规则和标准可以遵循。每家公司都对DevOps是什么,以及如何实施DevOps有自己的想法。由于DevOps缺乏治理,大多数人遵循非常类似的路径或粗略的准则,因此目前的发展状况参差不齐。

传统的工作流中,开发人员始终与运维和服务人员是分开的,但是在过去几年中,我们已经看到许多DevOps工具弥补了这一缺陷,这使双方的工作和生活更加轻松。

在过去,当Web开发人员构建Web应用程序时,他们会先写代码,在本地构建机器,然后将文件通过FTP传输到实时(生产)环境的服务器上,让代码运行起来。如果有任何问题或者Bug产生,开发人员必须对服务器环境进行变更并调试代码。有许多开发人员仍在使用此工作流,这可能是因为他们的环境使他们在此问题上别无选择。

今天,现代Web开发人员的工作流可能如下所示。

① 开发人员在本地编写代码,但是是通过虚拟环境或机器使用Vagrant等工具来编写的。这允许开发人员直接设置与实际生产相同的环境。

② 开发人员编辑其代码并使用版本控制(如Git或Subversion)来管理代码的更改。版本控制的设置方式允许开发人员将测试或新的代码与生产环境使用的代码分开。

持续集成(Continuous Integration,CI)工具(例如Jenkins或Travis CI)用于创建通常具有3个独立阶段(开发、预发布和生产)的管道。CI工具可以用来对软件的运行进行测试,还可以运行脚本,例如通过命令组合和压缩准备物料。版本管理软件可以和CI工具联动,一般是通过前者触发构建和测试。当开发人员推送了新的代码到预发布环境,测试会在代码发布到生产环境之前先运行一遍。

④ 通常情况下,如果测试没有问题,代码会被直接推送到版本管理仓库的生产分支。这时,CI工具可能会触发一个新的构建,这将触发和代码有关的服务更新与重启。这步可能很简单,也可能很复杂,具体取决于生产环境的软件架构。

⑤ 在这个过程中的某个阶段,质量保证/测试(Quality Assurance/Testing,QA)团队或者希望在代码投入生产之前审查代码的高级开发人员可能会进行人工干预。

当然,这只是一个工作流示例,在不同的公司和开发人员之间会有差异。现代的工作流可能看起来更复杂和乏味,但这是一个很好的衡量指标。您会注意到,在每个阶段,在真实用户与在线的生产环境代码进行交互之前,总是有很多的检查和测试。在开发财务或者其他与关键业务相关的软件时,这一点尤为重要。这种现代化的工作流大大减少了错误出现的概率。

DevOps的现代化发展专注于速度和自动化。专注于速度让快速构建特性或者修复Bug,以及“将代码推送到生产”(您可能听过这句话)成为一种能力。这意味着单个开发人员或者单个团队的开发人员遇到的障碍更少,开发人员不用担心如何配置服务器和环境。

自动化是DevOps的重要组成部分,它也会影响开发的部分。您可以想象一下,如果一个开发人员改动了代码,然后必须等待运维团队的成员针对改动手动执行测试脚本后才能知道结果,那么流程会有多慢。

Vagrant是当今以DevOps为中心的开发人员工具箱中的关键工具之一。Vagrant本质上是一套工具,它允许开发人员创建配置模板代码,或者使用配置管理工具,例如Puppet、Chef和Ansible来自动化服务器上的工作流和环境。

Vagrant主要关注开发,它为团队中的每个开发人员提供了一种简单的方法来使用相同的环境。在Vagrant环境中,您可以运行与CI工作流紧密联系的版本控制,这允许您运行测试并将代码转移到不同的阶段。

Vagrant是一款灵活的工具,它允许您轻松测试DevOps工作流中的想法,这增强了日常开发各个阶段的能力。它允许您分离软件代码和基础架构,而不必对DevOps、基础架构、服务器和配置管理工具有太多的了解。

作为一款日常DevOps工具,Vagrant可以被用来做许多事情,包括如下内容。

在本章中,我们介绍了Vagrant这款非常强大且灵活的工具,它可以帮助您创建可模拟业务、应用的预发布和开发环境的虚拟环境。我们探讨了DevOps当前的发展状况、Vagrant是如何适应这种状况的,以及如何使用Vagrant作为日常开发工具。

在第2章中,我们将安装Vagrant及其依赖的provider——VirtualBox。我们将讲解如何在Windows、macOS和Linux中安装这些软件。您还将学习如何查看系统版本及其CPU架构。


相关图书

云原生测试实战
云原生测试实战
Kubernetes快速入门(第2版)
Kubernetes快速入门(第2版)
Kubernetes零基础实战
Kubernetes零基础实战
深入浅出Windows API程序设计:核心编程篇
深入浅出Windows API程序设计:核心编程篇
深入浅出Windows API程序设计:编程基础篇
深入浅出Windows API程序设计:编程基础篇
云原生技术中台:从分布式到云平台设计
云原生技术中台:从分布式到云平台设计

相关文章

相关课程