Help us understand the problem. What is going on with this article?

ローカル環境でのサーバ構築自動化(VirtualBox+Vagrant)

背景

Windows端末のローカル環境で色々試す際に、サーバ構築を効率化したいために導入
調べると、VirtualBox+Vagrantの組み合わせで自動化しているケースがあったため、導入をしてみる。

今回の範囲

VirtualBox+Vagrantを組み合わせてコマンドラインにてVMを作成できることを確認するまでを実施。そのため、ネットワークIFが2つで、共有ディスクがあってなどの細かい?設定は気にせず、対象のOSでVMが立ったまでを見ます。

Vagrantとは

コマンドラインで、VirtualBoxやVMwareを操作することが可能なツール
Vagrantfileに構成情報を記載して、コードを実行することで、仮想マシンの構築が可能

簡単な流れは以下のイメージ。。これだけ書くと簡単に見える。。。

  1. vagrantBoxファイル(イメージファイル)の取得
  2. vagrantfileに構成情報の作成
  3. vagrantコマンドで仮想マシン起動

また、VMに対してシェルスクリプトを記載し実行できるため、MWインストールも可能。

環境

環境構築時のソフトウェアのバージョンは下記の通り

  • windows 10
  • VirtualBox 6.0.20
  • Vagrant 2.2.7

インストール

VirtualBox:こちらからDLしてインストール
Vagrant:こちらからDLしてインストール

環境

(とても雑ですが)環境のイメージは以下の通り。

VagrantでのVM構築

vagrantBoxファイル(イメージファイル)の取得

Boxファイル自体は、vagrantfileの記載の仕方から、

  • 構築時にインターネット上からBoxファイルを取得
  • 事前にローカルのVagrantに登録し取得しておいたBoxファイルを利用

することが可能だが、今回は、構築時にBoxファイルのDLが発生して待機時間が発生するのが嫌なので事前にDLしておく。

なお、構築時にインターネット上から取得する場合は(DL時間が発生するが、)初回の場合はローカルのVagrantBoxに登録も行うため、2回目以降は再度取得することはない。
また、別のVMの構築でも、ローカルのVargrantBoxに登録したBox名である場合は、ローカルのBoxを使用するため、DL時間は発生しない。
vagrantfileを他の環境でも使いまわすことも考えるなら、前者の方が良いのだろうと思う。

Boxファイルはインターネット上で公開されており、例えば、下記サイトから対象のイメージを検索することが可能
Vargrant Cloud:こちらで検索
Vagrantbox.es:こちらで検索

BoxファイルのURLパスを確認し、下記コマンドを実行することでBoxファイルを登録することが可能

コマンドプロンプト
> vagrant box add {VM名} {BoxファイルのURL}

なお、Vargrant CloudからBoxを取得する場合は、以下のような書き方でも取得できる。
VM名の部分は、Vargrant Cloudのサイトで対象のBoxイメージを確認すると記載してある。
例えば、2020/4時点でCentOS7の最新版"7.6.1811"を取得する場合は下記コマンドで可能。

コマンドプロンプト
> vagrant box add centos/7

また、旧バージョンを取得したい場合、例えば、今回はCentOS7.4を取得してみたが、その場合は下記の記載で取得可能。
box-versionオプションでバージョンを指定することで、OSのマイナーバージョンを指定することが可能。

コマンドプロンプト
> vagrant box add centos/7 --box-version 1803.01

つまり、Boxは、Box名とバージョンの組み合わせで一意になれば、どのようにでも登録可能となる。
ちなみに、上記のコマンドだとCentOS7.xのどのバージョン?となったので、今回は以下のコマンドでBoxを登録した。

コマンドプロンプト
> vagrant box add centos7.4.1708 https://vagrantcloud.com/centos/boxes/7/versions/1803.01/providers/virtualbox.box

URLの部分は、「vagrant box add centos/7 --box-version 1803.01」を実行した際に、実行時の標準出力で出てきたので、そちらを使用した。「1803.01」を変えれば他のCentOSのバージョンも取得できる。

