Copyright © 2013 NTT DATA Corporation
"Up" with Vagrant and Docker
Hiroshi Miura(@miurahr)
NTTデータ
基盤システム事業本部
Docker Meetup
Tokyo 2014 #1
2Copyright © 2013 NTT DATA Corporation
Disclaimer
● Any product name, service name, software name and other marks a
re trade mark or registered mark of corresponding companies.
● This presentation is in a purpose of providing current information on
emerging technologies and there is no grantee of correctness and/o
r persistence of features in any future.
● A presenter and NTT Data Corporation provide information in as-is b
asis and have no responsiveness for results that you got according
to information in this presentation material.
3Copyright © 2013 NTT DATA Corporation
4Copyright © 2013 NTT DATA Corporation
Introduction to Vagrant
Vagrantのご紹介
vagrantup.com
5Copyright © 2013 NTT DATA Corporation
What is Vagrant
● 開発環境を仮想マシンやコンテナ、クラウドに作成
● 商用環境とできるだけ同一の環境をつくることを優先
● アプリ・リポジトリに設定がおいてあることがおおい
● Mitchell Hashimoto氏が作者
● Rubyで書かれている
● 基本はOracleVM VirtualBoxとAWS EC2
● 有償オプションで、VMWare Fusion
6Copyright © 2013 NTT DATA Corporation
Vagrant Users
● 今までの典型的なVagrantユーザ像
– Webデベロッパー
– MacBook AirかMacBook Pro利用者が多い
– VirtualBoxでUbuntu利用が多い
– 提供先はAWSやVPS上へホスト
– Ruby/RoR使いが多い
– Github利用者が多い
7Copyright © 2013 NTT DATA Corporation
Vagrant Users
● 新しいタイプのユーザ
– インフラエンジニア
– RHEL, CentOSまたはWindows利用者
– vCenter, OpenStack等をデプロイ
– Puppet, Chef, またはAnsible使い
– OpenFlowに興味
8Copyright © 2013 NTT DATA Corporation
Vagrant Plugins
● Vagrant 1.1+からプラグイン可能となる(2013.2〜)
– Provider: 仮想マシン等ドライブの提供
– Provisioner: ゲスト設定方法の提供
– host/guest: OSサポート
– Synced_folder: フォルダ同期方法の提供
● Vagrant 1.4からDocker provisionerが標準提供 
9Copyright © 2013 NTT DATA Corporation
Vagrant provisioner
● Shell, Puppet, Chefでの設定が標準で可能
● Puppet: スタンドアロン、Client/Server可
– スタンドアロンでは以下にマウント
● /tmp/puppet-manifest
● /tmp/puppet-modules
● Chef: Chef-solo, Client/Server可
● Shell: インライン、外部シェル可能
● Salt, Docker...
10Copyright © 2013 NTT DATA Corporation
Vagrant installation
● VirtualBoxインストール
● Vagrantインストーラダウンロード
– Mac, Windows, Linux(CentOS/RHEL, Ubuntu/Debian)
● Vagrantインストール
● Vagrant box入手(自動取得も可能)
● 作業ディレクトリ作成し、コマンド実行
11Copyright © 2013 NTT DATA Corporation
What is Vagrant box
● 事前に作られたVMイメージや相当物
● さまざまなプラットホームが用意され、公開もされてい
る
● 自身でつくることも可能
● プロバイダー毎に形式が相違
● 変換も可能(development in progress)
12Copyright © 2013 NTT DATA Corporation
Find your Boxes
● Catalog siteでURL入手
– vagrantbox.es
● コマンドの実行
● 設定に記載する方法もある
config.vm.box_url= "<URL>"
$ vagrant box add <boxname> <url>
13Copyright © 2013 NTT DATA Corporation
Environment creation
● プロジェクト内に設定"Vagrantfile"を作成
$ vagrant init
14Copyright © 2013 NTT DATA Corporation
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "precise64"
config.vm.box_url = "http://domain.com/path/to/above.box"
config.vm.network :forwarded_port, guest: 80, host: 8080
config.vm.network :private_network, ip: "192.168.33.10"
config.vm.provider :kvm do |kvm|
kvm.gui = "true"
kvm.image_type = "qcow2"
kvm.memory_size = "512m"
kvm.core_number = 2
kvm.cpu_model = 'i686'
end
config.vm.provision :shell, inline: <<-SH
set -x
export DEBIAN_FRONTEND=noninteractive
sudo apt-get update
sudo apt-get install -y apache
SH
end
Vagrantfile例
15Copyright © 2013 NTT DATA Corporation
Vagrant eco-system
● Vagrant Plugin 開発コミュニティ
種類 プロジェクト 機能
provider Vagrant-KVM LinuxとKVMをホスト環境とし
て利用可能にする
provider Vagrant-LXC LinuxホストのLXCで利用する
provider Vagrant-libvirt libvirtを用いて、遠隔ホストで
Xen,KVM等を利用可能にする
provider Vagrant-AWS AWS上で利用可能にする
Command Vagrant-mutate Boxの形式を変換する
Command Sahara スナップショットを操作する
16Copyright © 2013 NTT DATA Corporation
Vagrant eco-system
● バラエティに富んだ開発コミュニティ
種類 プロジェクト 機能
provisioner vagrant-cachier ゲストOSを判定して、 OS package/gem
file等のキャッシュを永続化する
provisioner vagrant-dns
vagrant-hostmanager
管理対象に合わせてDNS/host設定を更新
する
provisioner vagrant-ansible Ansibleでコンフィグを行う
provider vagrant-rackspace RackSpaceでのマシン管理を可能にする
provider vagrant-parallels parallels 上でマシン管理
provider vagrant-digitalocean DigitalOcean上のマシン管理を可能にする
box repository vagrantbox.es public boxのリポジトリ
17Copyright © 2013 NTT DATA Corporation
18Copyright © 2013 NTT DATA Corporation
Vagrant and Docker
● 基本的なアイディア
– Vagrant上でDocker環境をデプロイ
– ゲストに自動的にDockerをインストール
– ゲストに自動的にDockerイメージを導入
● Docker Provisioner
– Vagrant 1.1-1.3: 外部プラグイン
– Vagrant 1.4+ (Dec., 2013) 標準装備
19Copyright © 2013 NTT DATA Corporation
Docker provisioner
● ゲストOSを自動判別して、適切なDockerのパッケージをゲ
ストにインストール
● Docker稼働環境を、好みの仮想環境上にコマンド一発で作
成できる
● Puppet等の知識は不要
● Docker環境が構築された後は、vagrant sshでログインして
、dockerコマンドで操作できる
Vagrant
Host OS/Hypervisor
Box Images
(Fedora, Ubuntu, etc)
Container
image
Docker
Container
image
手軽にDocker環境を試すのに最適!
20Copyright © 2013 NTT DATA Corporation
Vagrant.configure("2") do |config|
config.vm.box = "raring"
config.vm.box_url = “https://dl.dropboxusercontent.com/u/547671/thinkstack-
raring64.box”
if Vagrant.has_plugin?("vagrant-cachier")
config.cache.auto_detect = true
end
config.vm.provision :shell, inline: <<-SH
set -x
export DEBIAN_FRONTEND=noninteractive
sudo apt-get update
SH
config.vm.provision "docker" do |d|
d.pull_images "busybox"
end
end
Vagrantfile example for Docker
Ubuntu RaringをゲストOSとしてVM上にインストールして、docker環境を整え、
busybox docker imageを導入する
21Copyright © 2013 NTT DATA Corporation
Packer
● VagrantのHashicorpが開発するプロダクト
● 一つのレシピから、複数のゲストイメージを生
成可能
– VirtualBox
– VMWare
– Libvirt/KVM
– LXC
– Docker
● Dockerのテンプレートや、Vagrant BOX(bento plugin)の生成
● Shell, Puppetなど、従来からのお気に入りの方法で定義できる
22Copyright © 2013 NTT DATA Corporation
イメージ全体
Vagrant
Host OS/Hypervisor(VB, VMware, KVM)
Provider
(VirtualBox, KVM, LXC
Libvirt, AWS)
Command
(Snapshot
mutate)
Box Images
(Fedora, Ubuntu, etc)
Provisioner
(Puppet, Chef, Docker)
Remote Host
Provisioner
(Puppet, Chef, Docker)
Box Images
(Fedora, Ubuntu, etc)
レシピ
RubyGems
Pypi, etc
OS package
repository
PuppetShell
PACKER
LXC image
VM image
Docker template
docker
repository
Vagrant box
repository
Container images
開発環境
Copyright © 2011 NTT DATA Corporation
Copyright © 2013 NTT DATA Corporation
Contact
miurahr at nttdata co jp
@miurahr (Twitter/LinkedIn/Github)

