会社でHAProxyを試したい時、仕事中自分のMacを開いていると肩身が狭いのでばれないように仕事で使っているWindowsにVirtualBox+VagrantでCentOS環境を構築してHAProxyを試そうと言う意図で書かれたエントリです。
新しい案件もVagrant使うっぽいのでその点でもDockerを使わずに慣れようという点でVagrantを選択しています。
…(今後自分のMacを検証用に開いていもそのような思いをせずにいれる環境になることを願うばかりです。)
初めにVagrantとは何者か
触り始める前の印象はVirutualBoxに環境を立ち上げるための設定ファイルを書いてそれから同じ環境を作ることが出来ると思っています。 -> VirtualBoxのVM構築を楽にしてくれるツール DockerはVirtualBox上にLinuxVMを作ってその上でDockerfileからイメージ作ったりイメージからコンテナ立てたりしているのでVM自体は何度も作り直さない、VagrantはVagrantfileから何度も同じ状態のVMを作る印象。Wikipedia Vagrant (ソフトウェア)
Vagrantを用いると、構成情報を記述した設定ファイルを元に、仮想環境の構築から設定までを自動的に行うことができる。当初はVirtualBoxをターゲットとしていたが、1.1以降のバージョンではVMwareなどの他の仮想化ソフトウェアやAmazon EC2のようなサーバー環境も対象とできるようになった。Vagrant自身はRubyで作成されているが、PHPやPython、Java、C#、JavaScriptといった、他のプログラミング言語の開発においても用いることができる。
とのことです。
VirtualBox以外の環境でも使えるんですね。
ミドルウェアの設定やインストールを行うツール
eg.シェルスクリプト、Chef(chef-solo, chef-client)、Puppetなど
Vagrantfile自体にはサーバーの環境情報だけ記述してサービスのインストールなどは他のソフトでやってね、ということでしょうか
Dockerfileにはミドルウェア含めイメージ作成出来るのでVagrantのここは少し面倒な気がします、実行するレイヤーが違うと言われたらしょうがないけれど。
とりあえずVagrantはAnsibleとかChefでうまくやってねということと覚えておけばいいでしょう。
あとVagrantは、CentOSなどを立ち上げてyumでなんやらかんやらインストールしたあとにCentOSをストップして再び立ち上げると、yumでインストールしたものが残っているらしいです。
完全にVagrantfileに記述している状態で起動したい場合は、VMを削除して再び立ち上げないといけないので気軽に試して気軽に捨てるということが少し難しそうです。
--rm欲しい…
では上で調べたことを検証していきたいので実際に始めてみましょう。
VirtualBoxインストール
こちらのURLの
https://www.virtualbox.org/wiki/Downloads
VirtualBox 5.0.14 for Windows hosts x86/amd64をクリックしてダウンロードしてぽちぽちすればインストール完了です。
Vagrantのインストール
こちらのURLの https://www.vagrantup.com/downloads.html WINDOWSをクリックしてダウンロードします。踊って待ちましょう。 舞は大切です、エンジニアリングの観点から見てもダウンロード成功率を高めることが確認されています。 ダウンロードしたmsiをダブルクリックしてインストールしましょう。
インストール後はWindowsの再起動が必要です。
VirtualBoxにCentOS boxファイルを登録する
vagrant box add VM名 boxファイルURL
今回はCentOS6.7を選択しています。
なので
vagrant box add centos6-7 https://github.com/CommanderK5/packer-centos-template/releases/download/0.6.7/vagrant-centos-6.7.box
というコマンドを実行します。
boxファイルのダウンロードはかなり時間のかかるので今回はコンソールを眺めて眉間にしわを寄せながらあたかも仕事している風を装いましょう、人生を無駄に出来ます。
※他のOSを選択したい場合はboxファイルをここから選択してください。
http://www.vagrantbox.es/
ダウンロードが完了したら次のコマンドで確認しましょう
vagrant box list
centos6-7と確認できたので良さそうです。
Vagrantfileの作成
vagrant init box名
で生成します
vagrant init centos6-7
カレントディレクトリにVagrantfileが作成されます。
僕の場合
/d/various/vagrant/centos6-7/にしました
生成したVagrantfileを編集します
// Windowsから見ることの出来るIPを指定
config.vm.network "private_network", ip: "192.168.33.10"
// GUIモードの設定をONにする
config.vm.provider "virtualbox" do |vb|
# Display the VirtualBox GUI when booting the machine
vb.gui = true
end
VM立ち上げ
設定が済んできたのでCentOSのVMを立ち上げてみましょう立ち上げるコマンドは
vagrant up
で先ほど編集したVagrantfileがあるディレクトリ上で行わなければいけません
Dockerの場合buildは遅いですがコンテナ起動のrunは高速です
Vagrantのupの場合はVagrantfileから起動する初回起動に少し時間がかかります
起動したらlogin/passwordともにvagrantと入力すればログイン出来ます
GUIで開きましたが、このCentOSに他のコンソールからssh接続したい場合は
vagrant upしたディレクトリから
vagrant ssh
と入力してログインするか

ssh vagrant@192.168.33.10
でsshログイン出来ます

HAProxyのインストール
インストールしていきます
sudo yum -y install haproxy
※今回はHAProxyの設定はしません
VM停止
最初疑問だったvagrantはVMが停止した後に状態を保持するのかが気になっていたのでここで検証してみます。vagrantにVMを停止する方法は
vagrant halt
と
vagrant destroy
の2つあります
まずはhaltを試していきます。
upしたディレクトリで
vagrant halt
これを実行するとGUIで立ち上がっていたコンソールも閉じられます。
そしてもう一回vagrant upでVMを起動してみましょう
vagrant up
2回目の起動も地味にかかる点…

haproxyがあるのが確認できます
vagrantはVMが停止した後に状態を保持するのか
結論は保持される、でした
ではvagrant destroyはどうでしょう
vagrant destroy
※destroyはVM停止中でも実行できます
destroyコマンドを打ってもyを押さない限り消されることはありません、確認大事
再び
vagrant up

destroyはVMを削除するので予想通りhaproxyは存在しませんでした
番外編
個人的にGUIモードは必要ないのでVagrantfileのGUI設定を無効にしてvagrant upすると
CentOSのウィンドウは現れませんでした
// GUIモードの設定をONにする
# config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
# end
vagrant statusで起動しているのか確認
立ち上がっていますね、sshログインも問題なく出来ました。
所感
vagrantを触ってみてdockerよりもシンプルに考えることが出来るツールだと思った 直接VMを立ち上げるのでそう感じるのかもしれない dockerは覚えると高速に起動出来過ぎて素晴らしいが、最初概念を理解するのが少し難しい今回はCentOSを立ち上げるだけで難しいことはやっていないので、次はChefやAnsibleなどを使って色々な環境を整える練習をしてみたいと思う
今回の参考資料はこちらです
Windows上でVirtualBox+Vagrant+CentOSによる仮想環境構築
以上です
コマンドメモ
vagrant box add box名 boxファイル: ローカルにボックスファイルをダウンロードする
vagrant box list: box一覧確認
vagrant init box名: Vagrantfileの作成
vagrant up: VagrantfileからVMを起動する
vagrant status: 起動しているVM一覧確認
vagrant halt: VM停止
vagrant destroy: VM削除
vagrant ssh: 簡単にSSHログイン出来る







