Vagrant 搭建开发环境实践
介绍
Development Environments Made Easy
—官网标题
vagrant是一个命令行的虚拟机管理程序。用于简化搭建开发环境。
vagrant使用ruby语言基于Chef 开发。需要配合其他虚拟机程序进行工作,如vmare、virualbox、hyper-v等。并通过 CLI和VagrantFile(配置文件)管理虚拟机的所有功能。vagrant 使用自己的镜像格式进行环境部署,即box。类似于虚机的iso或者docker中的镜像。
选择vagrant+virualbox这个组合,因为它们都是开源的、跨平台的。vagrant搭建开发环境即简单又强大。
安装
官网下载安装。其中virualbox可选择安装
VirtualBox Extension Pack。使用虚拟机需要BIOS 开启虚拟化。
VirtualBox 官网
Vagrant 官网
BOX查找
https://app.vagrantup.com/boxes/search
几个场景
下面介绍几种vagrant 使用场景。所有步骤在WIN11系统下验证过。
1、一行命令搭建基本的开发环境
在CMD命令行下启动一个包含centos系统的虚拟机。其中"centos/7"是box名,root用户的默认密码是vagrant。真简单。
mkdir demo && cd demo && vagrant init centos/7 && vagrant up
2、单机开发环境
目标是搭建一个少量定制的单机开发环境。需要使用CLI命令和配置文件来完成。
手动下载BOX
网速慢可以自己下载box文件,并添加到本地box库。
下载地址:
https://app.vagrantup.com/centos/boxes/7/versions/2004.01/providers/virtualbox.box
box添加到本地库的命令
vagrant box add centos/7 CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box
**初始化 **进入命令行,建立一个目录,用centos/7 box 初始化。
md demo
cd demo
vagrant init centos/7
基本的配置文件 初始化后会在当前目录生成名为 Vagrantfile 的文件。以Ruby语言为格式。
Vagrant.configure("2") do |config|
config.vm.box = "centos/7" #box名称
config.vm.hostname="base" #虚拟机操作系统里的hostname
config.vm.network "private_network", type: "dhcp" #使用私有网络,自动分配IP
#config.vm.network "private_network", ip: "172.28.128.3" #也可以配置静态IP
config.vm.provider "virtualbox" do |vb|
vb.gui = false #启动时不开启GUI
vb.memory = "4096" #内存限制4096MB
end
end
常用命令
vagrant up #启动虚拟机
vagrant status #查看虚拟机状态
vagrant ssh #链接虚拟机
vagrant halt #关闭虚拟机
vagrant destroy #删除虚拟机
vagrant reload #重启虚拟机,可以生效修改的配置。
3、集群开发环境
目标是搭建一个运行在局域网中、包含多台物理机和虚拟机的集群环境。
思路是安装好公共box后,对其进行定制。打包成自定义box,分发到不同的物理机上部署。
使用vagrant的公共网络模式,为每个虚拟机在局域网分配固定IP,集群环境里的任意物理机和虚拟机可以直接互通。
初始化一个centos环境
md test
cd test
vagrant init centos/7
定制环境
允许用户名密码链接SSH
使用vagrant ssh 链接虚拟机
vagrant ssh
su #切换 root用户,密码vagrant
vagrant
vi /etc/ssh/sshd_config #编辑ssh配置文件
修改配置项、允许密码登陆,并保存。
PasswordAuthentication yes
service sshd restart #重启ssh服务
操作系统设置
#修改时区
timedatectl set-timezone Asia/Shanghai
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#关闭Linux
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
#关闭swap
swapoff -a #临时关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久关闭
free -g #验证,swap必须为0
设置阿里云Centos镜像源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
yum update -y
安装Docker
#依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
#源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#版本
yum list docker-ce --showduplicates | sort -r
#安装
yum install docker-ce-18.03.1.ce-1.el7.centos -y
#启动
systemctl start docker
systemctl enable docker
#设置阿里云docker镜像源
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://mt1tth70.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
自定义BOX
打包当前环境,默认名称package.box。加入本地库,取名base。
box本地仓库 默认路径 C:\Users\Administrator.vagrant.d\box
vagrant package
vagrant box add **base **package.box
配置文件
Vagrant.configure("2") do |config|
#虚拟机1号
config.vm.define "node201" do |node1|
node1.vm.box = "base" #使用自定义的box
node1.vm.hostname = "node201"
node1.vm.network "public_network", ip: "192.168.31.201"
end
#虚拟机2号
config.vm.define "node202" do |node2|
node2.vm.box = "base"
node2.vm.hostname = "node202"
node2.vm.network "public_network", ip: "192.168.31.202"
end
# config.vm.define "node203" do |node3|
# node3.vm.box = "base"
# node3.vm.hostname = "node203"
# node3.vm.network "public_network", ip: "192.168.31.203"
# end
config.vm.provider "virtualbox" do |vb|
vb.gui = false
vb.memory = "4096"
vb.cpus = 4
end
end
部署集群环境
将打包好的自定义box和配置文件,复制到需要部署的各物理机,并且安装vagrant环境。
通过vagrant box add
将box添加到物理机的本地库中。
调整 Vagrantfile 并通过 vagrant init
进行部署。
结语
扩展阅读vagrant的CLI、VagrantFile、插件、网络配置等可以在官网文档找到。
Documentation | Vagrant by HashiCorp (vagrantup.com)
Vagrant 搭建开发环境实践的更多相关文章
- MAC使用vagrant搭建开发环境
公司的开发环境是这样的: Windows主机通过虚拟机安装CentOS.平时在Windows下编辑代码,然后跑到虚拟机里编译. 我自己有台MAC,本来准备直接在MAC上装开发环境的.基于以下两个原因放 ...
- vagrant 搭建开发环境
虚拟机盒子地址 https://app.vagrantup.com/boxes/search vagrant init hirocom/centos7.2vagrant up 修改配置 config. ...
- 和重复搭建开发环境说 Bye Bye 之Vagrant
每每新同事入职,都要在自己电脑上配置一堆环境,费神费力:每每开发测试都要重新配置开发环境,手工搭建,步骤很繁琐,极易出错. 大神在时,大神搭建,大神不在,以手抚膺坐长叹.为此,VVVVVagrant横 ...
- vue.js2.0实战(1):搭建开发环境及构建项目
Vue.js学习系列: vue.js2.0实战(1):搭建开发环境及构建项目 https://my.oschina.net/brillantzhao/blog/1541638 vue.js2.0实战( ...
- GJM : Unity3D HIAR -【 快速入门 】 二、搭建开发环境
感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...
- maven实战(01)_搭建开发环境
一 下载maven 在maven官网上可下载maven:http://maven.apache.org/download.cgi 下载好后,解压.我的解压到了:D:\maven\apache-mave ...
- Android移动APP开发笔记——最新版Cordova 5.3.1(PhoneGap)搭建开发环境
引言 简单介绍一下Cordova的来历,Cordova的前身叫PhoneGap,自被Adobe收购后交由Apache管理,并将其核心功能开源改名为Cordova.它能让你使用HTML5轻松调用本地AP ...
- Win10 IoT C#开发 1 - Raspberry安装IoT系统及搭建开发环境
Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. The ...
- java攻城师之路(Android篇)--搭建开发环境、拨打电话、发送短信、布局例子
一.搭建开发环境 1.所需资源 JDK6以上 Eclipse3.6以上 SDK17, 2.3.3 ADT17 2.安装注意事项 不要使用中文路径 如果模拟器默认路径包含中文, 可以设置android_ ...
随机推荐
- golang 判断平台是32位还是64位
在strconv包中有个常量 const intSize = 32 << ( ^uint(0) >> 63 ) const IntSize = intSize ...
- RabbitMQie消息列队整理
使用方法过程,这儿只做了windows平台教程 先安装Erlang 编程软件,然后设置环境变量,在安装RabbimMQ ,这儿我下载了一个版本不行,后来换了最新版就好了,以后在使用过程 中如果有问题 ...
- 5.10学习总结——Activity的跳转和传值
使用sharedpreference是对信息的存储,也可以进行传值,今天通过查找资料,学习了Activity的跳转和传值方法. 跳转 1.显示跳转 4种方法 1 2 3 4 5 6 7 8 9 10 ...
- java web 项目中web.xml 详解
web.xml详述: web.xml 是每个Java web 项目的必备文件,又叫做部署描述符,Servlet规范中定义的,是web应用的配置文件. 概念: .部署描述符文件就像所有XML文件一样,必 ...
- nginx使用用户真实IP做hash(解决经过CND后ip_hash失效问题)
在nginx中常用的有以下四种负载均衡的算法,分别是:round-robin.ip-hash.least-connected和weighted.当然在实际生产中或许使用最多的就是ip-hash了,一般 ...
- disruptor笔记之二:Disruptor类分析
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- css超出隐藏显示省略号怎么设置?
当我们在进行网页前端开发的时候,一般获取文章标题,然后一行一行的显示.但是当标题过长的时候,就会造成换行显示.还有显示部分文本信息时,如果全部显示就过于繁琐,会带来不会的网页体验感.虽然我们可以使用o ...
- JUC多线程之ThreadPoolExecutor类任务执行流程
ThreadPoolExecutor类: ThreadPoolExecutor是我们最常用的一个线程池类,它实现了AbstractExecutorService接口.首先来看一下它的构造器及相关关键变 ...
- Serverless 是一种思想状态
来源 | Serverless 公众号:作者 | Ben Kehoe:译者 | donghui 函数不是重点 如果你因为喜欢 Lambda 而选择 Serverless,你这样做的原因是错误的.如果你 ...
- java设计模式_工厂模式
关于设计模式 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结,是一种设计思维,使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证 ...