[Alt](https://res.cloudinary.com/practicaldev/image/fetch/s--RYQ1u4td--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/i/p2jozxsosstu1w1ype7r.jpg)

什么和为什么

Vagrant 是一个开源工具,允许您通过易于使用的命令界面创建、配置和管理虚拟机的boxes。它是一种用于构建完整的开发环境的工具,重点是自动化和简单的工作流程。

它用于软件开发,以确保所有团队成员都使用相同的 configuration 进行构建。 Vagrant 不仅可以共享环境,还可以共享代码。这允许一个开发人员的代码在另一个开发人员的系统上工作,从而使协作和协作开发成为可能。使用 Vagrant,您可以通过一组可重用的配置文件 on-the-fly 创建虚拟机。开发人员可以跟踪环境配置更改并共享他们的环境,以便其他人可以启动相同的环境。

安装

  • 从以下位置下载最新版本的 Vagrant:

https://www.vagrantup.com/downloads.html

  • 下载最新版VirtualBox:

https://www.virtualbox.org/wiki/Downloads

安装并重新启动您的 PC。确认它们已正确设置:

Vagrant -v

进入全屏模式 退出全屏模式

示例

跑:

Vagrant init generic/alpine310

Vagrant up

进入全屏模式 退出全屏模式

流浪者

流浪箱

Vagrant 设置中的基本单元称为“box”或“Vagrantbox”。这是一个完整的、独立的操作系统环境映像。它是基本操作系统映像的克隆。使用克隆可加快启动和配置过程。

添加一个 VagrantBox:

您可以使用以下命令添加一个框:

vagrant box add ubuntu/trusty64

进入全屏模式 退出全屏模式

这会下载盒子并将其本地存储在您的机器中。

要查看所有操作系统框,请使用:

Vagrant box list

进入全屏模式 退出全屏模式

要使用盒子,您需要配置 Vagrantfile 并将其指向盒子。确保您位于所需的文件夹中。初始化流浪者:

Vagrant init trusty64

进入全屏模式 退出全屏模式

将在目录中创建一个“Vagrant”文件。使用以下命令打开它:

sudo nano vagrantfile

进入全屏模式 退出全屏模式

打开 Vagrantfile 后,找到“config.vm.box”字符串并将其更改为“ubuntu/trusty64”:

config.vm.box = "ubuntu/trusty64"

进入全屏模式 退出全屏模式

要移除 Vagrant Box:

vagrant box remove ubuntu/trusty64 

进入全屏模式 退出全屏模式

VagrantFile 解密

Vagrantfile 是 Vagrant 用来指定 VagrantBox 配置的文件。这是一个 Ruby 脚本,但不需要 Ruby 知识即可创建或理解它。请注意,VagrantFile 没有扩展名

Vagrantfile 的主要功能是描述项目所需的机器类型,以及如何配置和配置这些机器。之所以调用 Vagrantfiles,是因为该文件的实际文字文件名是 Vagrantfile。

这是一个示例 vagrantfile(您可以通过执行“Vagrant Init”来生成一个):


Vagrant.configure("2") do |config|

 config.vm.box = "trusty64"

 config.vm.box_check_update = false

 # **NETWORK SETTING**

 config.vm.network "forwarded_port", guest: 80, host: 8080

 config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

 config.vm.network "private_network", ip: "192.168.33.10"

 config.vm.network "public_network"

 # **SHARED FOLDER**

 config.vm.synced_folder "../data", "/vagrant_data"

 # **PROVIDER-SPECIFIC CONFIGURATION**

 config.vm.provider "virtualbox" do |vb|

 #  # Display the VirtualBox GUI when booting the machine

  vb.gui = true

 # Customize the amount of memory on the VM:

  vb.memory = "1024"

  end

 # **PROVISIONING**

 config.vm.provision "shell", inline: <<-SHELL

   apt-get update

   apt-get install -y apache2

  SHELL

end

进入全屏模式 退出全屏模式

  • “#”用于注释掉一行。这些可以取消注释以应用隐含设置。

  • 版本控制:配置版本是 Vagrant 能够保持向后兼容的机制。它由 **Vagrant.configure(“version_number”)** 指定

  • Box: 一个 Box 可以在 Vagrant 支持的任何平台上使用,以提供相同的工作环境。

  • 共享文件夹:Vagrant 自动将项目目录中的内容与来宾(虚拟)系统中的特殊目录同步

  • 网络:Vagrant 包括将虚拟机放置在网络上的选项。这使它更易于访问。您可以为访客系统创建转发端口,定义专用网络、公共网络和其他更高级的选项。

  • Provisioning:Vagrant 中的 Provisioner 允许您在机器上自动安装软件、更改配置等,作为 vagrant up 过程的一部分。一些受支持的 Provisioner 包括 Ansible 和 Shell 脚本。

流浪向上

对 VagrantFile 进行任何修改后,建议您将其保存并提交到版本控制系统。要应用所做的更改,请执行以下命令:

vagrant up

进入全屏模式 退出全屏模式

随后,要在配置的 VM 运行时应用任何其他更改,请使用以下命令:

vagrant reload

进入全屏模式 退出全屏模式

流浪者SSH

vagrant up 成功完成后,您可以使用 SSH 连接到创建的虚拟机,使用:

vagrant ssh

进入全屏模式 退出全屏模式

这将打开与新虚拟机的安全 shell 连接。您的命令提示符将更改为“vagrant@trusty64”,表示您已登录到虚拟机。

完成对虚拟机的探索后,您可以使用 CTRL-D 退出会话。虚拟机仍将在后台运行,但 SSH 连接将关闭。

Azure 上的流浪者

演示

首先访问www.portal.azure.com和 provision a VM

SSH 进入虚拟机

在其上安装 Vagrant:

wget https://releases.hashicorp.com/vagrant/2.2.10/vagrant_2.2.10_x86_64.deb

sudo dpkg -i vagrant_2.2.10_x86_64.deb

进入全屏模式 退出全屏模式

安装 Vagrant-azure 包:

vagrant plugin install vagrant-azure

进入全屏模式 退出全屏模式

添加 Azure Dummy Box:

vagrant box add azure-dummy https://github.com/azure/vagrant-azure/raw/v2.0/dummy.box --provider azure

进入全屏模式 退出全屏模式

使用以下命令安装 Azure-cli:

curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

进入全屏模式 退出全屏模式

使用以下命令登录您的 Azure 帐户:

az login

进入全屏模式 退出全屏模式

使用以下命令创建 Azure 服务主体:

az ad sp create-for-rbac

进入全屏模式 退出全屏模式

“az ad sp create-for-rbac”的输出应如下所示:

{

 "appId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",

 "displayName": "some-display-name",

 "name": "http://azure-cli-2017-04-03-15-30-52",

 "password": "XXXXXXXXXXXXXXXXXXXX",

 "tenant": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"

}

进入全屏模式 退出全屏模式

值租户、appId 和密码映射到 Vagrant 文件中的配置值 azure.tenant_idazure.client_idazure.client_secret 或环境变量。

创建一个 Vagrantfile 并添加此配置:

Vagrant.configure('2') do |config|

 config.vm.box = 'azure-dummy'

 # use local ssh key to connect to remote vagrant box

 config.ssh.private_key_path = File.join(File.dirname(__FILE__), 'azure_private_key.id_rsa')

 config.vm.provider :azure do |azure, override|

 # each of the below values will default to use the env vars named as below if not specified explicitly

 azure.tenant_id = ENV['AZURE_TENANT_ID']

 azure.client_id = ENV['AZURE_CLIENT_ID']

 azure.client_secret = ENV['AZURE_CLIENT_SECRET']

 azure.subscription_id = ENV['AZURE_SUBSCRIPTION_ID']

 end

####### Provisioner #######

 config.vm.provision "ansible" do |ansible|

 ansible.playbook = "playbook.yml"

 ansible.verbose = true

 end

end

进入全屏模式 退出全屏模式

由于我们指定 Ansible 作为我们的配置,我们需要将它安装在我们的主机上:

sudo apt update
sudo apt install software-properties-common
sudo apt-add-repository ppa:ansible/ansible
sudo apt install ansible

进入全屏模式 退出全屏模式

设置 ENV 变量:

export AZURE_CLIENT_ID=“***************************”
export AZURE_CLIENT_SECRET=“***********************”
export AZURE_TENANT_ID=“***************************”
export AZURE_SUBSCRIPTION_ID=“*********************”

进入全屏模式 退出全屏模式

生成 SSH 密钥:

ssh-keygen -t rsa  -f azure_private_key.id_rsa

进入全屏模式 退出全屏模式

创建一个我们将用于配置的“playbook.yml”:

---
    - name: install nginx on a Azure VM instance
      hosts: all
      become: yes
      become_method: sudo
      gather_facts: yes
      tasks:

        - name: install nginx            
          apt:
            name: nginx
            update_cache: yes
            state: present

        - name: stop nginx service
          service:
            name: nginx
            state: stopped
          register: nginx_down


        - name: delete the default html file
          file:
            path: /var/www/html/index.nginx-debian.html
            state: absent


        - name: copy new file from template folder
          template:
            src: ./index.html
            dest: /var/www/html/index.html
            owner: root
            group: root


        - name: restart nginx service
          service:
            name: nginx
            state: restarted

进入全屏模式 退出全屏模式

创建一个“模板”文件夹并添加一个 index.html 文件。_ 将其粘贴到里面:

<!DOCTYPE html>

<html>
    <head>
        <title>Welcome to DevOps - Powered by Telios</title>

        <style>
            body {
                width: 35em;

                margin: 0 auto;

                font-family: Tahoma, Verdana, Arial, sans-serif;
            }
        </style>
    </head>

    <body>
        <h1>Welcome to Vagrant</h1>

        <p>Powered By Telios</p>

        <p>If you see this page, Our page is hosted on Nginx server on our VM with Vagrant.</p>

        <br />
    </body>
</html>

进入全屏模式 退出全屏模式

返回到您使用的基本文件夹:

cd ..

进入全屏模式 退出全屏模式

现在运行:

vagrant up

进入全屏模式 退出全屏模式

该过程完成后,通过 ssh 进入配置的 VM:

vagrant ssh

进入全屏模式 退出全屏模式

访问 localhost 以检查我们的配置是否成功。我们可以使用 curl 但让我们使用 lynx 以获得更格式化的输出:

sudo apt install lynx -y
lynx localhost

进入全屏模式 退出全屏模式

如果我们得到自定义页面,那么这个过程就是成功的。

清理流浪者

在您的访客系统上完成工作后,您可以选择如何结束会话。

要停止机器并保存其当前状态运行:

vagrant suspend

进入全屏模式 退出全屏模式

您可以通过再次运行 vagrant up 来恢复。这很像将机器置于睡眠模式。

要关闭虚拟机,请使用以下命令:

vagrant halt

进入全屏模式 退出全屏模式

同样,vagrant up 将重新启动同一台虚拟机,您可以从上次中断的地方继续。这很像关闭一台普通机器。

要从您的系统类型中删除虚拟机的所有跟踪,请执行以下操作:

vagrant destroy

进入全屏模式 退出全屏模式

您保存在虚拟机中的所有内容都将被删除。这释放了 Vagrant 使用的系统资源。下次您流浪时,必须重新导入并重新配置机器。这很像在系统上格式化硬盘,然后重新加载新映像。

谢谢你的时间!

问题??

Logo

CI/CD社区为您提供最前沿的新闻资讯和知识内容

更多推荐