ローカル環境でのサーバ構築自動化(VirtualBox+Vagrant)
背景
Windows端末のローカル環境で色々試す際に、サーバ構築を効率化したいために導入
調べると、VirtualBox+Vagrantの組み合わせで自動化しているケースがあったため、導入をしてみる。
今回の範囲
VirtualBox+Vagrantを組み合わせてコマンドラインにてVMを作成できることを確認するまでを実施。そのため、ネットワークIFが2つで、共有ディスクがあってなどの細かい?設定は気にせず、対象のOSでVMが立ったまでを見ます。
Vagrantとは
コマンドラインで、VirtualBoxやVMwareを操作することが可能なツール
Vagrantfileに構成情報を記載して、コードを実行することで、仮想マシンの構築が可能
簡単な流れは以下のイメージ。。これだけ書くと簡単に見える。。。
- vagrantBoxファイル(イメージファイル)の取得
- vagrantfileに構成情報の作成
- 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を参考に、必要な情報を記載。
今回は、最低限の構成情報で記載した内容で実行する。パラメータ等は次回に確認することとする。
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コマンドについては次回見てみます。
Author And Source
この問題について(ローカル環境でのサーバ構築自動化(VirtualBox+Vagrant)), 我々は、より多くの情報をここで見つけました https://qiita.com/mizuya_37/items/3ea0e8cca95fe75d17f4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .