【連載01】106.VagrantBoxの初期化から複数サーバ起動までの一般的な流れ

<b><font color="#ff6633">当記事はケーススタディの連載となっています。目次は[【こちら】](http://qiita.com/CsFactoryitter/items/6b8308b96afafd61ce5f
)です。</font></b>
<b><font color="#ff6633">最新のソースコードは[【GitHub】](https://github.com/csfactorygihubblog001/blogvagrant)で公開中です。</font></b>

今回はVagrantの基本的な操作の流れをかいつまんで説明します。
文章だけでは分かり辛いので、下のフローチャートをあわせて参照ください。

##前提条件
[前回](http://qiita.com/CsFactoryitter/items/60b65ae685a3ea4ee16f)までの記事の内容が完了している。
Vagrantfileのパスは「d:\\_BLOG\BG001\vagrant_box」とする。
boxファイルが作成済みである。
![Vagrant操作フロー](https://qiita-image-store.s3.amazonaws.com/0/98085/7b88f369-d22c-549c-1a7e-5a525d82f8b5.png)

##01.VagrantBoxにサーバを追加

###1-1.VagrantfileのDIRに移動

```bat:
cd D:\_BLOG\BG001\vagrant_box
```

###1-2.Vagrantに[boxを追加](http://qiita.com/CsFactoryitter/items/d4d16f6fcd328c97ebc8#1box-add)
Vagrantにbox名とboxのベースになるboxファイルを指定する。
${boxファイル名}のboxからvmイメージが生成される。

書式：
><b>vagrant box add \${box名} ${boxファイル名}</b>


例：

```bat:
vagrant box add adminserv01 basebox.box
```

必要に応じて複数のVagrantファイルを作成する。

###1-3.boxファイルの[登録を確認](http://qiita.com/CsFactoryitter/items/d4d16f6fcd328c97ebc8#2box-list)
※Vagrantに登録されているboxの一覧を表示する。

書式：
><b>vagrant box list</b>

##02.boxファイルの削除
※どこのDIRでも実行可
※削除するbox名は1-3.の「box list」で確認

書式：
><b>vagrant box remove \${削除するbox名}</b>


##03.Vagrantfileの作成

VagrantはVagrantfile（＝boxファイルのinitファイル）の設定を見て起動する。

###3-1.[initの実行](http://qiita.com/CsFactoryitter/items/c3a5a23a38cf44ffdc40)
一度のみ実行する。(Vagrantfileが既にある場合は作成不要）
以下のコマンドで実行後カレントフォルダに「Vagrantfile」というファイルが作成される。

書式：
><b>vagrant init \${boxファイル名}</b>


##04a.Vagrantfileの修正(ベースとなるboxファイルを指定して起動する場合)
複数サーバの起動用にVagrantfileを修正する。
※ここでは「baseserv」を指定して起動する場合の設定

###4a-1.Vagrantfileを開く

```bash:
vi vagrantfile
```

###4a-2.以下の通り修正

```bash:vagrantfile
Vagrant.configure(2) do |config|

#ベース
    config.vm.box = "baseserv"


# == ▼▼▼複数のサーバの設定▼▼▼== 

    # adminserv01の設定(baseservのboxから作成)
    config.vm.define :adminserv01 do |adminserv01|

        # HOST名とVirtualBoxのホストオンリーネットワークのNICを追加
        adminserv01.vm.hostname = "adminserv01"
        adminserv01.vm.network :private_network, ip:"192.168.102.11"

        # 起動時にVirtualBoxのGUI画面を表示する/メモリは1024を指定
        adminserv01.vm.provider "virtualbox" do |vb|
            vb.gui = true
            vb.memory = "1024"
        end
    end

    # apserv01の設定(baseservのboxから作成)
    config.vm.define :apserv01 do |apserv01|
        apserv01.vm.hostname = "apserv01"
        apserv01.vm.network :private_network, ip:"192.168.102.12"
        apserv01.vm.provider "virtualbox" do |vb|
            vb.gui = true
            vb.memory = "1024"
        end
    end

    # dbserv01の設定(baseservのboxから作成)
    config.vm.define :dbserv01 do |dbserv01|
        dbserv01.vm.hostname = "dbserv01"
        dbserv01.vm.network :private_network, ip:"192.168.102.13"
        dbserv01.vm.provider "virtualbox" do |vb|
            vb.gui = true
            vb.memory = "1024"
        end
    end

# == ▲▲▲複数のサーバの設定▲▲▲== 
end
```

##04b.Vagrantfileの修正(それぞれのboxファイルを指定して起動する場合)
複数サーバの起動用にVagrantfileを修正する。

###4b-1.Vagrantfileを開く

```bash:
vi vagrantfile
```

###4b-2.以下の通り修正

```bash:vagrantfile
Vagrant.configure(2) do |config|
 
    # ここはコメント化する
    # config.vm.box = "manageterm"
 
    # *************** １：アプリケーションサーバ用 ***************
    config.vm.define :apserv01 do |apserv01|
        apserv01.vm.box = "apserv01"
        
        # ホスト名の指定
        apserv01.vm.hostname = "apserv01"
        
        # ネットワークのタイプをDHCPではなくstaticにする。
        # ネットワークの設定(ホストとゲスト間のプライベートネットワーク（不要ならコメント)
        apserv01.vm.network "private_network", ip: '192.168.134.196'
    
        # ネットワークの設定(ホストと同じセグメントのネットワークに入る設定)
        apserv01.vm.network "public_network", ip: '192.168.102.196'
        apserv01.vm.provider "virtualbox" do |vb|
            #VirtualBoxが起動している時にGUIで表示する
            vb.gui = true
            #メモリを1Gに設定
            vb.memory = "1024"
        end
    end
 
    # *************** ２：ＤＢサーバ用(IPアドレスとconfigの変数名のみ変更) ***************
    config.vm.define :dbserv01 do |dbserv01|
        dbserv01.vm.box = "dbserv01"
        dbserv01.vm.hostname = "dbserv01"
        dbserv01.vm.network "private_network", ip: '192.168.134.197'
        dbserv01.vm.network "public_network", ip: '192.168.102.197'
        dbserv01.vm.provider "virtualbox" do |vb|
            vb.gui = true
            vb.memory = "1024"
        end
    end
 
    # *************** ３：管理サーバ用 IPアドレスとconfigの変数名のみ変更***************
    config.vm.define :adminserv01 do |adminserv01|
        adminserv01.vm.box = "adminserv01"
        adminserv01.vm.hostname = "adminserv01"
        adminserv01.vm.network "private_network", ip: '192.168.134.198'
        adminserv01.vm.network "public_network", ip: '192.168.102.198'
        adminserv01.vm.provider "virtualbox" do |vb|
            vb.gui = true
            vb.memory = "1024"
        end
    end

    # *************** ４：元々設定してたmanagetermも複数起動に際し変更 ***************
    config.vm.define :manageterm do |manageterm|
        manageterm.vm.box = "manageterm"
        manageterm.vm.hostname = "manageterm"
        manageterm.vm.network "private_network", ip: '192.168.134.195'
        manageterm.vm.network "public_network", ip: '192.168.102.195'
        manageterm.vm.provider "virtualbox" do |vb|
            vb.gui = true
            vb.memory = "1024"
        end
    end
end
```


##05a.Vagrantの起動

###5a-1.VagrantfileのDIRに移動

```bat:
cd D:\_BLOG\BG001\vagrant_box
```

###5a-2.[Vagrantを起動](http://qiita.com/CsFactoryitter/items/364bfeb65700cf3db8a4)

```bat:
vagrant up
```


##05b.Vagrantの起動（Vagrantfileに複数boxの設定がある場合）
※名前を指定して特定のbox（サーバ）を起動するパターン

###5b-1.VagrantfileのDIRに移動

```bat:
cd D:\_BLOG\BG001\vagrant_box
```

###5b-2.[Vagrantを起動](http://qiita.com/CsFactoryitter/items/364bfeb65700cf3db8a4)(box内サーバ名を指定)

書式：
><b>vagrant up \${box内サーバ名}</b>


例：「adminserv01」を起動

```bat:
vagrant up adminserv01
```


##06a.Vagrantを使用して起動したboxの終了

###6a-1.VagrantfileのDIRに移動

```bat:
cd D:\_BLOG\BG001\vagrant_box
```

###6a-2.[Vagrantを終了](http://qiita.com/CsFactoryitter/items/ba9e93da68692bf852be)

```bat:
vagrant halt
```

##06b.Vagrantを使用して起動したboxの終了（Vagrantfileに複数boxの設定がある場合）
※名前を指定して特定のbox（サーバ）を終了するパターン

###6b-1.VagrantfileのDIRに移動

```bat:
cd D:\_BLOG\BG001\vagrant_box
```

###6b-2.[Vagrantを終了](http://qiita.com/CsFactoryitter/items/ba9e93da68692bf852be)(box内サーバ名を指定)

書式：
><b>vagrant halt \${box内サーバ名}</b>


例：「adminserv01」を終了

```bat:
vagrant halt adminserv01
```

##07.Vagrantで作成したVirtualBox仮想マシンの削除
<u>※VirtualBox自体のファイルが削除される。

###7-1.VagrantfileのDIRに移動

```bat:
cd D:\_BLOG\BG001\vagrant_box
```

###02.[仮想マシンを削除](http://qiita.com/CsFactoryitter/items/a3d6da6052d5a0025849)(box内サーバ名を指定)

書式：
><b>vagrant destroy ${box内サーバ名}</b>


例：「adminserv01」を削除

```ps1:
vagrant destroy adminserv01
```

##08.VagrantBoxからVirtualBox仮想マシンを破棄
※VirtualBox自体のファイルは削除されず、Vagrantのbox管理外という扱いとなる。

###8-1.VagrantfileのDIRに移動

```bat:
cd D:\_BLOG\BG001\vagrant_box
```

###8-2.仮想マシンを破棄(box内サーバ名を指定)

書式：
><b>vagrant remove \${box内サーバ名}</b>


例：「adminserv01」を破棄

```bat:
vagrant box remove adminserv01
```

##09.構築したサーバをVagrantBoxファイルとして保存

###9-1.VagrantfileのDIRに移動

```bat:
cd D:\_BLOG\BG001\vagrant_box
```

###9-2.boxファイルとしてパッケージングする

書式：
><b>vagrant package \${BOX内サーバ名} --output ${出力パス}</b>

 
例：「adminserv01」をパッケージング

```bat:
vagrant package adminserv01 --output d:\_BLOG\BG001_vagrant_boxfiles\adminserv01.box
```

次回は「[最小構成CentOS7からAnsible実行可能な操作用CentOS7を作成する（On Vagrant）](http://qiita.com/CsFactoryitter/items/ab7e749169c79672bef1)」について。

<b><font color="#ff6633">連載の目次は[【こちら】](http://qiita.com/CsFactoryitter/items/6b8308b96afafd61ce5f
)です。</font></b>