[Vagrant] Windows 10で複数の仮想環境をVagrantで立ち上げる

linuxサーバー構築標準教科書をWindows10上で学習するため、Vagrantで仮想環境を作成した時のメモです。

この教科書の想定している実習環境は、講師と受講生2名で計3名、それぞれマシンが1台と想定されているので、一つのPCの上に仮想マシンを3台立ち上げます。

また、実習環境では、CentOSのバージョン6.2が利用されていますが、ここでは、バージョン6.7をインストールしています。

VirtualBox

インストールしていない場合はインストールします。

VirtualBox.org

Vagrant

インストールしていない場合はインストールします。

Vagrant

Vagrantの操作については、下記に目を通しておきます。

【まとめ】Vagrant コマンド一覧

学習用のフォルダの作成

学習用のvagrantを展開するフォルダを作成します。

ここでは、cドライブ直下に、three_vms作成しています。

C:\Users\user>cd C:\
C:\>mkdir three_vms
C:\>cd three_vms

Vagrantの初期化

vagrantのinitコマンドを実行します。

C:\three_vms>vagrant init bento/centos-6.7

C:\three_vmsVagrantfileが作成されます。

Vagarntfileの編集

エラーが出る部分があるので、変更している箇所がありますが、基本的には下記のスクリプトを利用させていただきました。

Vagrantで複数の仮想マシンを立ち上げる マルチマシン(Malti-Machine)設定

ちなみに、Vagrantfileはrubyで書かれているので、rubyをあまり知らない(私の)場合は、さらっと下記を眺めさせていただきました。

[Ruby入門] 連載目次

C:\three_vmsVagrantfileをエディタで開き、下記のように編集します。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "bento/centos-6.7"
  config.vm.box_url = "https://app.vagrantup.com/bento/boxes/centos-6.7"

  # 1台目管理マシン(マシン名:teacher)
  config.vm.define "teacher" do |centos|
     centos.vm.hostname = "teacher.centoshost"
     # 共有フォルダを3つのマシンで共有されると困るので使わない。
     centos.vm.synced_folder ".", "/vagrant", disabled: true
     # "forwarded_port"を指定でhostの2222ポートへのアクセスがguestの22ポートへ転送。
     centos.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2222
     # "private_network"を指定しホストOSからのみアクセス可。
     # "virtualbox__intnet"オプションでprivate networkをvirtualboxのinternal networkに指定。
     centos.vm.network "private_network", ip: "192.168.33.10", virtualbox__intnet: "intra"
  end
  # 2台目 マシン名:sutudent1
  config.vm.define "sutudent1" do |centos|
     centos.vm.hostname = "sutudent1.centoshost"
     centos.vm.synced_folder ".", "/vagrant", disabled: true
     centos.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2223
     centos.vm.network "private_network", ip: "192.168.33.101", virtualbox__intnet: "intra"
  end
  # 3台目 マシン名:student2
  config.vm.define "student2" do |centos|
     centos.vm.hostname = "student2.centoshost"
     centos.vm.synced_folder ".", "/vagrant", disabled: true
     centos.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2224
     centos.vm.network "private_network", ip: "192.168.33.102", virtualbox__intnet: "intra"
  end
end

仮想マシンの起動

仮想マシンを起動します。

C:\three_vms>vagrant up

時間がかかりますが、3台の仮想マシンが起動し、それぞれが通信可能な状態となります。

まずは、vagrant sshteacherにログインして、pingを打ってみます。

C:\three_vms>vagrant ssh teacher
[vagrant@teacher ~]$ ping -c 4 192.168.33.101
PING 192.168.33.101 (192.168.33.101) 56(84) bytes of data.
64 bytes from 192.168.33.101: icmp_seq=1 ttl=64 time=2.01 ms
64 bytes from 192.168.33.101: icmp_seq=2 ttl=64 time=1.15 ms
64 bytes from 192.168.33.101: icmp_seq=3 ttl=64 time=1.11 ms
64 bytes from 192.168.33.101: icmp_seq=4 ttl=64 time=1.06 ms

--- 192.168.33.101 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3007ms
rtt min/avg/max/mdev = 1.066/1.335/2.012/0.394 ms

sshでログインできるようにする

いつの間にか、コマンドプロンプトがsshコマンドでssh接続ができるように進化していたので、その設定をします。

ssh-configコマンドでsshの設定を確認します。表示されたHost以降をテキストエディタにコピペしておきます。

[vagrant@teacher ~]$ exit
logout
Connection to 127.0.0.1 closed.
c:\three_vms>vagrant ssh-config
Host teacher
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile c:/three_vm/.vagrant/machines/master/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

Host student1
  HostName 127.0.0.1
  User vagrant
  Port 2223
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile c:/three_vm/.vagrant/machines/node01/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

Host sutudent2
  HostName 127.0.0.1
  User vagrant
  Port 2224
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile c:/three_vm/.vagrant/machines/node02/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

sshの設定を保存します。C:\Users\user\.ssh、つまり自分のホームフォルダ直下の.sshというフォルダに空のconfigファイルを作成します。

c:\three_vms> cd %homedrive%%homepath%\.ssh
C:\Users\user\.ssh>
type nul > config

このconfigファイルをエディタで開いて、先ほどコピペしたHost以降の内容を貼り付け、保存します。

これで、コマンドプロンプトから、vagrant sshではなく、sshコマンドで仮想マシンに接続できるようになりました。試しに、別のコマンドプロンプトを2つ開いて、それぞれ接続してみます。

C:\Users\user>ssh teacher
[vagrant@teacher ~]$

C:\Users\user>ssh student1
[vagrant@sutudent1 ~]$

接続できました。

接続が確認できたので、仮想マシンを停止しておきます。

c:\three_vms>vagrant halt