Deepin 安装 Vagrant

最近服务器老是宕机,学习的时候很多环境有需要集群,忍无可忍的情况下终于决定自己装一波虚拟机宫学习使用。本人系统为Deepin,这里记录一下Deepin安装Vagrant的过程及步骤.

Reference One: https://mritd.me/2017/03/01/how-to-use-vagrant/
Reference Two: https://tutorialforlinux.com/2017/10/11/how-to-install-vagrant-deepin-linux-easy-guide/

Vagrant 是一个开源的 基于 ruby 的开源虚拟机管理工具;
它能够以脚本化的方式启动、停止、和和删除虚拟机,当然这些手动也没费劲;更重要的是它能够自己定义网络分配、初始化执行的脚本、添加硬盘等各种复杂的动作;最重要的是 Vagrant 提供了类似于 docker image 的 box;Vagrant Box 就是一个完整的虚拟机分发包,可以自己制作也可以从网络下载;并且 Vagrant 开源特性使得各路大神开发了很多 Vagrant 插件方便我们使用,基于以上这些特点,我们可以实现:

  • 一个脚本定义好虚拟机的数量
  • 一个脚本定义好虚拟机初始化工作,比如装 docker
  • 一个脚本完成多台虚拟机网络配置
  • 一条命令启动、停止、删除多个虚拟机
How to Install Vagrant Deepin Linux - Featured

二、Vagrant 使用

2.1、Vagrant 安装

Vagrant 安装极其简单,目前官方已经打包好了各个平台的安装包文件,地址访问 Vagrant 官方下载地址

这里以Deepin为例:
1.打开终端Ctr+Alt+t
2.Download Latest Vagrant for Debian Linux下载最新版本Vagrant
Here Get Latest Vagrant .deb 32/64bit
3.检查是否含有GDebi Package.

which gdebi

如果没有这个软件可以使用sudo apt install gdebi安装
4.打开下载目录

cd ~/Downloads
ls

5.执行安装

sudo gdebi ./vagrant*.deb

6.最后测试安装是否成功

vagrant -h 

But in case of Vagrant Help Ruby Gems Issue Fix with:
sudo vagrant plugin ``install vagrant-share \``--plugin-version 1.1.8
7.至于Oracle VirtualBox安装,可以点击这里
8.至于Vagrant怎么使用和管理,可以点击这里.

2.2、Vagrant Box 下载

装虚拟机大家都不陌生,首先应该搞个系统镜像;同样 Vagrant 也需要先搞一个 Vagrant Box,Vagrant Box 是一个已经预装好操作系统的虚拟机打包文件;根据不同系统可以选择不同的 Vagrant Box,官方维护了一个 Vagrant Box 仓库,地址 点这里

vagrant boxes
vagrant boxes

点击对应的系统后可以看到如下界面


box detail
box detail

该页面罗列出了使用不同虚拟机时应当使用扥添加明令;当然执行这些命令后 vagrant 将会从网络下载这个 box 文件并添加到本地 box 仓库;不过众所周知的原因,这个下载速度会让你怀疑人生,所有简单的办法是执行以下这条命令,然后会显示 box 的实际下载地址;拿到地址以后用迅雷下载先把文件下载下来,然后使用 vagrant 导入也可以(centos7 本地已经有了一下以 ubuntu 为例)

box download url
box download url

下载后使用 vagrant box add xxxx.box 即可将 box 导入到本地仓库

2.3、启动一个虚拟机

万事俱备只差东风,在上一步执行 vagrant init ubuntu/trusty64; vagrant up --provider virtualbox 命令获取 box 下载地址时,已经在当前目录下生成了一个 Vagrantfile 文件,这个文件其实就是虚拟机配置文件,具体下面再说;box 导入以后先启动一下再说,执行 vagrnat up 即可

其他几个常用命令如下

  • vagrant box [list|add|remove] 查看添加删除 box 等
  • vagrant up 启动虚拟机
  • vagrant halt 关闭虚拟机
  • vagrant init 初始化一个指定系统的 Vagrantfile 文件
  • vagrant destroy 删除虚拟机
  • vagrant ssh ssh 到虚拟机里
    特别说明一下 ssh 这个命令,一般默认的规范是 vagrant ssh VM_NAME 后,会以 vagrant 用户身份登录到目标虚拟机,如果当前目录的 Vagrantfile 中只有一个虚拟机那么无需指定虚拟机名称(init 后默认就是);虚拟机内(box 封装时)vagrant这个用户拥有全局免密码 sudo 权限;root 用户一般密码为 vagrant

三、Vagrantfile

