Vagrant詳細教程

来源:https://www.cnblogs.com/Se7eN-HOU/archive/2022/04/21/16171456.html
-Advertisement-
Play Games

一、安裝virtualBox 進入 VirtualBox 的主頁,即可進入下載頁面. VirtualBox 是一個跨平臺的虛擬化工具,支持多個操作系統,根據自己的情況選擇對應的版本下載即可。 在安裝完主程式後,直接雙擊擴展包文件即可安裝擴展包。 二、安裝Vagrant 在 Vagant 網站下載最新 ...


一、安裝virtualBox

  進入 VirtualBox 的主頁,即可進入下載頁面.

  

  VirtualBox 是一個跨平臺的虛擬化工具,支持多個操作系統,根據自己的情況選擇對應的版本下載即可。

 

   

 

  在安裝完主程式後,直接雙擊擴展包文件即可安裝擴展包。

 

 二、安裝Vagrant

 

  在 Vagant 網站下載最新的版本,根據自己的操作系統選擇對應的版本下載即可。

  

 

 

 

  註意,Vagrant 是沒有圖形界面的,所以安裝完成後也沒有桌面快捷方式。具體使用方法,接下來會詳細說明。

  Vagrant 的安裝程式會自動把安裝路徑加入到 PATH 環境變數,所以,這時候可以通過命令行執行 vagrant version 檢查是否安裝成功:

  

 

三、下載虛擬機鏡像

 

  使用 Vagrant 創建虛機時,需要指定一個鏡像,也就是 box。開始這個 box 不存在,所以 Vagrant 會先從網上下載,然後緩存在本地目錄中。

  Vagrant 有一個鏡像網站,裡面列出了都有哪些鏡像可以用,並且提供了操作文檔。

  

 

  但是這裡預設下載往往會比較慢,所以下麵我會介紹如何在其它地方下載到基礎鏡像,然後按照自己的需要重置。如果網速較好,下載順利的朋友可以選擇性地跳過部分內容。

  下麵我給出最常用的兩個 Linux 操作系統鏡像的下載地址:

  CentOS

    CentOS 的鏡像下載網站是: 

    在其中選擇自己想要下載的版本,列表中有一個 vagrant 目錄,裡面是專門為 vagrant 構建的鏡像。選擇其中的 .box 尾碼的文件下載即可。這裡可以使用下載工具,以較快的速度下載下來。

  Ubuntu

    Ubuntu 的鏡像下載網站是: 

    同樣先選擇想要的版本,然後選擇針對 vagrant 的 .box 文件即可。

    如果這裡官網的速度較慢,還可以從 清華大學的鏡像站 下載。

   

四、添加box

 

  接下來我們需要將下載後的 .box 文件添加到 vagrant 中。

  Vagrant 沒有 GUI,只能從命令行訪問,先啟動一個命令行,然後執行:

  指令1:vagrant box list  查詢vagrant 已經管理的 Box 有哪些

houlei@houleideMacBook-Pro ubuntu % vagrant box list          
There are no installed boxes! Use `vagrant box add` to add some.

  指令2:vagrant box add 將 box 添加到vagrant 中, 命令後面跟著的是box文件路徑,並且通過 --name ubuntu 為這個 box 指定一個名字。

houlei@houleideMacBook-Pro ubuntu % vagrant box add /Users/houlei/Desktop/vagrant/box/xenial-server-cloudimg-amd64-vagrant.box --name ubuntu 
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'ubuntu' (v0) for provider: 
    box: Unpacking necessary files from: file:///Users/houlei/Desktop/vagrant/box/xenial-server-cloudimg-amd64-vagrant.box
==> box: Successfully added box 'ubuntu' (v0) for 'virtualbox'!   # 安裝成功
houlei@houleideMacBook-Pro ubuntu % vagrant box list                                                                                        
ubuntu (virtualbox, 0)     # 剛安裝成功的box,在安裝的時候,我去的名字叫ubuntu
houlei@houleideMacBook-Pro ubuntu % 

   指令3:vagrant box remove NAME 根據名字刪除指定的box

 

