跳至主要內容

虚拟机的创建

LincZero大约 2 分钟

虚拟机的创建

创建虚拟机

创建虚拟机方式

比如我们要创建ubuntu 22.04的虚拟机,参考官网资料: https://app.vagrantup.com/ubuntu/boxes/jammy64

方式一:Vagrantfile

# 1. 创建Vagrantfile文件,并填充内容
vi Vagrantfile
# 然后填入Vagrantfile内容
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/jammy64"
end

# 2. 使用Vagrant up命令启动
vagrant up

方式二:指定镜像

# 1. 便捷地创建预设Vagrantfile文件
vagrant init ubuntu/jammy64 

# 2. 使用Vagrant up命令启动
vagrant up

当我们运行 vagrant init 命令时,会在当前目录生成 Vagrantfile 配置文件,默认的配置文件如下:

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/jammy64"
end

创建过程

创建和启动虚拟机主要有下面四个步骤:

配置网络

这里使用NAT模式

转发SSH端口

这里将虚拟机的22端口转发到主机的2222端口

配置ssh用户和密钥对

设置用户名vagrant,和秘钥

挂载共享目录

将虚拟机的 /vagrant 目录挂载到主机的 /Users/qiu/vagrant 目录

连接虚拟机

vagrant ssh

# 语法糖,等同于:
# ssh vagrant@localhost -p 2222

一些默认配置

配置网络

vagrant总是会将虚拟机的第一个网卡设置为NAT (默认值)

配置SSH

转发SSH端口

NAT无法从主机访问虚拟机,为什么可以使用vagrant ssh连接到虚拟机呢?

这是因为vagrant将虚拟机的ssh端口22转发到宿主机2222端口。如果有多个虚拟机,每个虚拟机会转发到不同的端口。

通过vagrant ssh连接到虚拟机跟使用下列命令是一样的。

ssh vagrant@localhost -p 2222

配置SSH用户

vagrant默认为每个虚拟机创建一个 vagrant 用户,密码为 vagrant

这个用户拥有 sudo 权限,默认情况下不启动 root 用户。

配置SSH密钥对

vagrant ssh命令不需要输入密码,通过密钥对免密登录虚拟机。

所有的虚拟机Box打包的时候都使用同一个公开的密钥对。这样子显然是不安全的。

内置的密钥对仅用于第一次创建虚拟机的时候,vagrant会通过这个密钥对登录进虚拟机。然后生成一个新的密钥对,并替换公开的密钥对。

更新Guest Additions

如果要去掉guest additions版本不匹配的提示信息,可以手动更新。

vagrant plugin install vagrant-vbguest

Vagrant 常用命令

vagrant init ubuntu/jammy64 # 创建Vagrantfile
vagrant up        # 根据Vagrantfile创建box镜像
vagrant reload    # 重新配置虚拟机
vagrant halt      # 关闭虚拟机
vagrant destroy   # 删除虚拟机
vagrant suspend   # 休眠
vagrant resume    # 唤醒

vagrant -v        # --version
vagrant -h        # --help

vagrant box list