Vagrant & Dockerによる

イマドキの開発環境構築
Japan System Laboratory 

GEEKLAB.NAGANO
Yuichi Nakazawa
本日の話題
• イマドキの開発環境事情
• Vagrant/Dockerとは
• 両者の使いわけ
• おまけ(構成管理ツールについて)
本日のゴール
Vagrant&Dockerに

興味を持って頂くこと
https://goo.gl/Nvc6yw
デモ用URL
イマドキの開発環境事情
皆さん、ご経験ないですか??
開発サーバーでは問題無いの
に本番サーバーで動かない
Aさんの環境と自分の環境

で挙動が違う
・バージョン違い
・環境の違い

 設定ファイル

 環境パス

 ディレクトリ構成等
原因
サーバー移行に伴う

度重なるセットアップ
同じサーバー構成を作りたい
けど、時間がない。

というか、面倒くさい!!
Infracture as code
そんな時に使うのが

Vagrant であり Dockerです
Vagrant&Dockerを
ざっくり言うと
コマンド一発でホストマシンに依存せず
に、開発環境やテスト環境を構築できる
ツール
Vagrant&Dockerを
ざっくり言うと2
カスタマイズしたLAMP環境を好きな時に

コマンド一発で起動できる
登場した背景
•多様化する開発スタイル
•オンプレからクラウド

Vagrant
•公式HP:https://www.vagrantup.com
•仮想環境構築ツール 2012年 V1.0 2017年2月 現在:V1.9.1
•MITライセンス(= タダ)
•指定したプロバイダ(デフォルトは、VirtualBox(Oracle))に対して

指定したBox(OSイメージ)の環境を何度でも、どのホストOSでも
同じ環境
•ホストOS型の仮想環境構築を支援

(Vagrantというより、プロバイダの特性)

Vagrant
$ vagrant up
起動はコマンド一発
Vagrantの構成
ホストOS型
ハードウェア
ホストOS
仮想化ソフト(VirtualBox等)
ゲストOS
仮想環境
ゲストOS
•ホストPC(OS)上に仮想化ソフトをインストールし、
そのソフト上でゲストOSを動作させる
•比較的導入が容易
•H/WへのアクセスはホストOSを経由 = オーバーヘッド
になりやすい(後述するコンテナ型と比較した場合)

ホストOS型の特徴
•ホストOS型の仮想環境をいくつも簡単

に起動できる
•何度でも壊せる = 色々試せる

•複数の開発者間で同様の環境を共有できる
Vagrantの特徴
•VirtualBox
•VMWare(Fusion)
•Hyper-V
•Docker
•Amazon EC2
プロバイダはアドオンで

変更可能
1. $ vagrant box add [box名]
BOXの登録
2. $ vagrant init 

環境立ち上げたい場所で
3. $ vagrant up 

環境立ち上げ
Vagrant環境構築手順
Vagrant その他のコマンド例
$ vagrant halt 

・・ 停止
$ vagrant reload 

・・ 再起動
$ vagrant ssh
・・ SSH接続
Vagrant その他のコマンド例
$ vagrant destroy 

・・ VMイメージを消す
$ vagrant box remove [box名] 

・・ BOXを消す
・ruby形式のフォーマット
・以下のような設定ができます。
ネットワーク設定

共有フォルダの設定、
プロビジョニングの設定
etc・・
Vagrantfile
Vagrantfileイメージ
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = "centos67"
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.synced_folder "../data", "/vagrant_data"
end
Vagrant メリット
• VagrantFileを共有することにより

エンジニア間で環境を共有できる。
•とはいえ、個々でカスタマイズは可。

(Vim派/Emacs派、bash/zsh、各種環境設定等)
→ VMツールで立ち上げることは変わらないので
Vagrant デメリット
• VMイメージが貯まる

→ ストレージを圧迫する

(使い捨てることで解決可)
• 起動が遅い(個人的感想)

→ VMで立ち上げることは変わらないので
•公式HP:https://www.docker.com
•Apache License2.0(= タダ)
•コンテナ型の仮想環境構築

(Javaのコンテナとは別もの)
•初期は、Linux上での構築しか出来なかった。

Docker
$ docker run
起動はコマンド一発
コンテナ型(Docker)
ハードウェア
ホストOS(Linux)
Dockerエンジン
ゲストOS
コンテナ
ゲストOS
コンテナ
•ホストOSの1プロセスとして起動する 