五、Vagrant基本操作

 

  1、新建虛擬機

    我們在創建虛擬機的時候,會生產一些文件,所以我們為每個虛擬機最好都創建一個獨立的文件。然後進入文件中

/Users/houlei/Desktop/vagrant/ubuntu
houlei@houleideMacBook-Pro ubuntu % 

    我在桌面上創建了一個vagrant文件夾,在裡面有創建了ubuntu文件夾,專門用來存放創建的而這個虛擬機的東西

    新建虛擬機指令:vagrant init [boxname]  加上boxname 表示使用哪個box 創建虛擬機

houlei@houleideMacBook-Pro ubuntu % vagrant init ubuntu
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
houlei@houleideMacBook-Pro ubuntu % 

    創建成功後,會在文件夾中多一個“Vagrantfile”的文件。

  2、啟動虛擬機

    註意: 在當前這個小例子中,上面所有的 vagrant 命令都需要在 Vagrantfile 所在的目錄下執行。

    啟動虛擬機的指令:vagrant up

    

    只要是沒有報錯,就說明啟動成功了

  3、查看虛擬機的狀態 

    指令:vagrant status

    

 

 

     如果是running 就說明我們的虛擬機,啟動成功了。

  4、鏈接虛擬機

    如果啟動沒問題,接下來執行 vagrant ssh 就能以 vagrant 用戶直接登入虛機中。

    root 用戶沒有預設密碼,也不能直接登錄。需要 root 許可權的命令可以通過在命令前添加 sudo 來執行,也可以執行 sudo -i 直接切換到 root 用戶。

    這時候打開 VirtualBox 程式,可以看到自動創建的虛機:

    

 

    我們也可以在 VirtualBox 的終端上登錄系統,預設的登錄用戶名和密碼都是 vagrant,但是個人覺得不是很方便。

    更推薦大家使用 vagrant ssh

    

 

 

 

  5、停止虛擬機:

    指令:vagrant halt

    

 

 

 

  6、 暫停虛擬機

    指令:vagrant suspend

  7、恢復虛擬機

    指令:vagrant resume

    註意: 不管虛機是關閉還是暫停狀態,甚至是 error 狀態,都可以執行 vagrant up 來讓虛機恢復運行。

  8、刪除虛擬機

    指令:vagrant destroy

 

 六、Vagrantfile源文件

    

# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
  # The most common configuration options are documented and commented below.
  # For a complete reference, please see the online documentation at
  # https://docs.vagrantup.com.

  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://vagrantcloud.com/search.
  config.vm.box = "ubuntu"

  # Disable automatic box update checking. If you disable this, then
  # boxes will only be checked for updates when the user runs
  # `vagrant box outdated`. This is not recommended.
  # config.vm.box_check_update = false

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine. In the example below,
  # accessing "localhost:8080" will access port 80 on the guest machine.
  # NOTE: This will enable public access to the opened port
  # config.vm.network "forwarded_port", guest: 80, host: 8080

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine and only allow access
  # via 127.0.0.1 to disable public access
  # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  # config.vm.network "private_network", ip: "192.168.33.10"

  # Create a public network, which generally matched to bridged network.
  # Bridged networks make the machine appear as another physical device on
  # your network.
  # config.vm.network "public_network"

  # Share an additional folder to the guest VM. The first argument is
  # the path on the host to the actual folder. The second argument is
  # the path on the guest to mount the folder. And the optional third
  # argument is a set of non-required options.
  # config.vm.synced_folder "../data", "/vagrant_data"

  # Provider-specific configuration so you can fine-tune various
  # backing providers for Vagrant. These expose provider-specific options.
  # Example for VirtualBox:
  #
  # 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
  #
  # View the documentation for the provider you are using for more
  # information on available options.

  # Enable provisioning with a shell script. Additional provisioners such as
  # Ansible, Chef, Docker, Puppet and Salt are also available. Please see the
  # documentation for more information about their specific syntax and use.
  # config.vm.provision "shell", inline: <<-SHELL
  #   apt-get update
  #   apt-get install -y apache2
  # SHELL