"Up" with vagrant and docker

  • 1.
    Copyright © 2013NTT DATA Corporation "Up" with Vagrant and Docker Hiroshi Miura(@miurahr) NTTデータ 基盤システム事業本部 Docker Meetup Tokyo 2014 #1
  • 2.
    2Copyright © 2013NTT DATA Corporation Disclaimer ● Any product name, service name, software name and other marks a re trade mark or registered mark of corresponding companies. ● This presentation is in a purpose of providing current information on emerging technologies and there is no grantee of correctness and/o r persistence of features in any future. ● A presenter and NTT Data Corporation provide information in as-is b asis and have no responsiveness for results that you got according to information in this presentation material.
  • 3.
    3Copyright © 2013NTT DATA Corporation
  • 4.
    4Copyright © 2013NTT DATA Corporation Introduction to Vagrant Vagrantのご紹介 vagrantup.com
  • 5.
    5Copyright © 2013NTT DATA Corporation What is Vagrant ● 開発環境を仮想マシンやコンテナ、クラウドに作成 ● 商用環境とできるだけ同一の環境をつくることを優先 ● アプリ・リポジトリに設定がおいてあることがおおい ● Mitchell Hashimoto氏が作者 ● Rubyで書かれている ● 基本はOracleVM VirtualBoxとAWS EC2 ● 有償オプションで、VMWare Fusion
  • 6.
    6Copyright © 2013NTT DATA Corporation Vagrant Users ● 今までの典型的なVagrantユーザ像 – Webデベロッパー – MacBook AirかMacBook Pro利用者が多い – VirtualBoxでUbuntu利用が多い – 提供先はAWSやVPS上へホスト – Ruby/RoR使いが多い – Github利用者が多い
  • 7.
    7Copyright © 2013NTT DATA Corporation Vagrant Users ● 新しいタイプのユーザ – インフラエンジニア – RHEL, CentOSまたはWindows利用者 – vCenter, OpenStack等をデプロイ – Puppet, Chef, またはAnsible使い – OpenFlowに興味
  • 8.
    8Copyright © 2013NTT DATA Corporation Vagrant Plugins ● Vagrant 1.1+からプラグイン可能となる(2013.2〜) – Provider: 仮想マシン等ドライブの提供 – Provisioner: ゲスト設定方法の提供 – host/guest: OSサポート – Synced_folder: フォルダ同期方法の提供 ● Vagrant 1.4からDocker provisionerが標準提供 
  • 9.
    9Copyright © 2013NTT DATA Corporation Vagrant provisioner ● Shell, Puppet, Chefでの設定が標準で可能 ● Puppet: スタンドアロン、Client/Server可 – スタンドアロンでは以下にマウント ● /tmp/puppet-manifest ● /tmp/puppet-modules ● Chef: Chef-solo, Client/Server可 ● Shell: インライン、外部シェル可能 ● Salt, Docker...
  • 10.
    10Copyright © 2013NTT DATA Corporation Vagrant installation ● VirtualBoxインストール ● Vagrantインストーラダウンロード – Mac, Windows, Linux(CentOS/RHEL, Ubuntu/Debian) ● Vagrantインストール ● Vagrant box入手(自動取得も可能) ● 作業ディレクトリ作成し、コマンド実行
  • 11.
    11Copyright © 2013NTT DATA Corporation What is Vagrant box ● 事前に作られたVMイメージや相当物 ● さまざまなプラットホームが用意され、公開もされてい る ● 自身でつくることも可能 ● プロバイダー毎に形式が相違 ● 変換も可能(development in progress)
  • 12.
    12Copyright © 2013NTT DATA Corporation Find your Boxes ● Catalog siteでURL入手 – vagrantbox.es ● コマンドの実行 ● 設定に記載する方法もある config.vm.box_url= "<URL>" $ vagrant box add <boxname> <url>
  • 13.
    13Copyright © 2013NTT DATA Corporation Environment creation ● プロジェクト内に設定"Vagrantfile"を作成 $ vagrant init
  • 14.
    14Copyright © 2013NTT DATA Corporation # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.box = "precise64" config.vm.box_url = "http://domain.com/path/to/above.box" config.vm.network :forwarded_port, guest: 80, host: 8080 config.vm.network :private_network, ip: "192.168.33.10" config.vm.provider :kvm do |kvm| kvm.gui = "true" kvm.image_type = "qcow2" kvm.memory_size = "512m" kvm.core_number = 2 kvm.cpu_model = 'i686' end config.vm.provision :shell, inline: <<-SH set -x export DEBIAN_FRONTEND=noninteractive sudo apt-get update sudo apt-get install -y apache SH end Vagrantfile例
  • 15.
    15Copyright © 2013NTT DATA Corporation Vagrant eco-system ● Vagrant Plugin 開発コミュニティ 種類 プロジェクト 機能 provider Vagrant-KVM LinuxとKVMをホスト環境とし て利用可能にする provider Vagrant-LXC LinuxホストのLXCで利用する provider Vagrant-libvirt libvirtを用いて、遠隔ホストで Xen,KVM等を利用可能にする provider Vagrant-AWS AWS上で利用可能にする Command Vagrant-mutate Boxの形式を変換する Command Sahara スナップショットを操作する
  • 16.
    16Copyright © 2013NTT DATA Corporation Vagrant eco-system ● バラエティに富んだ開発コミュニティ 種類 プロジェクト 機能 provisioner vagrant-cachier ゲストOSを判定して、 OS package/gem file等のキャッシュを永続化する provisioner vagrant-dns vagrant-hostmanager 管理対象に合わせてDNS/host設定を更新 する provisioner vagrant-ansible Ansibleでコンフィグを行う provider vagrant-rackspace RackSpaceでのマシン管理を可能にする provider vagrant-parallels parallels 上でマシン管理 provider vagrant-digitalocean DigitalOcean上のマシン管理を可能にする box repository vagrantbox.es public boxのリポジトリ
  • 17.
    17Copyright © 2013NTT DATA Corporation
  • 18.
    18Copyright © 2013NTT DATA Corporation Vagrant and Docker ● 基本的なアイディア – Vagrant上でDocker環境をデプロイ – ゲストに自動的にDockerをインストール – ゲストに自動的にDockerイメージを導入 ● Docker Provisioner – Vagrant 1.1-1.3: 外部プラグイン – Vagrant 1.4+ (Dec., 2013) 標準装備
  • 19.
    19Copyright © 2013NTT DATA Corporation Docker provisioner ● ゲストOSを自動判別して、適切なDockerのパッケージをゲ ストにインストール ● Docker稼働環境を、好みの仮想環境上にコマンド一発で作 成できる ● Puppet等の知識は不要 ● Docker環境が構築された後は、vagrant sshでログインして 、dockerコマンドで操作できる Vagrant Host OS/Hypervisor Box Images (Fedora, Ubuntu, etc) Container image Docker Container image 手軽にDocker環境を試すのに最適!
  • 20.
    20Copyright © 2013NTT DATA Corporation Vagrant.configure("2") do |config| config.vm.box = "raring" config.vm.box_url = “https://dl.dropboxusercontent.com/u/547671/thinkstack- raring64.box” if Vagrant.has_plugin?("vagrant-cachier") config.cache.auto_detect = true end config.vm.provision :shell, inline: <<-SH set -x export DEBIAN_FRONTEND=noninteractive sudo apt-get update SH config.vm.provision "docker" do |d| d.pull_images "busybox" end end Vagrantfile example for Docker Ubuntu RaringをゲストOSとしてVM上にインストールして、docker環境を整え、 busybox docker imageを導入する
  • 21.
    21Copyright © 2013NTT DATA Corporation Packer ● VagrantのHashicorpが開発するプロダクト ● 一つのレシピから、複数のゲストイメージを生 成可能 – VirtualBox – VMWare – Libvirt/KVM – LXC – Docker ● Dockerのテンプレートや、Vagrant BOX(bento plugin)の生成 ● Shell, Puppetなど、従来からのお気に入りの方法で定義できる
  • 22.
    22Copyright © 2013NTT DATA Corporation イメージ全体 Vagrant Host OS/Hypervisor(VB, VMware, KVM) Provider (VirtualBox, KVM, LXC Libvirt, AWS) Command (Snapshot mutate) Box Images (Fedora, Ubuntu, etc) Provisioner (Puppet, Chef, Docker) Remote Host Provisioner (Puppet, Chef, Docker) Box Images (Fedora, Ubuntu, etc) レシピ RubyGems Pypi, etc OS package repository PuppetShell PACKER LXC image VM image Docker template docker repository Vagrant box repository Container images 開発環境
  • 23.
    Copyright © 2011NTT DATA Corporation Copyright © 2013 NTT DATA Corporation Contact miurahr at nttdata co jp @miurahr (Twitter/LinkedIn/Github)