2
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Vagrantfileチートシート&コマンド集

Posted at

概要

Vagrantfile(version=2)の記述方法とvagrantコマンドに関する自分用のまとめ

Vagrantfileとは

  • プロジェクトに必要なマシン種別、構成、およびプロビジョニングに関する定義を記述するファイル
  • 文法はRubyに従うものの、シンプルな変数割当のみのためRubyを知っている必要はない
  • vagrantコマンドを実行した際、実行時ディレクトリを起点として親ディレクトリにVagrantfileがないかを順にチェックしていく

(以上、公式簡易訳)

ホストとゲスト

  • ホストマシン:vagrantコマンドを実行する側のマシンのこと
  • ゲストマシン:vagrantコマンドによって、作成された仮想マシンのこと

ファイルの記述

バージョン configure

  • どのVagrantfileでも記述
Vagrantfile
Vagrant.configure("2") do |config|
 # 各種定義
end

マシン構成 vm

赤字がよく設定するだろうもの

box

  • 型:string
  • ベース環境パッケージを指定
  • Vagrant Cloudに登録されているものから選択
example
Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"         # centos
 #config.vm.box = "ubuntu/trusty64"  # ubuntu  
end

hostname

ゲストマシンのホスト名を設定

  • 型:string
  • 文字、数字、ハイフン、ドットのみ指定可能
  • ゲストの/etc/hostsファイルに書き込まれる
example
Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/xenial64"
  config.vm.hostname = "machine-A"  # machine-Aというホスト名を設定
end

box_version

boxとして利用するパッケージの指定

  • 型:string、デフォルト:>=0
  • 不等号(>=)を用いることができる

post_up_message

vagrant up完了時に表示するメッセージ

  • 型:string
  • 利用者に、開発環境コンポーネントへのアクセス方法を通知するなどの用途で使用

graceful_halt_timeout

vagrant haltが実行されてからゲストマシンを正常終了させるまでの待機秒数

  • 型:integer、デフォルト:60

synced_folder

フォルダ共有 を参照

network

ネットワーク設定 を参照

provider

プロバイダ を参照

provision

プロビジョニング を参照

プロバイダ vm.provider

仮想マシンを作成するソフトウェアの設定

  • VMWareDockerHyper-Vなどを指定可能である。本記事ではデフォルトの設定である**VirtualBoxに焦点を絞って**記述
  • 各種設定はvm.providerブロック内に記述
config.vm.provider "{PROVIDER_NAME}" do |v|
  ### このブロックに設定を記述
end

基本設定

VMの名称、CPU数、メモリーの設定は、それぞれnamecpusmemoryにて可能

config.vm.provider "virtualbox" do |v|
  v.name = "virtualMachineA"
  v.cpus = 1
  v.memory = 512   # 単位はMB
end

また、ゲストマシンはデフォルトでヘッドレスモードでの起動となるため、GUIモードで起動したい場合はguiを設定する必要がある

config.vm.provider "virtualbox" do |v|
  vbox.gui = true
end

詳細設定

より細かい設定は、VBoxManageというユーティリティを介することで設定が可能
基本構文は以下

config.vm.provider "virtualbox" do |v|
  v.customize ["{COMMAND}", :id, "{KEY}", "{VALUE}"]
end

設定可能なオプションはこちらを参照
一例として、ホスト-ゲスト間のクリップボード共有を双方向にONにしたい場合の設定は以下となる

config.vm.provider "virtualbox" do |v|
  v.customize ["modifyvm", :id, "--clipboard-mode", "bidirectional"]
end

プロビジョニング vm.provision

ソフトウェア関連のインストールを行う場合に設定

  • AnsibleChefなどのツールが利用可能
  • シェルスクリプトでの記述も可能
  • ホストからゲストへのファイル(ディレクトリ)のアップロードを行うことができる
  • 初回実行のvagrant upまたは--provisionオプションが指定された場合に実行される
  • オプション形式、ブロック形式のいずれかで記述することができる(下記)
# オプション形式
config.vm.provision "{PROVISIONER_NAME}", OPTIONS...

# ブロック形式
config.vm.provision "provisioner" "{PROVISIONER_NAME}" do |p|
  # オプション設定
end

シェルスクリプト形式 (provisioner name="shell")

大きく以下の2種類の方法に分かれる

  • シェルスクリプトファイルを別で用意し、pathにて、このファイルを参照する
config.vm.provision "shell", path: "script.sh"
  • Vagrantfile内にスクリプトを埋め込み、inlineにて実行する
# Vagrantfileの冒頭にスクリプトを記述
$install_package = <<-'SCRIPT'
sudo apt-get update
sudo apt-get -y upgrade                                                                                                                                            
SCRIPT

Vagrant.configure("2") do |config|
  ## 中略
  # inlineオプションで冒頭のスクリプトを指定
  config.vm.provision "shell", inline: $install_package
end

Ansibleの利用 (provisioner name="ansible" or "ansible_local")

大きく2種類に分かれる

  • ansible: ホストマシンにてansible-playbookを実行し、ゲストマシンをセットアップする
    • ホストマシンにansibleを実行するためのパッケージインストールが必要
  • ansible_local: ゲストマシンにてansible-playbookを直接実行
    • ホストマシンにはansibleを実行するためのパッケージインストール不要
    • ゲストマシンで実行するため、ゲストマシンにパッケージインストールが必要
    • 必要なパッケージはVagrantがよしなにインストールしてくれるよう