end

  這是一個 Ruby 語法的文件,因為 Vagrant 就是用 Ruby 編寫的。如果編輯器沒有語法高亮可以手動設置文件類型為 Ruby。

  這個預設文件內容幾乎都是註釋,提示有哪些配置項可以修改,我們不需要去學 Ruby 編程也可以照葫蘆畫瓢的完成基本的配置。

  刨除註釋,這個文件的實際生效內容只有3行

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

  這裡的 config.vm.box 對應的就是虛機的鏡像,也就是 box 文件,這是唯一必填的配置項。

  特別提醒,Vagrantfile 文件名是固定的寫法,大小寫也要完全一樣,修改了就不認識了

 

 七、自定義配置Vagrantfile

 

  下麵我將針對這份預設的 Vagrantfile 內容,逐個講解其中的配置含義和如何根據實際情況修改。

  1、配置埠轉發

    埠轉發(Port forward)又叫埠映射,就是把虛機的某個埠,映射到宿主機的埠上。這樣就能在宿主機上訪問到虛擬機中的服務。

  例如啟動虛機時,預設的 22 (guest) => 2222 (host) (adapter 1) 就是把虛機的 SSH 服務埠(22)映射到宿主機的 2222 埠,這樣直接在宿主機通過 ssh 客戶端訪問 127.0.0.1:2222 埠就等價於訪問虛擬機的 22 埠。

  下麵這兩段配置就是教我們如何配置額外的埠轉發規則,例如把 Web 服務也映射出來:

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine. In the example below,
  # accessing "localhost:8080" will access port 80 on the guest machine.
  # NOTE: This will enable public access to the opened port
  # config.vm.network "forwarded_port", guest: 80, host: 8080

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine and only allow access
  # via 127.0.0.1 to disable public access
  # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

  實際上設置埠轉發這個功能並不實用,一個很明顯的問題就是如果啟動多個虛機,很容易就出現宿主機上埠衝突的問題。即使沒有埠衝突,使用起來也不方便,我個人不推薦使用的,可以把這部分配置直接刪掉。直接使用下麵的私有網路。

  這個功能是虛擬機軟體提供的,可以在虛機的網卡設置中展開高級選項,找到相關的配置:

  

 

  還有個地方需要註意,預設的 SSH 埠映射在這裡沒法直接修改。比如像我這樣,2222 埠出現莫名問題,如果想要把 22 埠轉發到其它埠如 22222,直接添加下麵這樣的配置是沒用的:

   config.vm.network "forwarded_port", guest: 22, host: 22222  它會在原來的基礎上新加一個埠轉發規則,而不是替代原來的,必須要先強制關閉掉預設的那條規則:
  config.vm.network "forwarded_port", guest: 22, host: 2222, id: "ssh", disabled: "true"
  config.vm.network "forwarded_port", guest: 22, host: 22222

  2、配置私有網路

    下麵這段配置用來配置私有網路,實際上對應的是 VirtualBox 的主機網路,也就是 HostOnly 網路。

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  # config.vm.network "private_network", ip: "192.168.33.10"

  取消註釋最下麵一行,就可以為虛機設置指定的私有網路地址:

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

  如果這個網段的主機網路在 VirtualBox 中不存在,Vagrant 會在啟動虛機時自動創建。所以,如果你想要利用已有的網路,請查看現有主機網路配置:

  

  

 

  最好這個網路也不要啟用 DHCP,完全由自己來分配地址,這樣更加清楚。

  

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

 

  修改完成後,執行 vagrant reload 命令重建虛機,就能看到多出來的網卡了。

  私有網路實際也可以直接使用 DHCP,但是並不推薦:

  