→ オーバーヘッドが少ない
•OS(カーネル)をホストOSと共有するため、
VMごとにOSインストールをする必要はない

→ 起動/動作が早い
コンテナ型の特徴
•Dockerサーバー

・・コンテナ実行
•Dockerクライント

・・Dockerコマンド

Dockerエンジンの構成
•開発向け
•運用向け

 ①効率的なデプロイ

 ②マイクロサービス
Dockerの用途
•軽量
•携帯性
•揮発性

(基本的にはLinuxカーネルに構築)
Dockerの特徴
•カーネル共有によりコンテナサイズを

抑えられる
•デバイスI/Oのエミュレートが

不要のため高速化が可能

→オーバーヘッドが少ない
•提供されるDockerイメージも必要最低限
•原則的に1コンテナ1プロセス
Dockerの特徴 - 軽量
•Dockerイメージをそのまま
他のホストOSへ
•Dockerfile元に他のホスト
OSで新規に立ち上げ
Dockerの特徴 - 携帯性
•コミットしない限り、

作業内容は保持されない・・
Dockerの特徴 - 揮発性
Docker導入方法
•Docker(各OSの仮想環境)
•Kitematic(GUI。VirtualBox)
•Docker Tools

(Linux以外に構築する場合)
•読み方:カイトマティック

•VirtualBox上に自動でCore Linuxを

インストールしその環境でコンテナを起動

する(VirtualBoxが無くてこちらも勝手にやってくれ
る)。
•GUI上ではコミットはできない・・。コンテナ生成は可
•コンテナイメージは、「Docker Hub」から取得

Kitematic
Kitematic
VirtualBox
•Window(64bit) / OS X向けの

インストーラー
•VirtualBox上に構築(含まれる)
•Kitematic も含まれる
Docker Toolbox
•基本は、Docker ToolBox
•Hyper-V上に構築

(VirtualBoxとの共存できない)
•Win10 64bitでないとダメ
Docker For Windows
•基本は、Docker ToolBox
•HyperKit上に構築(OSX 10.10+)
•インストール位置がToolBox

と異なる

https://docs.docker.com/docker-for-mac/
docker-toolbox/

Docker For Mac
• 起動が早い
• 軽量
• オーバーヘッドが少ない
Docker メリット
• コミットを忘れるとツライ→作業
したものがご破産に
• 全部入りのイメージが少ないので、
開発環境を えるまでに、Vagrant
比べ時間が掛かる(個人的主観)
Docker デメリット
Vagrant / Docker使い分け
• 開発環境 

・・ Vagrant
• 動作検証 (新OSやサービスの検証)

・・ Docker / Vagrant
• 本番運用(Dockerイメージをデプロイ)

・・Docker
まとめ
• Vagrant / Docker似てるようで、まるで違う。

(簡易的なコマンドで制御できるのは一緒)
• Vagrant / Dockerそれぞれ一長一短なので用途によって

使いわけましょう。
• 類似ツールが多いので、選定をちゃんとしないと環境
が余計混乱してしまう可能性も。

• 確実に生産性と保守性はあがります。
おまけ
Infracture as code
構成管理ツール
•環境構成を決まったシナリオに従って
インストールや環境構築をしてくれる

•冪等性がある(何度流しても同じ結果
になる)。
ざっくりいうと
$ yum install nginx
$ chkconfig nginx on
$ sudo nginx start
ざっくりいうと、これが
これになります。

exp.) Ansible のplaybook
- name: install nginx
yum: name=nginx state=present
- name: set auto start nginx
command: chkconfig nginx on
- name: restart nginx
command: service nginx restart
•Ansible
•chef
•puppet
メジャーなもの
•エージェントレス
•サーバーはPython2.6+

クライアントは、Python2.5
•設定ファイルがシンプル

(主なファイルは2つ程度)
Ansible
•同じ環境を何度も立てたい場合に

使えます。(開発、ステージング、本番)
•設定ファイルに変数を指定できる。
•Vagrant/Dockerにも設定ファイルは

ありますが、ツールに依存してしまう。
まとめ
さいごに
•インフラエンジニアでなくても手軽にインフラ構築

ができます。 

→ インフラエンジニア不要説

→ 明日は我が身かも・・・
•自動構成や構成管理ツールで楽出来る?? 

→ 基本が大事(銀の弾丸ではない)

Vagrant & Dockerによるイマドキの開発環境構築