詳細はAnsibleを理解してから追記

フォルダ共有 vm.synced_folder

ホストマシンとゲストマシン間でフォルダを共有したい場合に設定

  • 第1引数:ホスト側の共有ディレクトリ
    • 絶対パス、相対パスのいずれも使用可能、相対パスのルートはプロジェクトのルート
  • 第2引数:ゲストマシン側の共有先ディレクトリ
    • 絶対パスで記載する必要あり
config.vm.synced_folder "src/", "/usr/service/web"

オプション

type

同期方法の指定

  • 型:string、デフォルト:nfs
  • nfsrsyncsmbが選択可能
  • 特別な理由がない限り、nfs(デフォルトなので指定なし)で問題ない
  • nfsの場合、nfs_exportnfs_versionnfs_udpの3オプションが使用可能
config.vm.synced_folder ".", "/vagrant",
  type: "nfs",
  nfs_version: 4,   # 指定しない場合のデフォルトは3
  nfs_udp: false    # デフォルトはtrue、ただし、versionが4の場合はfalseにする必要あり

mount_options

マウントするときのオプション一覧、下表またはここを参照

オプション 概要
rw 読み書き可能な状態でマウント rw
ro 読み取り専用の状態でマウント ro
dmode ディレクトリ権限を設定 dmode=700
fmode ファイル権限を設定 fmode=755
gid 所有者グループをIDで指定
groupオプションよりこちらが優先される
gid=1234
uid 所有者ユーザーをIDで指定
ownerオプションよりこちらが優先される
uid=1234
config.vm.synced_folder ".", "/vagrant",
  owner: "vagrant",
  group: "vagrant",
  mount_options: ["dmode=700", "fmode=700"]

group

同期したフォルダの所有者グループを設定

  • 型:string、デフォルト:SSHユーザー

owner

同期したフォルダの所有者を設定

  • 型:string、デフォルト:SSHユーザー

create

trueの場合、第1引数で指定したホスト側のパスが存在しない場合に作成

  • 型:boolean、デフォルト:false
  • 基本的にはホスト側にディレクトリを予め作成しておき、本オプションはfalseとすべき

ネットワーク設定 vm.network

ゲストマシンのネットワーク接続設定

  • 指定できる種別は3つで、forwarded_portprivate_networkpublic_network(public_networkは使う意図がないため、本記事では省略)
  • 複数設定したい場合は、vm.network自体を複数記載する必要がある
config.vm.network :forwarded_port, guest: 5000, host: 5000
config.vm.network :private_network, ip: "172.16.200.101"

ポートフォワード

ホストマシン、ゲストマシンのポート番号をそれぞれ指定して、ポートフォワーディングする場合に設定
以下のオプションが指定可能

オプション 概要
guest ゲスト側のポート番号、指定必須 guest: 8080
host ゲストポートへアクセスするためのホスト側のポート番号、指定必須 host: 80
id ポートフォワーディングの設定名称 id: "forwarding"
protocol 使用するプロトコル
tcpまたはudpが指定可能、デフォルトはtcp
protocol: "tcp"
# ゲストの5000番<-ホストの8080番ポート のアクセス設定、設定の名称=http
config.vm.network :forwarded_port, guest: 5000, host: 8080, id: "http"

プライベートネットワーク

公開されていないネットワーク内の設定
DHCP、固定IPアドレス指定、IPv6のいずれかが使用可能

# DHCP方式
config.vm.network "private_network", type: "dhcp"
# 固定IPアドレス方式
config.vm.network "private_network", ip: "192.168.50.4"
# IPv6方式(一例)
config.vm.network "private_network",
  ip: "fde4:8dba:82e1::c4",
  netmask: "96"

1ファイルで複数マシンの定義 (vm.define)

  • vm.define句でブロックを新たに作成し、このブロック内にそれぞれの定義を記述
Vagrant.configure("2") do |config|
  # 1台目のマシン
  config.vm.define "web-machine" do |web|
    web.vm.box = "apache"
    web.vm.hostname = "web-server"
  end

  # 2台目のマシン
  config.vm.define "db-machine" do |db|
    db.vm.box = "mysql"
  end

  # ・・・以下同様の記述で台数を増やすことができる
end

コマンド集

vagrant up

  • ゲストマシンを立ち上げる
  • 初回実行時にはprovisionも行われる
  • プロビジョニングも行いつつ立ち上げる際は--provisionまたは--provision-with {TARGET}のオプションを利用

vagrant provision

  • プロビジョニングを実行
  • ゲストマシンが立ち上がっている状態でも実行は可能

vagrant reload

  • 単純な再起動、またはVagrantfileの修正を反映させたい時に使用
  • boxそのものを変更したい場合はdestroy->upとする必要があるよう

vagrant halt

  • ゲストマシンの終了

vagrant destroy

  • ゲストマシンを破棄
  • 次回のup時はマシン構築から行うことになる

vagrant ssh {TARGET}

  • {TARGET}へsshで接続を行う
  • Vagrantfileでssh設定を行っていなくても使用できる(よしなに設定してくれる、プライベートネットワークであれば問題ない)

vagrant status

  • ゲストマシンの現在状況を表示
Current machine states:

↓defineで設定した名前     ↓現状     ↓provider
node1                     poweroff (virtualbox)
master                    poweroff (virtualbox)

vagrant validate

  • Vagrantfileの記述が正しいかをチェック
  • CIあたりで使うのがよさそう

Reference

2
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?