VagrantのGetting Startを読んでみたよ!!
VagrantのGetting Startを読んでみたよ!!
諸元
なんか仮想化したいなーと思って。
序文
Vagrantは単一ワークフローで仮想マシン環境を構築・管理するツール。簡単なワークフローと自動化に注力してて、「僕の環境なら動くのに」という例のアレを過去の遺産にするよ。
仮想マシンの提供元としてVirtualBox(デフォルト)、VMWareやAWSなどなどを選べるし、ShellScriptとかChefなどは仮想環境上で、自動的にソフトウェアのインストールや設定ができますよ、と。
他のツールとの比較
VS. CLIツール
仮想化ソフトウェアにもCLIツールは入ってるけど、それら自体に依存している。Vagrantも内部的にはそれらを使ってるけどね。 Vagrantとそれらの違いは、Vagrantはその上に一貫したワークフローとして構築されていること。ようするにアダプタというかFacadeになっているわけか。 仮想化ソフトウェアのバージョンごとの違いもVagrantが解決するよ。
VS. Docker
Vagrantは複数のプラットフォームにまたがって一貫した開発環境のワークフローを提供することに注力していて、Dockerは存在するコンテナ化システムの一貫した実行をコンテナ管理する。つまり、開発環境に注力しているのと、コンテナの実行に注力している違いがあるわけですね。たぶん。
コンテナは仮想マシンに比べて軽量で、開始と実行が速いよ。 Microserviceとかには向いてるね。
DockerもVagrantも選べるようにコミュニティが作ったライブラリを落とせるよ
VS. Terraform
どちらもHashiCorpが作っているけど、Terraformはインフラ構築。Infrastracture as a Code。
インストール
から適したバイナリをダウンロードしてインストールしてね。
終わったらvagrant
コマンドを打ってみて確認してね。
パスが通っていたらOKだよ。
システムのパッケージマネージャでインストールしないでね。
プロジェクトの設定
どんなVagrantプロジェクトでも一番最初にするのはVagrantfileの作成だよ。このファイルの目的は2つだよ。
適当なディレクトリを作って、vagrant init
を実行しよう。
これでVagrantfileは作成されるよ。
Vagrantfileはバージョン管理下におけるから、だれの環境でも共通で使えるね。
ボックス
時間がかかって面倒くさい手段で最初から仮想環境を作る代わりに、Vagrantは仮想マシンを高速でクローンするためのベースイメージを使うよ。それはboxとして知られていて、それを指定することがVagrantfile作成後の次のステップになるよ。
ボックスのインストール
vagrant box add hashicorp/precise64
これはCloud Box Catalogからのダウンロード。
ローカルやURLの指定も可能。
Vagrantfileにこんなふうに書いてもできるよ。
Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise64" config.vm.box_version = "1.1.0" # これはオプション end
実行と接続
vagrant up
起動するけどUIはないよ。
起動する端末に接続するのは以下だよ。
vagrant ssh
同期されたフォルダー
Vagrantfileが配置されているフォルダと仮想環境の/vagrant
が同期されているよ。
vagrant ssh
で接続すると/home/vagrant
にいるけど、これとは違うよ。
供給
apacheでwebserverを立ててみよう。
まずShellScriptを作るです(bootstrap.sh)。
#!/usr/bin/env bash apt-get update apt-get install -y apache2 if ! [ -L /var/www ]; then rm -rf /var/www ln -fs /vagrant /var/www fi
みればわかるけど、apacheいれて、ドキュメントルートを同期フォルダに変えているよ。
Vagrantfileを書き換えるよ。
Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise64" config.vm.provision :shell, path: "bootstrap.sh" end
vagrantが起動していたらvagrant reload --provision
を実行するよ。
vagrant up
でもいいけど、realoadのほうが速いよ。
まだネットワークの設定していないから、仮想環境内部から確認するよ
vagrant ssh
vagrant@precise64:~$ wget -qO- 127.0.0.1
ネットワーキング
ホスト側のポートフォワーディングで仮想端末に飛ばすよ。
Vagrantfileを書き換えるよ。
Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise64" config.vm.provision :shell, path: "bootstrap.sh" config.vm.network :forwarded_port, guest: 80, host: 4567 end
reload
かup
を使って更新するよ。
http://localhost:4567を開くと…わお。
他にも設定次第でIPを指定したりも出来るけど、別の説明箇所を見てほしいんだよ。。。
共有
Vagrant Shareと呼ばれる原始的な機能でこの環境を共有できるよ。
でも、商用レベルでは使えないから気をつけてね。
vagrant share
URLが表示されるんだけど、それを開くとさっきのapacheのページが表示されるよ。すごいね。
落とす
開発環境をクリーンする方法は3つあるよ。
- vagrant suspend
- 再起動
- vagrant up
- すごく速いよ
- メモリもHDDも確保したままだよ
- 再起動
- vagrant halt
- 再起動
- vagrant up
- クリーンに停止するよ
- ゲストマシーンはDISKスペースを確保しているよ
- 再起動
- vagrant destroy
- guest側のハードディスクも削除するよ
- やっぱりvagrant upで起動するよ
- 時間がかかるよ
再構築
vagrant up
仮想マシンの提供者
今までVirtualBoxでやってきたけど、upのオプションで仮想マシンの提供元を変えられるよ。
vagrant up --provider=vmware_fusion
AWS:
vagrant up --provider=aws