Vagrant是一个用于创建和配置虚拟开发环境的工具,它使用 Vagrantfile(一种配置文件)来描述虚拟机的配置,并使用 VirtualBox、VMware、Hyper-V 等虚拟机软件来运行虚拟机。

Vagrant 使得开发者可以在本地机器上快速搭建一个与生产环境相似的开发环境。

vagrant

vagrant特点

Vagrant 是一个非常流行的虚拟开发环境工具,它具有以下一些主要特点:

  1. 跨平台:Vagrant 可以在 Windows、Linux 和 macOS 等多种操作系统上运行。
  2. 易于使用:Vagrant 通过 Vagrantfile 配置文件来定义虚拟机的配置,使得环境设置变得简单和一致。
  3. 版本控制:Vagrantfile 可以被放入版本控制系统中,这样团队成员可以共享相同的开发环境配置。
  4. 可移植性:Vagrant 使得开发环境可以在不同的机器和不同的操作系统之间轻松迁移。
  5. 自动化:Vagrant 可以自动配置虚拟机,包括安装所需的软件、设置网络等。
  6. 多虚拟机支持:Vagrant 支持在一个主机上运行多个虚拟机。
  7. 集成开发环境:Vagrant 可以与多种开发工具和IDE集成,提高开发效率。
  8. 社区支持:Vagrant 拥有一个活跃的社区,提供了大量的插件和工具来扩展其功能。
  9. 与虚拟机管理器集成:Vagrant 可以与 VirtualBox、VMware、Hyper-V 等虚拟机管理器无缝集成。
  10. 资源效率:Vagrant 虚拟机可以配置为只使用必要的资源,以确保不会过度消耗主机的资源。
  11. 可定制性:用户可以根据自己的需求定制 Vagrantfile,实现高度定制化的虚拟环境。
  12. 安全性:Vagrant 虚拟机可以被配置为完全隔离的,确保开发环境的安全性。

1.virtualbox

2.vagrant

3.vagrant box

packages a running vagrant environment into a box “box” 是指一个预配置的虚拟机镜像

#centos

#ubuntu

#mirror


Ubuntu 20.04.6 LTS (Focal Fossa)
https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cloud-images/focal/current/focal-server-cloudimg-amd64-vagrant.box

#离线添加box
vagrant box add ubuntu-20.04.6-lts ./focal-server-cloudimg-amd64-vagrant.box

mvpbang@mvpbang Downloads % vagrant box add ubuntu-20.04.6-lts ./focal-server-cloudimg-amd64-vagrant.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'ubuntu-20.04.6-lts' (v0) for provider: 
    box: Unpacking necessary files from: file:///Users/mvpbang/Downloads/focal-server-cloudimg-amd64-vagrant.box
==> box: Successfully added box 'ubuntu-20.04.6-lts' (v0) for ''!

#查看添加的box
vagrant box list

mvpbang@mvpbang Downloads % vagrant box list
centos7            (virtualbox, 0)
centos8            (virtualbox, 0)
centos9            (virtualbox, 0)
ubuntu-20.04.6-lts (virtualbox, 0)
ubuntu-22.04.4-lts (virtualbox, 0)

4.vagrant init

4.1创建目录(保存Vagrantfile文件及其他脚本什么的)
mkdir ubuntu-test && cd ubuntu-test

#初始化虚拟机,指定初始化使用的box,此时生成Vagrantfile文件,仅定义了box参数
vagrant init ubuntu-22.04.4-lts 

mvpbang@mvpbang ubuntu-test % egrep -v "(^.*#|^$)" Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu-22.04.4-lts"
end

4.2启动虚拟机
vagrant up

mvpbang@mvpbang ubuntu-test % vagrant up 
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu-22.04.4-lts'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: ubuntu-test_default_1718631507026_82997
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat  //默认创建nat网络及分配IP
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)  //设置端口转发
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: 
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default: 
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default: 
    default: Guest Additions Version: 6.0.0 r127566
    default: VirtualBox Version: 7.0
==> default: Mounting shared folders...
    default: /vagrant => /private/tmp/ubuntu-test

#查看虚拟机运行状态
vagrant status

mvpbang@mvpbang ubuntu-test % vagrant status
Current machine states:
default                   running (virtualbox)

5.vagrant ssh

5.1ssh登录虚拟机
$ vagrant ssh

5.2查看系统信息
vagrant@ubuntu-jammy:~$ cat /etc/os-release 
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
vagrant@ubuntu-jammy:~$ uname -srm
Linux 5.15.0-101-generic x86_64

5.3查看IP及测试网络
查看虚拟机IP,该IP为NAT网络,可以访问互联网,但宿主机无法与该IP通信,需要配置端口映射
vagrant@ubuntu-jammy:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 02:ca:9a:95:c0:71 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 metric 100 brd 10.0.2.255 scope global dynamic enp0s3
       valid_lft 84768sec preferred_lft 84768sec
    inet6 fe80::ca:9aff:fe95:c071/64 scope link 
       valid_lft forever preferred_lft forever
vagrant@ubuntu-jammy:~$ 
vagrant@ubuntu-jammy:~$ ping 115.com
PING 115.com (47.113.24.196) 56(84) bytes of data.
64 bytes from 47.113.24.196 (47.113.24.196): icmp_seq=1 ttl=63 time=33.9 ms
64 bytes from 47.113.24.196 (47.113.24.196): icmp_seq=2 ttl=63 time=33.6 ms

5.4关机
mvpbang@mvpbang ubuntu-test % vagrant halt
==> default: Attempting graceful shutdown of VM...

mvpbang@mvpbang ubuntu-test % vagrant status
Current machine states:
default                   poweroff (virtualbox)
The VM is powered off. To restart the VM, simply run `vagrant up`