いまさら Vagrant に入門した
いまさら Vagrant に入門しました.
Vagrant って?
Virtual Box 等の仮想化ソフトのラッパーツールです. 通常は Virtual Box で仮想マシン(以下 VM)作って,OSインストールして,Guest Addition入れて,...って使えるようにするまで色々手順を踏む必要があると思いますが,Vagrant を使うとそんなオペレーションから開放されます.
どう使うの?
ざっくり説明するとこんな感じです.
すると VM ができちゃいます.
Vagrant をはじめるには?
まず,仮想化ソフトが必要です. 私は Virtual Box を使っています. あと Vagrant が必要です.
Vagrant を使えるようにする
VitrualBox については https://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp からインストーラーを取得して実行してください. Vagrant については https://www.vagrantup.com/downloads.html からインストーラーを取得して実行してください.
Vagrant の動作確認
まずはバージョンを表示してみます.
> vagrant --version Vagrant 2.2.4
プラグインを導入する
すぐ Vagrant で VM を作りたくなるところですが,Guest Addition を入れたり,Proxy 設定したりと色々設定があるので便利なプラグインたちをまず導入します.
Proxy関係
※ Proxy に苦しめられていないかたは読み飛ばしてください.
私は Proxy に阻まれているので社外につなぐためには Proxy 設定が必須です. そんなときはホストに vagrant-proxyconf プラグインをインストールします. このプラグインによってゲストの Proxy 設定を自動でおこなってくれます.
> vagrant plugin install vagrant-proxyconf
Vagrantfile で proxy を設定する例です.
Vagrant.configure("2") do |config| config.vm.box = "centos/7" # proxy 設定 config.proxy.enabled = true config.proxy.http = "http://user_id:password@proxy_address:proxy_port" config.proxy.https = "http://user_id:password@proxy_address:proxy_port" config.proxy.no_proxy = "localhost,127.0.0.1" end
Guest Additions
ホストとゲストでファイルを共有するために必要です. ホストに vagrant-vbguest プラグインをインストールするとゲストに自動でGuest Additions をインストールしてくれます. Vagrantfile で特に設定は不要です.
> vagrant plugin install vagrant-vbguest
hosts
vagrant-hosts プラグインをインストールすると VM のホスト名を解決できるようになります.
> vagrant plugin install vagrant-hosts
Vagrantfile でホスト名解決を可能にする設定例です. プロビジョニングで hosts の設定を有効にしています(プロビジョニングは vagrant up を実行する際にシェルを実行したりVMの設定をしたりする機能のことです).
Vagrant.configure("2") do |config| config.vm.box = "centos/7" config.vm.define :vm1 do |vm1| vm1.vm.hostname = "vm1" vm1.vm.network "private_network", ip: "192.168.33.10" vm1.vm.provision :hosts, :sync_hosts => true end config.vm.define :vm2 do |vm2| vm1.vm.hostname = "vm2" vm2.vm.network "private_network", ip: "192.168.33.11" vm2.vm.provision :hosts, :sync_hosts => true end end
Vagrant を使って CentOS7 の VM を作成する
プラグインを入れていよいよ準備が整いました. まず任意のディレクトリを用意してそこに移動します.
> mkdir D:\vargrant\centos7 > mkdir D:\vagrant\centos7\shared > cd D:\vagrant\centos7
続いて Vagrantfile を作成します.
> vagrant init -m
Vagrantfile を以下のように編集します.
Vagrant.configure("2") do |config| config.vm.box = "centos/7" config.vm.network "private_network", ip: "192.168.33.10" config.vm.synced_folder "./shared", "/home/vagrant/shared", owner: "vagrant", group: "vagrant" config.proxy.enabled = true config.proxy.http = "http://user_id:password@proxy_address:proxy_port" config.proxy.https = "http://user_id:password@proxy_address:proxy_port" config.proxy.no_proxy = "localhost,127.0.0.1" end
構成はこのようになりました.
D:\vagrant\centos7 ┣Vagrantfile ┗shared
最後に vargant up すれば VM が起動します.
> vagrant up
Vagrant に SSH 接続する
Vagrantfile を置いたディレクトリで vagrant ssh すれば VM に接続できます.
> pwd D:\vagrant\centos7 > vagrant ssh Last login: Mon Jun 10 00:19:01 2019 from 10.0.2.2 [vagrant@centos7 ~]$ pwd /home/vagrant
VM 作成時にシェルスクリプトを実行する
Vagrantfile を作成したディレクトリに start.sh を作成します.
yum update
Vagrantfile に シェルを実行するように設定します.
Vagrant.configure("2") do |config| ... config.vm.provision :shell, path: "./start.sh" ... end
構成はこのようになりました.
D:\vagrant\centos7 ┣Vagrantfile ┗start.sh
あとは vagrant up すればシェルが実行されます.
> vagrant up
Guest Addition インストール済みの CentOS7 の box を作る
毎回新しく VM を作成する際に Guest Addition をインストールしていると時間がかかるので Guest Addition インストール済みの box を作ってみます.
D:\vagrant\centos7ga ┗Vagrantfile
Vagrant.configure("2") do |config| config.vm.box = "centos/7" config.proxy.enabled = true config.proxy.http = "http://user_id:password@proxy_address:proxy_port" config.proxy.https = "http://user_id:password@proxy_address:proxy_port" config.proxy.no_proxy = "localhost,127.0.0.1" config.vm.provision "shell", inline: <<-SHELL yum update SHELL end
まずは VM を作成して停止します.
> cd D:\vagrant\centos7ga > vagrant up > vagrant halt
box を作成します. --output で box 名を指定します.
> vagrant package default --output centos7ga.box
作成した box を使用するには box を登録する必要があります.
> vagrant box add centos7ga centos7ga.box
これ以降 Vagrantfile で以下のように作成した box を使うことができます.
Vagrant.configure("2") do |config| config.vm.box = "centos7ga" end