Vagrant

MacにVagrantをインストールし仮想マシンを立ち上げる

はじめに

Vagrantを使うことで簡単にローカル環境内に仮想マシンを立ち上げることができます。今回はそのVagrantを使えるようにする手順をまとめていきます。

導入手順

環境

MacOS Mojave バージョン 10.41.1
Vagrant 2.2.1
Centos64

Vagrantをインストール

https://www.vagrantup.com/downloads.html
こちらからインストールすることができます。
MacOS版を選択し、dmgファイルをダウンロードすることができるので、起動すると、インストーラーを立ち上げるためのpgkファイルがあるので起動し手順通りに進めていきましょう。

完了したら実際にインストールできているかを確認しましょう。
以下のコマンドを叩いてバージョンが表示されれば正常にインストールができています。


$ vagrant -v
Vagrant 2.2.1

VirtualBoxのインストール

VirturlBoxは仮想マシンを管理するためのアプリケーションです。
起動している仮想マシンの一覧や、起動、停止などの操作ができます。
起動や停止などは基本的にはterminalで行いますが、使ってないのに停止し忘れていたりしたときに一覧でみれるとわかりやすいです。

https://www.virtualbox.org/wiki/Downloads
上記からインストールすることができます。MacOS版を選択し、dmgファイルをダウンロードすることができるので起動してインストールしましょう。

VirturlBoxをインストールせずに後に行うvagrant upを行うと以下のようなエラーがでます。


$ vagrant up
No usable default provider could be found for your system.

Vagrant relies on interactions with 3rd party systems, known as
"providers", to provide Vagrant with resources to run development
environments. Examples are VirtualBox, VMware, Hyper-V.

The easiest solution to this message is to install VirtualBox, which
is available for free on all major platforms.

If you believe you already have a provider available, make sure it
is properly installed and configured. You can see more details about
why a particular provider isn't working by forcing usage with
`vagrant up --provider=PROVIDER`, which should give you a more specific
error message for that particular provider.

Boxを追加

BoxというのはVagrantで仮想マシンを起動するときのテンプレートとなるイメージファイルのことです。
どのOSのどのバージョンで作成するか、のようなイメージで考えればいいのではないかなと思います。

https://app.vagrantup.com/boxes/search
上記のURLから使いたいBoxを選ぶことができます。
今回はcentos64を使用していきます。
以下のようにvagrant box add {名前(自分で好きに付けれます)} {URL}で追加することができます。


$ vagrant box add centos64 http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130427.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centos64' (v0) for provider: 
    box: Downloading: http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130427.box
    box: Download redirected to host: sourceforge.net
    box: Download redirected to host: sourceforge.net
    box: Download redirected to host: downloads.sourceforge.net
    box: Download redirected to host: jaist.dl.sourceforge.net
==> box: Successfully added box 'centos64' (v0) for 'virtualbox'!

これで追加することができました。

vagrant box listで現在追加されているboxのリストを確認することができます。


$ vagrant box list
centos64 (virtualbox, 0)

無事に追加されていることが確認できました。

Vagrantfileの作成

Vagrantfileは作成する仮想マシンの構成を記述するファイルです。
設定できる項目としては主に、スペックだったり、接続する際のネットワークの設定をします。
コマンド一発で作成することができ、デフォルトの設定からそこまで書き換える必要がないのでわりと簡単です。

Vagrantfileはプロジェクト用のフォルダを作成してそこに置くのが良いかと思います。
今回はvagrantというディレクトリを作成してそこにVagrantfileを置くことにします。


$ mkdir vagrant
$ cd vagrant/

Vagrantfileの作成は作成したいディレクトリに移動してからvagrant init {boxの名前}でできます。


$ vagrant init centos64
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.
$ ls
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 = "centos64"

  # 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
  # Puppet, Chef, Ansible, Salt, and Docker 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

このようにVagrantfileはRubyで書かれています。
ほとんどコメントアウトされているので変更したい項目があった場合にコメントアウトをはずして書き換えれるようになっています。


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

この行のコメントアウトをはずすことで実際にvagrantでなにかしらのWebサーバーなど立ち上げた際に192.168.33.10というipアドレスでアクセスできるようになるのでその場合はコメントアウトを外しておきましょう。
現状はまだ起動してないので大丈夫ですが起動してからVagrantfileを書き換えた場合はvagrant reloadで再起動をかけたら反映されます。

Vagrantの起動

vagrant upで起動することができます。


$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'centos64'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: vagrant_default_1542438501606_86231
Vagrant is currently configured to create VirtualBox synced folders with
the `SharedFoldersEnableSymlinksCreate` option enabled. If the Vagrant
guest is not trusted, you may want to disable this option. For more
information on this option, please refer to the VirtualBox manual:

  https://www.virtualbox.org/manual/ch04.html#sharedfolders

This option can be disabled globally with an environment variable:

  VAGRANT_DISABLE_VBOXSYMLINKCREATE=1

or on a per folder basis within the Vagrantfile:

  config.vm.synced_folder '/host/path', '/guest/path', SharedFoldersEnableSymlinksCreate: false
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> 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: 4.2.12
    default: VirtualBox Version: 5.2
==> default: Mounting shared folders...
    default: /vagrant => /Users/fukatsuyuuki/attramarketing/vagrant

vagrantにログインする

vagrant sshでログインすることができます。


$ vagrant ssh
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]$ 

これで完了です。

先ほどのvagrant upと分けて行いましたが
vagrant up && vagrant ssh
とすれば1回でログインまで行ってくれるので便利です。

ログアウトはexitで行えます。


[vagrant@localhost ~]$ exit
logout
Connection to 127.0.0.1 closed.
$ 

共有フォルダについて

ローカルのVagrantfileがあるフォルダと、Vagrant内の/vagrantが同期するようになっています。
Vagrantfileがある階層にtestというファイルを作成しました。


$ ls
Vagrantfile test
$ vagrant ssh
Last login: Sat Nov 17 07:08:53 2018 from 10.0.2.2
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]$ cd /vagrant/
[vagrant@localhost vagrant]$ ls
Vagrantfile  test
[vagrant@localhost vagrant]$ 

確認することができました。