Vagrant 資料一覧
2015/12/29更新
対応バージョン: 1.7.4
Vagrantを導入し、VirtualBox環境で仮想マシンを動作させる手順を示す。
ホストOSはUbuntu 15.10(64bit)とする。
公式サイト
インストール
Vagrantインストール
% sudo apt install vagrant % vagrant -v Vagrant 1.7.4
VirtualBoxインストール
以下からUbuntu用のバイナリをダウンロードしてインストール
https://www.virtualbox.org/wiki/Downloads
BOX取得
次に仮想マシンのテンプレートとなるBOXを取得する。
以下のサイトでいろいろなBOXが配布されているが、ここではCentOS 7.1(64bit)を導入する。
BOXの取得はvagrant box addコマンドを使い、引数として任意の仮想マシン名と取得元ファイルを指定する。
% vagrant box add centos71_64 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.1/vagrant-centos-7.1.box % vagrant box list centos71_64 (virtualbox)
ここまでで~/.vagrant.d/boxes配下に仮想マシン名のディレクトリ、さらにその下に仮想マシンを動作させるハイパーバイザ名のディレクトリができてテンプレートが保存される。仮想マシンを潰してもこのテンプレートがあるので何度でも再作成できる。
% cd % ls -lR .vagrant.d/boxes .vagrant.d/boxes: 合計 4 drwxrwxr-x 3 neo neo 4096 12月 29 20:49 centos71_64/ .vagrant.d/boxes/centos71_64: 合計 4 drwxrwxr-x 3 neo neo 4096 12月 29 20:49 0/ .vagrant.d/boxes/centos71_64/0: 合計 4 drwxrwxr-x 2 neo neo 4096 12月 29 20:49 virtualbox/ .vagrant.d/boxes/centos71_64/0/virtualbox: 合計 608596 -rw-r--r-- 1 neo neo 258 12月 29 20:49 Vagrantfile -rw-r--r-- 1 neo neo 11941 12月 29 20:49 box.ovf -rw-r--r-- 1 neo neo 623177216 12月 29 20:49 centos-vm-disk1.vmdk -rw-r--r-- 1 neo neo 26 12月 29 20:49 metadata.json
仮想マシン初期化、仮想マシン起動
BOXが取得できたら仮想マシンを初期化する。
まず仮想マシンの設定ファイルを作成する任意のディレクトリを作成し、以降はその場所で作業する。
% cd % mkdir -p vagrant/centos71 % cd vagrant/centos71
仮想マシンの初期化は以下のようにする。
% vagrant init centos71_64 % ls Vagrantfile
ここで作成されたVagrantfileに変更を加えることで仮想マシンの挙動を制御することができる。今はとりあえずそのままの状態で仮想マシンを起動する。
% vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Importing base box 'centos71_64'... ==> default: Matching MAC address for NAT networking... : default: VirtualBox Version: 5.0 ==> default: Mounting shared folders... default: /vagrant => /home/neo/vagrant/centos71
ここまで進むとVirtualBox上に仮想マシンが作成される。
~/VirtualBox VMs配下には以下のファイルが作成されている。
% cd % ls -lR VirtualBox\ VMs VirtualBox VMs: 合計 4 drwx------ 3 neo neo 4096 12月 29 20:54 centos71_default_1451390070861_65585/ VirtualBox VMs/centos71_default_1451390070861_65585: 合計 1545664 drwx------ 2 neo neo 4096 12月 29 20:54 Logs/ -rw------- 1 neo neo 1583742976 12月 29 20:55 centos-vm-disk1.vmdk -rw------- 1 neo neo 7971 12月 29 20:54 centos71_default_1451390070861_65585.vbox -rw------- 1 neo neo 7971 12月 29 20:54 centos71_default_1451390070861_65585.vbox-prev VirtualBox VMs/centos71_default_1451390070861_65585/Logs: 合計 68 -rw------- 1 neo neo 65819 12月 29 20:54 VBox.log
仮想マシン操作
仮想マシンが作成されたら以下のような操作が可能になる。必要に応じて使用する。
状態表示
% vagrant status Current machine states: default running (virtualbox) The VM is running. To stop this VM, you can run `vagrant halt` to shut it down forcefully, or you can run `vagrant suspend` to simply suspend the virtual machine. In either case, to restart it again, simply run `vagrant up`.
サスペンド
現在の状態を保存してスリープする。
% vagrant suspend ==> default: Saving VM state and suspending execution... % vagrant status Current machine states: default saved (virtualbox) To resume this VM, simply run `vagrant up`.
レジューム
スリープから復帰する。
% vagrant resume ==> default: Resuming suspended VM... ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key ==> default: Machine booted and ready!
シャットダウン
% vagrant halt ==> default: Attempting graceful shutdown of VM... % vagrant status Current machine states: default poweroff (virtualbox) The VM is powered off. To restart the VM, simply run `vagrant up`
再起動
仮想マシン起動中にVagrantfileを書き換えた場合は以下のようにして仮想マシンを再起動することで変更内容が有効になる。
% vagrant reload
仮想マシン削除
仮想マシンはいとも簡単に削除することができる。削除してもVagrantfileは消えないので再度vagrant upを実行すれば仮想マシンを再作成できる。
% vagrant destroy default: Are you sure you want to destroy the 'default' VM? [y/N] <--- y ==> default: Forcing shutdown of VM... ==> default: Destroying VM and associated drives...
仮想マシン接続
vagrant sshコマンドにて仮想マシンに接続できる。ログインアカウントはvagrant専用ユーザとなる。
% vagrant up <--- 前項で仮想マシンを削除したのでまず作成 % vagrant ssh [vagrant@localhost ~]$ id uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant)
仮想マシン内でのIPアドレスやルーティング等の設定は以下のようになっている。
IPアドレス
10.0.2.15
デフォルトルータ
10.0.2.2
DNSサーバ
10.0.2.3
[vagrant@localhost ~]$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:51:d1:5e brd ff:ff:ff:ff:ff:ff inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3 valid_lft 86353sec preferred_lft 86353sec inet6 fe80::a00:27ff:fe51:d15e/64 scope link valid_lft forever preferred_lft forever [vagrant@localhost ~]$ ip r default via 10.0.2.2 dev enp0s3 proto static metric 100 10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 metric 100 [vagrant@localhost ~]$ cat /etc/resolv.conf # Generated by NetworkManager search elecom nameserver 10.0.2.3
共有ディレクトリアクセス
ホストOS側で作成した~/vagrant/centos71ディレクトリが仮想マシン上の/vagrantにマウントされているのでここを使って両者でファイルのやり取りができる。
[vagrant@localhost ~]$ LANG=C df -h /vagrant Filesystem Size Used Avail Use% Mounted on none 451G 291G 160G 65% /vagrant [vagrant@localhost ~]$ mount | grep /vagrant none on /vagrant type vboxsf (rw,nodev,relatime)
プロビジョニング
先の共有ディレクトリを使って仮想マシン上でシェルスクリプトを実行させることができる。
例えば仮想マシンにApacheをインストールしたい場合、まずVagrantfileと同じディレクトリに以下のようなシェルスクリプトを作成する。
これはホストOS上で作業しても仮想マシン上で作業してもよい。
% vi startup.sh #!/bin/bash yum update yum -y install httpd
次に仮想マシンが起動した時にこのシェルスクリプトが実行されるようにVagrantfileを以下のように編集する。ファイルのパスはVagrantfileが配置されているディレクトリからの相対パスで指定する。
: Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "centos71_64" config.vm.provision :shell, :path => "startup.sh" :
ここまで終わったら仮想マシンを起動する。
% vagrant up (既に仮想マシンが起動していたらvagrant reloadを実行)
起動したらApacheがインストールされていることを確認する。
% vagrant ssh [vagrant@localhost ~]$ yum list httpd : httpd.x86_64 2.4.6-40.el7.centos @base
その他
ポートフォワーディング
ホストOSでhttp://127.0.0.1:8080/にアクセスした場合に仮想マシンの80番ポートに接続するにはVagrantfileを以下のように編集する。
: Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "centos71_64" config.vm.network :forwarded_port, guest: 80, host: 8080 :
ホストオンリーネットワーク
デフォルトではNAT接続による仮想マシンから外部へのアクセスしかできないため、ホストOSから仮想マシンにアクセスしたい場合はVagrantfileを以下のように編集する。
: Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "centos71_64" config.vm.network :private_network, ip: "192.168.33.10" :
こうすることで仮想マシン側で新たな仮想NICにIPアドレスが割り当てられ、ホストOS側のルーティングも自動的に設定される。
% vagrant ssh [vagrant@localhost ~]$ ip a : 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:45:08:4a brd ff:ff:ff:ff:ff:ff inet 192.168.33.10/24 brd 192.168.33.255 scope global enp0s8 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe45:84a/64 scope link valid_lft forever preferred_lft forever [vagrant@localhost ~]$ exit % ip r : 192.168.33.0/24 dev vboxnet1 proto kernel scope link src 192.168.33.1 : % ssh vagrant@192.168.33.10 vagrant@192.168.33.10's password: ***** <- アカウントと同じ [vagrant@localhost ~]$
ブリッジネットワークの作成方法は以下を参照のこと。
関連資料・記事
仮想マシンのエクスポート・インポート
仮想マシンの状態をまとめてエクスポートして他のBOX(テンプレート)として再利用することができる。
方法は簡単で、以下のコマンドを実行してできあがったファイルを移動先でインポートして初期化・起動するだけである。
エクスポート
% vagrant package ==> default: Attempting graceful shutdown of VM... ==> default: Clearing any previously set forwarded ports... ==> default: Exporting VM... ==> default: Compressing package to: /xxx/yyy/package.box % ls -l package.box -rw-rw-r-- 1 neo neo 627712676 12月 29 21:26 package.box
インポート、仮想マシン初期化 & 起動
% vagrant box add centos71_2 package.box % vagrant init centos71_2 % vagrant up
他にも様々な制御ができるがVagrantfileファイルそのものに詳しい説明が書かれているので割愛する。
参考サイト
Vagrant技術情報 (Qiita)
VirtualBox技術情報 (Qiita)
Vagrant入門 (ドットインストール)
Vagrant入門 (WEB ARCH LABO)
「Vagrant」って何ぞ? (@IT)
今すぐVagrantを始めよう (SYMETRIC公式ブログ)