config.vm.network "private_network", type: "dhcp"

  

  3、配置同步文件夾

houlei@houleideMacBook-Pro ubuntu % vagrant reload    
==> default: Attempting graceful shutdown of VM...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> 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: Warning: Connection reset. Retrying...
==> 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: 5.1.38
    default: VirtualBox Version: 6.1
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /vagrant => /Users/houlei/Desktop/vagrant/ubuntu # /vagrant 對應的事虛擬機上的路徑, =>對應的是本機上的路徑。
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.

 

    

 


侯哥語錄:我曾經是一個職業教育者,現在是一個自由開發者。我希望我的分享可以和更多人一起進步。分享一段我喜歡的話給大家:"我所理解的自由不是想乾什麼就乾什麼,而是想不幹什麼就不幹什麼。當你還沒有能力說不得時候,就努力讓自己變得強大,擁有說不得權利。"
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在說神經網路之前,我們討論一下神經元(Neurons),它是神經網路的基本單元。神經元先獲得輸入,然後執行某些數學運算 後,再產生一個輸出。比如一個2輸入神經元的例子: 在這個神經元里,輸入總共經歷了3步數學運算,先將輸入乘以權重(weight): 最後經過激活函數(activation funct ...
  • 在今年3月下旬的時候,Java版本已經更新到了18。接下來DD計劃持續做一個系列,主要更新從Java 9開始的各種更新內容,但我不全部都介紹,主要挑一些有意思的內容,以文章和視頻的方式來給大家介紹和學習。為了第一時間獲得內容更新,對文章形式感興趣的小伙伴可以關註我的博客或者公眾號(程式猿DD),對視 ...
  • Docker 安裝教程 https://www.studenty.cn/?p=1111 Jenkins 安裝教程 https://www.studenty.cn/?p=1404 新建一個ASP.NET Core API應用程式(需要勾選Docker支持): 在GitHub新建一個項目並上傳代碼 建立 ...
  • 1. 前言 上面我們已經做到了介面以及場景壓測,通過控制台輸出結果,我們只需要將結果收集整理下來,最後彙總到excel上,此次壓測報告就可以完成了,但收集報告也挺麻煩的,交給誰呢…… 找了一圈、沒找到願意接手的人,該怎麼辦呢……思考了會兒還是決定看看能否通過程式解決我們的難題吧,畢竟整理表格太累╯﹏ ...
  • 書接上回,OrchardCore的基本設置寫了,但是有一說一,這個東西還是挺複雜的,如果需要構建一個簡單的企業網站,還需要乾點別的活。 本文考慮在儘量少編程的基礎上,完成一個Headless網站的設置工作。本文啟用了大量的Features,如果在設置過程中發現缺少對應的feature,請在配置界面中 ...
  • typora中代碼塊中設置預設的語言 下載ahk下載鏈接 提取碼:2igm 軟體解壓密碼:rjzkgzh 解壓步驟,一直點下一步安裝就可 新建一個txt文本 將以下的代碼複製到裡面(設置預設什麼語言就將javascript 換成什麼語言) #IfWinActive ahk_exe Typora.ex ...
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是系統看門狗WDOG1在i.MXRT1xxx系統啟動中的應用及影響。 軟體看門狗模塊(WDOG)在 MCU 應用里可以說是非常基礎的功能模塊。對於一個產品級的應用程式,如果它沒有使能主控內部的看門狗模塊,一般都不能算是一個合格的軟體設計。 ...
  • 系列文章: Linux Shell 常用命令 - 02篇 0. 線上使用 Linux Shell 參考 https://www.sohu.com/a/343421845_298038 JS/UIX - Terminal 地址:https://www.masswerk.at/jsuix/index.h ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...