Vagrant

什么是Vagrant

Vagrant 是用于管理虚拟机生命周期的命令行实用程序。在一个一次性和一致的环境中隔离依赖项及其配置。

为什么要使用Vagrant

通过定义我们知道Vagrant主要是用于管理虚拟机的。当我们需要创建很多虚拟机的时候,使用Vagrant无疑是一个非常明智的选择。为什么说明智呢?因为我们只需要使用少数几个命令就可以快速地创建一个虚拟机,下文会讲到如何使用Vagrant创建虚拟机。

使用Vagrant创建虚拟机

安装虚拟机软件

在使用Vagrant之前,我们需要安装好虚拟机软件。Vagrant支持例如VirtualBox、VMware Fusion,、Hyper-V等虚拟机软件。由于VirtualBox是免费的,此处我们选用VirtualBox作为示例。(VirtualBox安装教程此处不赘述)

配置虚拟机存放位置

虚拟机创建后会占用较多的磁盘空间,在 Windows 系统下默认的虚机创建位置是在 C 盘,最好配置到其它地方。打开VirtualBox,然后按下快捷键Ctrl + g,在全局设定的对话框中将“默认虚拟电脑位置(M)”修改为指定路径。

image-20221231163213474

安装Vagrant

进入官网下载对应版本的安装包,点击安装,然后一直下一步完成安装即可。

验证安装

打开命令窗口,输入vagrant -h,显示版本信息表示安装成功。

配置Vagrant

通过 Vagrant 创建虚机需要先导入镜像文件,也就是 box,它们默认存储的位置在用户目录下的 .vagrant.d 目录下,对于 Windows 系统来说,就是 C:\Users\用户名\.vagrant.d

Vagrant的虚拟机都是根据镜像文件(及box文件)创建的,所以在创建虚拟机之前都会先导入镜像文件。对于 Windows 系统来说,镜像文件导入后默认是存储在 C:\Users\用户名\.vagrant.d。如果不想存储在这里,我们可以通过设置环境变量VAGRANT_HOME来指定存储路径。

image-20221231163902705

创建虚拟机

有两种方式可以创建虚拟机:

  • 在线导入虚拟机文件创建

    1. 建立一个文件夹用于保存本镜像的Vagrantfile(镜像的配置文件),后续针对本镜像的操作都需进入本路径下执行;
    2. 进入到目标路径后,执行vagrant init --box-version VERSION命令,用于创建Vagrantfile文件。可以从官方镜像站找到相应的box-version和VERSION(实测VERSION不写没关系,写错了也没关系)
    image-20221231180604418 image-20221231182923405
    1. 执行vagrant up命令启动虚拟机,由于是在线导入镜像,所以这个过程时间会稍微长点(与网络也有关系)
    image-20221231183112939
    1. 执行vagrant status命令验证运行状态,如果为running表示镜像导入成功,并成功运行虚拟机。
    image-20221231184621654
  • 导入下载好的镜像文件后创建

    1. 官方镜像站或者CentOS 镜像站或者Ubuntu镜像站以及清华大学镜像站等镜像站下载自己所需的镜像文件;
    2. 创建好Vagrantfile文件存放路径,并进入,然后执行vagrant box add {file} --name {boxname} 来导入镜像;
    image-20221231190527344
    1. 执行vagrant box list命令验证镜像是否创建成功
    image-20221231190638145
    1. 执行vagrant init {boxname}创建虚拟机
    image-20221231191003163
    1. 执行vagrant up命令启动虚拟机
    image-20221231191150134

连接虚拟机

  • 使用vagrant ssh连接

默认采用的是【网络地址转换(NAT)】(设置了端口映射,比如说将宿主机的2200端口映射到虚拟机的22端口)的方式连接虚拟机,这种方式虚拟机可以实现外网访问,但是宿主机必须通过端口转发形式访问,虚拟机之间的通信也必须经由宿主机的端口转发。这里提供两种方式优化:第一种,网络连接设置为【桥接网卡】。这种方式的好处是将虚拟机当做一台实体机,可以方便访问外网以及虚拟机之间通信;不好的地方是虚拟机直接暴露在外网中,有一定风险;第二种,双网卡设置,第一张网卡设置为【网络地址转换(NAT)】连接方式不变,保证可以访问外网,第二张网卡设置为【仅主机(Host-Only)网络】,确保主机可以顺利访问到虚拟机,虚拟机之间也可以正常访问。不管是那种方式,均可以通过修改Vagranfile配置实现。

# 设置【桥接网卡】
# config.vm.network "public_network"  找到这一行,将注释打开

# 设置【仅主机(Host-Only)网络】
# config.vm.network "private_network", ip: "192.168.33.88"  找到这一行,将注释打开,注意多个虚拟机之间的IP不要冲突了
#  config.vm.network "private_network", type: "dhcp"  这种方式是设置为动态IP,但是不建议,实测这种方式VirtualBox不能有别的开启了DHCP的Host-Only网卡,否则会冲突(见下图);即便将别的Host-Only网卡都删除了,自动分配的IP也是冲突的(见下图db01和db02的IP)。
image-20230102164702421

image-20230102165034614

image-20230102165102675

其他命令

# 暂停
vagrant suspend [name|id]

# 还原
vagrant resume [name|id]

# 关机
vagrant halt

# 删除虚拟机
vagrant destroy

ps:其他命令可参见官网参考手册

创建Vagrant镜像文件

vagrant镜像文件是基于已有的虚拟机创建的,所以我们要先准备一个能够正常运行的虚拟机,并进行一些必要或者建议操作。

# 安装必要的软件(建议)
apt install -y lsof net-tools wget curl axel systemd xfsprogs util-linux ssh openssh-server samba vsftpd openntpd ntpdate

# 配置ssh(建议)
systemctl enable --now ssh.service
# 优化ssh连接速度(建议)
sed -i 's/#UseDNS no/UseDNS no/g' /etc/ssh/sshd_config
sed -i 's/#GSSAPIAuthentication no/GSSAPIAuthentication no/g' /etc/ssh/sshd_config
sudo systemctl restart sshd

# 设置时区与时间同步(建议)
systemctl enable --now openntpd.service
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ntpdate ntp6.aliyun.com

# 创建vagrant用户(必须)
useradd -s /bin/bash -m vagrant
passwd vagrant
# 配置免密sudo
echo 'vagrant ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers.d/vagrant

# 添加 vagrant’s public key(必须)
sudo su - vagrant
mkdir -m 0700 -p /home/vagrant/.ssh
curl https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub > /home/vagrant/.ssh/authorized_keys
chmod 0600 /home/vagrant/.ssh/authorized_keys

# 优化histoty展示效果(建议)
echo "export HISTFILESIZE=500000000" >> /etc/profile
echo "export HISTSIZE=1000000" >> /etc/profile
echo "export PROMPT COMMAND="history -a"" >> /etc/profile
echo "export HISTTIMEFORMAT=\"%Y-%m-%d %H:%M:%S  `whoami`  \"" >> /etc/profile

# 清理(建议)
apt-get autoclean    #清理旧版本的软件缓存
apt-get clean        #清理所有软件缓存
apt-get autoremove   #删除系统不再使用的孤立软件
rm -rf /var/cache/apt/archives/*
rm -rf /tmp/*
rm -f /var/log/wtmp /var/log/btmp
history -c

配置完成后,关闭虚拟机,然后执行打包命令即可完成打包

# vagrant package --output [boxName] --base [虚拟机名称]
# 生产的虚拟机会在当前执行命令的路径下
vagrant package --output ubuntu-base.box --base ubuntu-base
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值