直接贴 Vagrantfile,以下配置在进行 vagrant up 之前可能需要使用 vagrant plugin install vagrant-host 插件,以支持自动在各节点之间添加 host



Vagrant.configure("2") do |config|
# 定义虚拟机数量
vms = Array(1..5)
# 数据盘存放目录
$data_base_dir = "/data/vm/disk"
vms.each do |i|
config.vm.define "docker#{i}" do |docker|
# 设置虚拟机的Box
docker.vm.box = "centos/7"
# 不检查 box 更新
docker.vm.box_check_update = false
# 设置虚拟机的主机名
docker.vm.hostname="docker#{i}.node"
# 设置虚拟机的IP (wlp2s0 为桥接本机的网卡)
docker.vm.network "public_network", ip: "192.168.1.1#{i}", bridge: "wlp2s0"
# 设置主机与虚拟机的共享目录
#docker.vm.synced_folder "~/Desktop/share", "/home/vagrant/share"
# VirtaulBox相关配置
docker.vm.provider "virtualbox" do |v|
# 设置虚拟机的名称
v.name = "docker#{i}"
# 设置虚拟机的内存大小
v.memory = 1536
# 设置虚拟机的CPU个数
v.cpus = 1
# 增加磁盘
docker_disk = "#$data_base_dir/docker-disk#{i}.vdi"
data_disk = "#$data_base_dir/data-disk#{i}.vdi"
# 判断虚拟机启动后
if ARGV[0] == "up"
# 如果两个文件都不存在 则创建 SATA 控制器(这里调用的是 Virtual Box 的命令)
if ! File.exist?(docker_disk) && ! File.exist?(data_disk)
v.customize [
'storagectl', :id,
'--name', 'SATA Controller',
'--add', 'sata',
'--portcount', '5',
'--controller', 'IntelAhci',
'--bootable', 'on'
]
end
# 创建磁盘文件
if ! File.exist?(docker_disk)
v.customize [
'createhd',
'--filename', docker_disk,
'--format', 'VDI',
'--size', 10 * 1024 # 10 GB
]
end
if ! File.exist?(data_disk)
v.customize [
'createhd',
'--filename', data_disk,
'--format', 'VDI',
'--size', 10 * 1024 # 10 GB
]
end
# 连接到 SATA 控制器
v.customize [
'storageattach', :id,
'--storagectl', 'SATA Controller',
'--port', 1, '--device', 0,
'--type', 'hdd', '--medium',
docker_disk
]
v.customize [
'storageattach', :id,
'--storagectl', 'SATA Controller',
'--port', 2, '--device', 0,
'--type', 'hdd', '--medium',
data_disk
]
end
end
# 增加各节点 host 配置
config.vm.provision :hosts do |provisioner|
vms.each do |x|
provisioner.add_host "192.168.1.1#{x}", ["docker#{x}.node"]
end
end
# 自定义执行脚本
docker.vm.provision "shell", path: "init.sh"
# 每次开机后重启 network 和 ssh,解决公网网卡不启动问题
docker.vm.provision "shell", run: "always", inline: <<-SHELL
systemctl restart network
systemctl restart sshd
echo -e "\033[32mvirtual machine docker#{i} init success!\033[0m"
SHELL
end
end
end


以上基本都加了注释,所以大致应该很清晰,至于第一行那个 `Vagrant.configure("2")` 代表调用第二版 API,不能改动,其他的可参考注释同时综合仓库中的其他配置文件即可

**Vagrantfile 实质上就是一个 ruby 文件,可以自己在里面定义变量等,可以在里面按照 ruby 的语法进行各种复杂的操作;具体 ruby 语法可以参考相关文档学习一下**
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 1,介绍Vagrant 我们做web开发的时候经常要安装各种本地测试环境,比如apache,php,mysql,r...
    meng_philip123阅读 2,503评论 0 12
  • Vagrant是什么 Vagrant是一个软件,可以自动化虚拟机的安装和配置流程。目前市面上个人PC的主流操作系统...
    北魏企鹅阅读 29,930评论 3 40
  • 什么是Vagrant简单来说,Vagrant 就是一个虚拟机的集成管理器。 我们用它可以快速创建虚拟机,可以快速部...
    嗝喯唲阅读 641评论 0 0
  • 开发需要在各种系统上进行开发任务,运维则需要在各种系统上学习工具使用。因此,虚拟机恐怕也是 IT 人员最常使用的工...
    李广慧阅读 5,515评论 3 24
  • 深夜食堂——这世界唯有美食和美景不可辜负 深夜食堂的男主角是小林薰,有着日式中年男人的内敛、干净和包容。日本人做事...
    Emily姐姐阅读 1,689评论 0 1