61
Vagrant & Docker による イマドキの開発環境構築 Japan System Laboratory GEEKLAB.NAGANO Yuichi Nakazawa

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

Embed Size (px)

Citation preview

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

•エージェントレス •サーバーはPython2.6+クライアントは、Python2.5 •設定ファイルがシンプル(主なファイルは2つ程度)

Ansible

•同じ環境を何度も立てたい場合に使えます。(開発、ステージング、本番)

•設定ファイルに変数を指定できる。 •Vagrant/Dockerにも設定ファイルはありますが、ツールに依存してしまう。

まとめ

さいごに

•インフラエンジニアでなくても手軽にインフラ構築ができます。 → インフラエンジニア不要説→ 明日は我が身かも・・・

•自動構成や構成管理ツールで楽出来る?? → 基本が大事(銀の弾丸ではない)