背景
共有の開発サーバがない環境にやってきたので、自身のPCに開発環境を用意せねばならない状況になった。
Dockerは試したことがあるが、VMというよりはプロセスを管理する感じで、本当にそれが本番サーバで動くのか不安だったこと、dockerのコマンドを覚えきれなかった。ので途中で使うのをやめた。
VMなvagrantを試してみたいと思う。
vagrantとは
VMを管理してくれるツール。virtualboxやhyper-v, VMware fusionと組み合わせて利用する。
virtualboxのインスタンスの設定ファイルを共有して、みんなで共有できるぞ。って感じみたい。
Dockerに比べて仮想化な分重い。
環境
- ホストマシン
- fedora27
- CPU: Intel(R) Core(TM) i7-7600U CPU @ 2.80GHz
- MEM: 16172360 kB
- DISK: /dev/mapper/root 230G 18G 212G 8% /
インストールするもの
VirtualBoxかVMwareか選択できるが、VirtualBoxを使う。(もともと入れてあった)
VirtualBox
ダウンロード
ダウンロードページからLinux distributions
からrpmとExtension Packをダウンロード。
インストール
DLしたrpmをインストール(Downloadsディレクトリはカタカナかも。)
$ sudo dnf install ~/Downloads/VirtualBox-5.2-5.2.2_119230_fedora26-1.x86_64.rpm
一度起動確認して、Extention Packを入れる。
$ virtualbox /home/murata/Downloads/Oracle_VM_VirtualBox_Extension_Pack-5.2.2-119230.vbox-extpack
同意の画面が出るのでそのまま入れればおk(extention packの場所はフルパスでないと見つけられないエラーが出るかもしれないので注意)
- kernel-develが入っていなかったら
$ sudo dnf install kernel-devel
からのsudo /sbin/vboxconfig
だ! - BIOS(UEFI)でsecure bootがONになっているとコケることがあるらしいぞ。
終わり。(kernelに変更が入るのでPCの再起動を忘れるな!)
Vagrant
ダウンロード
https://www.vagrantup.com/
からcentos用のrpmをDL(fedora用がないので。)
インストール
そのままDLしたものをインストール
$ sudo dnf install ~/Downloads/vagrant_2.0.1_x86_64.rpm
設定
基本的にvagrantのセットアップ方法をやっていけばおk
rubyを利用するので、入れていない人はdnf install ruby
をしておく。rbenvを使っている人はglobalをsystemにしておきましょう。
流れとしては
1. 適当にディレクトリ作って mkdir xxx
2. 適当なbox(OSイメージ)を拾いvagrant box add hashicorp/precise64
2. 初期化して vagrant init hashicorp/precise64
3. 立ち上げる vagrant up
SSHで入ろう
vagrant ssh
で入れる。
特定のディレクトリをマウントしよう
デフォルトでVM内の/vagrant
がマウントされているぞ。
追加などしたければプロジェクトディレクトリのVagrantfile
の↓を変更しよう。
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"
config.vm.synced_folder "~/workspace", "/home/vagrant/project"
amazon Linuxを使ってみよう
https://qiita.com/iwai/items/0b3ef59ab3eb87dd4646
ここに書いてあった。
まとめ
DockerやVagrantを使うものよいが、AWSに開発インスタンスをおいたほうが環境依存が少なくなるし、セットアップの手間も減るので、1円もお金を使いたくないでござる!系の人以外はAWSでサーバを構築して、プロジェクトディレクトリを分けて複数人で使うほうがよくないか?
本番がAWSならばもっとそうだ。
ファイルのsyncが辛い? いやいや、お使いのツールに変更ファイルだけrsyncしてくれる機能あるでしょ?
もしくは ionotifywaitとrsyncを組み合わせて特定のディレクトリ配下に変更があったらrsyncぶっこむってできますよ。
DockerやVagrantになぜここまでニーズがあるか未だにわからん。
vagrant コマンド
よく使うコマンドをまとめ。
vagrant global-status
各インスタンスの状態が見れる。
$ vagrant global-status
id name provider state directory
-------------------------------------------------------------------------
c1333e5 default virtualbox running /home/murata/vagrant_getting_started
vagrant halt [id]
シャットダウン
$ vagrant halt c1333e5
==> default: Attempting graceful shutdown of VM...
$ vagrant up [id]
起動
$ vagrant up c1333e5
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'hashicorp/precise64' 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
$ vagrant reload [id]
対象の設定ファイル (Vagrantfile
) を編集したあとに読み込ませる。マウントポイントやポートフォワードを変更したときに行うことが多い。
$ vagrant package [id] --output [filename]
作ったイメージをファイルにしておくのに使う。filenameは~/workspace/xxxx.box
って感じ。設定ファイル(Vagrantfile
)はコピーされないのでご注意。
vagrant box系
$ vagrant box list
登録されているインスタンスのリストを表示。
╰─$ vagrant box list
hashicorp/precise64 (virtualbox, 1.1.0)
xxxxxxx (virtualbox, 0)
mvbcoding/awslinux (virtualbox, 2017.03.0.20170401)
$ vagrant box add [box名]
vagrantにイメージを登録する。
box名はpackage でローカルにあるファイルの場合はそれを指定。
ネット上のものであればurlを。(https://app.vagrantup.com/boxes/search)