Open hysryt opened 6 years ago
$ vagrant plugin install vagrant-vbguest
Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
Fetching: vagrant-share-1.1.9.gem (100%)
Fetching: micromachine-2.0.0.gem (100%)
Fetching: vagrant-vbguest-0.15.0.gem (100%)
Installed the plugin 'vagrant-vbguest (0.15.0)'!
$ vagrant vbguest
Complete!
Copy iso file /Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAdditions.iso into the box /tmp/VBoxGuestAdditions.iso
Mounting Virtualbox Guest Additions ISO to: /mnt
mount: /dev/loop0 is write-protected, mounting read-only
Installing Virtualbox Guest Additions 5.2.4 - guest version is unknown
Verifying archive integrity... All good.
Uncompressing VirtualBox 5.2.4 Guest Additions for Linux........
VirtualBox Guest Additions installer
Copying additional installer modules ...
Installing additional modules ...
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel modules.
VirtualBox Guest Additions: Starting.
Redirecting to /bin/systemctl start vboxadd.service
Redirecting to /bin/systemctl start vboxadd-service.service
Unmounting Virtualbox Guest Additions ISO from: /mnt
$ vagrant vbguest --status
[default] GuestAdditions 5.2.4 running --- OK.
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'centos/7' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 (guest) => 2222 (host) (adapter 1)
==> 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!
[default] GuestAdditions 5.2.4 running --- OK.
==> default: Checking for guest additions in VM...
==> default: Rsyncing folder: /Users/user/Desktop/vagrant/ => /vagrant
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.
$ vagrant plugin uninstall vagrant-vbguest
ホストOSとゲストOSでファイルやディレクトリを同期する
Vagrant.configure("2") do |config|
config.vm.synced_folder "./hostfoo", "/foo"
end
synced_folder
で指定
第一引数はホストOS側のパス
第二引数はゲストOS側のパス
ホストのポートとゲストのポートを紐づける
Vagrant.configure("2") do |config|
config.vm.network "forwarded_port", guest:80, host:8080
end
ホストの8080ポートへのアクセスをゲストの80ポートへフォワーディングする。
第一引数は文字列の"forwarded_port"
か、またはシンボルの:forwarded_port
OSに各種ソフトウェア(apacheなど)をインストールすることをプロビジョンと呼ぶ。 Vagrantではプロビジョンを自動化できる。
Vagrant.configure("2") do |config|
config.vm.network "forwarded_port", guest:80, host:8080
config.vm.provision "shell", path:"provision.sh"
end
自動プロビジョンにはconfig.vm.provision
を使用する。
シェルで行う場合は第一引数に"shell"
を指定する。
第二引数はシェルスクリプトのパス
プロジェクトのディレクトリからの相対パス。
この場合はVagrantfileと同じ位置。
#!/usr/bin/env bash
echo "Installing Apache and setting it up..."
apt-get update >/dev/null 2>&1
echo "apt-get install -y"
apt-get install -y apache2 >/dev/null 2>&1
echo "rm -rf /var/www"
rm -rf /var/www
echo "ln -fs /vagrant /var/www"
ln -fs /vagrant /var/www
root
で実行されるため、sudo
は必要ないapt-get
の出力を全て>/dev/null 2>&1
で表示しない-y
オプションをつけて自動化vagrant up
時にシェルスクリプトの内容が実行される
$ vagrant up
...
default: Installing Apache and setting it up...
default: apt-get install -y
default: rm -rf /var/www
default: ln -fs /vagrant /var/www
https://www.vagrantup.com/docs/networking/
SSH用に必ず一つNATのネットワークアダプタeth0
が作成される。
ポートフォワーディングを設定するとこのアダプタに適用される。
プロバイダーがVirtualboxの場合は、8つまでネットワークアダプタを作成できる。
NATの場合、ホストOSからはホストOSのIPアドレスからのポートフォワーディングでしかアクセスできない。 プライベートネットワークの場合、ホストOS側にもネットワークアダプタが追加されるため、指定したIPアドレスでアクセスできる。
Vagrant.configure("2") do |config|
config.vm.network "private_network", ip:"192.168.33.10"
end
プライベートネットワークはホストOSとゲストOSのみが接続されたネットワーク ホストOSとゲストOSの両方にネットワークアダプタが追加される
Vagrant.configure("2") do |config|
config.vm.network "public_network"
end
ゲストOSを、ホストOSが接続しているネットワークに接続する。 同じネットワーク内の他のPCからもゲストOSにアクセスできる。 他のPCと同じように、DHCPでIPアドレスを取得する
一つのVagrantfileから複数のマシンの設定を行う事ができる
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/xenial64"
config.vm.define "web" do |web|
# 1台目の設定
end
config.vm.define "db" do |db|
# 2台目の設定
end
end
"web"
と"db"
は各マシンに名付けた名前なので自由に変更可。
ネットワークは何も指定しない場合はNAT
となり、それぞれのマシンは独立したネットワークに繋がる。
そのためNAT
ではお互いに通信はできない。
各マシンをプライベートネットワークに接続すればお互い通信できるようになる。
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/xenial64"
config.vm.define "web" do |web|
web.vm.network "private_network", ip:"192.168.33.10"
end
config.vm.define "db" do |db|
db.vm.network "private_network", ip:"192.168.33.11"
end
end
マシンweb
には192.168.33.10
、マシンdb
には192.168.33.11
を設定する。
ホストOSには自動的に192.168.33.1
のネットワークアダプタが作成される。
Vagrantはネットワーク部を255.255.255.0
で判断するため、全て同じネットワーク下にあることになる。
ホストOS側のネットワークアダプタはネットワークごとに作成される。
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/xenial64"
config.vm.define "web" do |web|
web.vm.network "private_network", ip:"192.168.33.10" # 192.168.33.0/24
end
config.vm.define "db" do |db|
db.vm.network "private_network", ip:"192.168.34.10" # 192.168.34.0/24
end
end
上のようにゲストOSにお互い別々のネットワーク(192.168.33.0/24
と192.168.34.0/24
)を設定した場合、ホストOSには192.168.33.1
と192.168.34.1
が設定された二つのネットワークアダプタが作成される。
ゲストOSは別々のネットワークに存在するものの、ホストOSを介してお互い通信することはできる。
ゲストOSにMySQLをインストールし、別ゲストOSからアクセス
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/xenial64"
config.vm.define "web" do |web|
web.vm.provision :shell, path:"web_provision.sh"
web.vm.network "private_network", ip:"192.168.33.10"
end
config.vm.define "db" do |db|
db.vm.provision :shell, path:"db_provision.sh"
db.vm.network "private_network", ip:"192.168.33.11"
end
end
apt-get update
apt-get install -y mysql-client
127.0.0.1
から192.168.33.11
に変更export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y mysql-server
sed -i -e 's/127.0.0.1/192.168.33.11/' /etc/mysql/mysql.conf.d/mysqld.cnf
systemctl restart mysql
mysql -uroot <<< "GRANT ALL ON *.* TO testuser@'%' identified by 'password'; FLUSH PRIVILEGES;"
$ vagrant up
$ vagrant ssh web
ubuntu@ubuntu-xenial:~$ mysql -utestuser -h192.168.33.11 -p
Enter password: password
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.20-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
プロビジョンを行った後でも IP アドレスは Vagrantfile.xml を変更すればいい。 VCCW を使っている場合は site.xml の IP アドレスを変更する。
https://app.vagrantup.com/ubuntu/boxes/xenial64
$ vagrant init ubuntu/xenial64
$ vagrant up
vagrant halt
や vagrant up
なんかをトリガーにしてスクリプトを実行できる機能らしい。
スクリプトの実行はホスト側とゲスト側のどちらでも指定可能。
# vagrant up 後に apache を起動
Vagrant.configure("2") do |config|
config.trigger.after :up do
run_remote "service apache2 start"
end
end
https://www.vagrantup.com/docs/cli/plugin.html#local-1 https://www.vagrantup.com/docs/vagrantfile/vagrant_settings.html
インストール時に --local
フラグをつけるか、
$ vagrant plugin install vagrant-cool-plugin --local
Vagrantfile の config.vagrant.plugins
に指定することで可能とのこと
Vagrant.configure("2") do |config|
config.vagrant.plugins = "vagrant-cool-plugin"
end
--force
フラグを追加Vagrant.version?
ヘルパメソッド追加vagrant cloud
サブコマンド追加
CLI から Vagrant Cloud 関連の操作ができるようになった。
https://www.vagrantup.com/docs/cli/cloud.htmlvagrant upload
サブコマンド追加
https://www.vagrantup.com/docs/cli/upload.htmlvagrant winrm
サブコマンド追加
https://www.vagrantup.com/docs/cli/winrm.htmlvagrant winrm-config
サブコマンド追加
https://www.vagrantup.com/docs/cli/winrm_config.htmldefault_nic_type
の実装を更新し、警告を追加
インストール
Virtualboxのインストール
Vagrantのインストール
環境作成
CentOSの環境を作成
https://app.vagrantup.com/centos/boxes/7
ホストOSの2222ポートがゲストOSの22ポートにフォワーディングされる
SSH接続
仮想マシンのターミナルに移動する