ローカルにあるBoxファイルを登録したい場合は下記コマンドで可能。

コマンドプロンプト
> vagrant box add {VM名} {パス}

vagrantコマンド

command 内容
vagrant box add {VM名} {BoxファイルのURL} ローカルのBoxへ追加
vagrant box list ローカルのBox一覧取得
vagrant box remove {box名} ローカルのBoxからの削除
vagrant init vagrant初期化(Vagrantfile作成)
vagrant up vagrantからVM起動
vagrant ssh VMへのログイン
vagrant halt VM停止
vagrant reload VM再起動
vagrant destroy VM破棄

なお、今回はVertualBoxであるが、例えばVmwareで使いたい場合は、vagrantのコマンドに「--provider=●●●」をつけることで、操作が可能となる。(デフォルトはVertualBoxなので、このオプションは要らない。)

vagrantfileに構成情報の作成

vagrantfileを作成するにあたって、Vagrant用のフォルダを作成

コマンドプロンプト
> mkdir Vagrant & cd Vagrant

各仮想マシン用にフォルダを作成

コマンドプロンプト
> mkdir centos74 & centos74

下記コマンドにて、vagrant初期化して、vagrantfileのひな型を生成させる。

コマンドプロンプト
> vagrant init [vagrantbox名]

なお、vargrantbox名は、後でvagrantfileに追記できるため、コマンドにて指定する必要はない。

生成されたvagrantfileを参考に、必要な情報を記載。
今回は、最低限の構成情報で記載した内容で実行する。パラメータ等は次回に確認することとする。

vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "centos7.4.1708"
  config.vm.box_version = "0"
  config.vm.network "private_network", ip: "192.168.33.10"
end

config.vm.box:Box名
config.vm.box_version:Boxのバージョン指定(今回はBox名だけで一意になるので、記載しなくても問題ない)
config.vm.network:VMのネットワークIF設定

なお、バージョンを確認したい場合は、下記コマンドでBoxリストを出力し確認が可能

コマンドプロンプト
> vagrant box list
centos/7       (virtualbox, 1803.01)
centos7.4.1708 (virtualbox, 0)

vagrantコマンドで仮想マシン起動

vagrantfileの編集を終えたら、vagrantfileと同じフォルダで、下記コマンドを実行

コマンドプロンプト
> vagrant up

あとは待つだけ、、、と思ったら、下記エラーが発生し起動しない。

コマンドプロンプト
 VBoxManage.exe: error: Implementation of the USB 2.0 controller not found!

VirtualBoxの拡張機能が足らないことが原因らしいので、「Oracle VM VirtualBox Extension Pack」を導入
ここからDLして、VirtualBoxの
 ファイル>環境設定>機能拡張
で、DL資材を指定して、インストール完了させた後、再度、「vagrat up」を実行!

エラーがなく完了したら、ssh接続を行い、ログインを試みる。

コマンドプロンプト
> vagrant ssh

問題なければ、ログインができる。

環境のイメージとしてはこんな感じかなと。

後片付け

今回、確認したいことは一通り確認できたので、作成したVMを削除する。

まずは、下記コマンドでVMの停止

コマンドプロンプト
> vagrant halt

停止が完了したら、VMを下記コマンドで破棄する。

コマンドプロンプト
> vagrant destroy

VirtualBoxのGUI画面を確認すると消えていることが分かる。

さて、「vagrant destroy」コマンドでVMを破棄しても、vagrantfileとBoxファイルは残っているため、1コマンドで再作成が可能であり、すぐ復旧できるので、(VM作成後にOS上で作業した内容は当然消えているけど)便利ですね~。

今回は、ここまで。

vagrantfileの内容やvargrantコマンドについては次回見てみます。

mizuya_37
インフラよりの事をしている職場に居ます。 興味あることを調べたり、試したりして、備忘録としてここに記載しようと思ってます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした