vagrantユーザのためのdocker入門

48
2014/04/12 shin1x1 第3回 コンテナ型仮想化の情報交換会@大阪 Vagrantユーザための Docker入門

Upload: masashi-shinbara

Post on 08-May-2015

37.464 views

Category:

Engineering


3 download

DESCRIPTION

第3回 コンテナ型仮想化の情報交換会@大阪

TRANSCRIPT

Page 1: VagrantユーザのためのDocker入門

2014/04/12 shin1x1

第3回 コンテナ型仮想化の情報交換会@大阪

Vagrantユーザための Docker入門

Page 2: VagrantユーザのためのDocker入門

Agenda

(c) 2014 Masashi Shinbara @shin1x1

• Dockerとは • Dockerを触ってみる • Vagrantとの比較 • ユースケースに見る • まとめ

Page 3: VagrantユーザのためのDocker入門

忙しい人のための Docker解説

(c) 2014 Masashi Shinbara @shin1x1

Page 4: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

Dockerの特徴1

コンテナ型なので 起動マジ速い!

Page 5: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

Dockerの特徴2

レイヤードファイルシステムディスク、ネットワーク節約

マジeco !!

Page 6: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

Dockerの特徴3

コンテナがどこでも動く マジポータブル!

Page 7: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

Cool だろ?

Page 8: VagrantユーザのためのDocker入門

Dockerとは

(c) 2014 Masashi Shinbara @shin1x1

Page 9: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

Dockerとは

• Docker社(旧dotCloud社)が開発したOSS • golang で実装 • コンテナ技術を使った軽量な仮想環境 • レイヤによる差分ファイルシステム • コンテナ(イメージ)配布システム

Page 10: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

Docker について

http://www.slideshare.net/dotCloud/docker-intro-november

Page 11: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

コンテナとVM

http://www.slideshare.net/dotCloud/docker-intro-november

Page 12: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

Dockerコンテナ

http://www.slideshare.net/dotCloud/docker-intro-november

Page 13: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

Dockerシステム概要

http://www.slideshare.net/dotCloud/docker-intro-november

Page 14: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

Dockerコンテナの更新

http://www.slideshare.net/dotCloud/docker-intro-november

Page 15: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

レイヤファイルシステム

http://docs.docker.io/en/latest/terms/image/

Page 16: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

レイヤファイルシステム

http://docs.docker.io/en/latest/terms/image/

Page 17: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

レイヤファイルシステム

http://docs.docker.io/en/latest/terms/image/

Page 18: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

レイヤファイルシステム

http://docs.docker.io/en/latest/terms/image/

Page 19: VagrantユーザのためのDocker入門

Dockerを 触ってみる

(c) 2014 Masashi Shinbara @shin1x1

Page 20: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

OSXで試す

• OSX では、Docker コマンドだけ使えるが、 Dockerコンテナは動かない

• VM 等で、Linux 環境を用意する • Linux 環境として、boot2docker が手軽 • 今回は、Vagrant で CentOS 環境を使う

Page 21: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

なぜ boot2docker 使わない?

• Vagrant なら、IP の割り当てが楽 • Vagrant なら、synced_folder が便利 • VM の起動は時間がかかるが、あとは一緒

Page 22: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

インストール(OSX)

!$ brew install docker!

• Homebrew で docker インストール

Page 23: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

Linux環境を用意(OSX)

!$ git clone https://github.com/shin1x1/vagrant-centos-docker.git!$ cd vagrant-centos-docker!$ vagrant up!

• Vagrant で Docker デーモン(CentOS)を起動

Page 24: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

CentOSでのDocker

$ sudo sed -i 's,^other_args="",other_args="-H tcp://0.0.0.0:4243 -H unix:// -dns 8.8.8.8",g' /etc/sysconfig/docker

• unixドメインソケットでのみ通信可能なので、 TCP/IP で待ち受けるように変更

• /etc/sysconfig/dockerother_args="-H tcp://0.0.0.0:4243 -H unix:// -dns 8.8.8.8"

Page 25: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

Dockerホスト設定(OSX)

!$ docker -H tcp://localhost:4243 info!

• Docker コマンドに -H オプションで指定

!$ export DOCKER_HOST=tcp://localhost:4243!$ docker info!

• 環境変数で設定しておくと楽

Page 26: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

ベースイメージ取得

$ docker search centos

• イメージを探す

$ docker pull centos

• イメージのダウンロード

$ docker images!REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE!centos 6.4 539c0211cd76 12 months ago 300.6 MB!centos latest 539c0211cd76 12 months ago 300.6 MB

• キャッシュしているイメージを表示

Page 27: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

コンテナを起動

$ docker run centos cat /etc/redhat-release!CentOS release 6.4 (Final)

• コンテナを起動して、cat を実行

$ docker run -i -t centos /bin/bash !bash-4.1#

• コンテナを起動して、Bash を実行

Page 28: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

実行コンテナを確認

$ docker ps!CONTAINER ID IMAGE COMMAND CREATED !fa7c9e516c61 centos:6.4 /bin/bash 6 minutes ago

• 実行中コンテナを表示

$ docker ps -a!CONTAINER ID IMAGE COMMAND CREATED STATUS!8a021062464e centos:6.4 /bin/bash 7 seconds ago Up 6 seconds!5dd90f9483d3 centos:6.4 cat /etc/redhat-rele 29 seconds ago Exit 0

• 全て(停止コンテナ含めて)表示

Page 29: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

コンテナをイメージ化

$ docker commit CONTAINER_ID IMAGE_NAME!xxxxxxxxxxxxxxxxxxxxx!!$ docker images!!$ docker run IMAGE_NAME php -v!PHP 5.3.3 (cli) (built: Dec 11 2013 03:29:57)!Copyright (c) 1997-2010 The PHP Group!Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

• コンテナをイメージ化

Page 30: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

コンテナ構築を自動化

$ vim Dockerfile!FROM centos!MAINTAINER shin1x1 <[email protected]>!!#!# httpd!RUN yum -y install httpd!!#!# PHP!RUN yum -y install php!!CMD ["/usr/sbin/apachectl", "-DFOREGROUND"]!

• Dockerfile に構築手順を書く

Page 31: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

コンテナ構築を自動化

$ docker build -t shin1x1/httpd_php .!Uploading context 150 kB!Uploading context!Step 0 : FROM centos! ---> 539c0211cd76!Step 1 : MAINTAINER shin1x1 <[email protected]>! ---> Using cache! ---> b84d1c89ba69!Step 2 : RUN yum -y install httpd! ---> Using cache! ---> 7abc65b054a8!Step 3 : RUN yum -y install php! ---> Using cache! ---> 792d88165f34!Step 4 : CMD ["/usr/sbin/apachectl", "-DFOREGROUND"]! ---> Using cache! ---> 04626460b476!Successfully built 04626460b476

• イメージをビルド

Page 32: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

コンテナ構築を自動化

$ docker run shin1x1/httpd_php php -v!PHP 5.3.3 (cli) (built: Dec 11 2013 03:29:57)!Copyright (c) 1997-2010 The PHP Group!Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies!

• 構築したイメージをコンテナとして起動

Page 33: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

コンテナをサービス化

$ docker run -d -p 80:80 shin1x1/httpd_php!xxxxxxxxxxxxxxxxxxxxxxxx!

• -d = コンテナをバックグラウンドで動かす • -p = ポートマッピング(ホスト:コンテナ) • -v = ホストディレクトリをコンテナからマウント • コンテナのプロセスはフォアグラウンドで動かす

• http://192.168.33.10/ でアクセス可能

Page 34: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

Vagrantとの比較 ※Vagrant で VirtualBox を使う際と比較

Page 35: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

速くなったVagrant?

• いいえ、違います。 • ユースケースは似てるとこもありますが、 異なるものと思ったほうが良いです。

Page 36: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

似てるところ

• 独立した仮想環境が容易に作れる • ベースイメージを利用 • 構築手順(Dockerfile, Vagrantfile)を 書いて、自動構築

• どの環境でも同じ環境が作れる

Page 37: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

違うところ

• 動作方式(ハイパーバイザー型とコンテナ型) • 起動速度 • ファイルシステム (フルバックアップと差分バックアップ)

• ポータビリティ • 想定しているユースケース

Page 38: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

ユースケースに見る VagrantとDocker

Page 39: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

検証環境に使う

• ミドルウェアのインストールや設定の検証など • 手軽に作って、壊してができるので良い • 検証用のベース image を用意しておく • image のキャッシュを生かすため 同じ VM 上で Docker デーモンを動かす

Page 40: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

開発環境に使う• OSX の IDEで書いて、コードの実行はVM => Vagrant の synced_folder を利用

• プロジェクト毎に独立した環境にしたい => Vagrant の方がより独立した環境に

• 全く同じ環境にしたい => アクセス IP も固定した方が吉

• OSXでは、どのみちVMが必要 • Vagrant 内でプロビジョナで Docker 使うならアリ

Page 41: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

CI環境に使う• Jenkinsでオールテスト実行環境として利用 • ビルドの度にコンテナを生成して、テスト実行 • ビルド毎に独立した環境 • 軽量な動作で複数実行されても問題無い • いま、一番導入しやすいところ • Vagrant だとオーバーヘッドが大きい

Page 42: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

CI運用例

Mac

private repo

(1) git push

CI サーバ(さくらVPS)

(2) hook

(3) git pull

(4) docker build & docker run

Page 43: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

CI運用例

• Jenkinsプロジェクト設定(シェルの実行)sudo docker build -t ${JOB_NAME} .!sudo docker run -v ${WORKSPACE}/src:/share ${JOB_NAME}

Page 44: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

本番環境に使う

• Docker の主戦場 • PaaS / DaaS (Docker as a Service) • サーバでコンテナビルド? • ビルドしたコンテナをpush? • まだ模索中…

Page 45: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

まとめ

Page 46: VagrantユーザのためのDocker入門

(c) 2014 Masashi Shinbara @shin1x1

まとめ

• 軽量でポータブルなコンテナ • OSXで使うなら、VM が必要 • Docker ≠ better Vagrant

Page 47: VagrantユーザのためのDocker入門

@shin1x1

(c) 2014 Masashi Shinbara @shin1x1

Page 48: VagrantユーザのためのDocker入門

PHPカンファレンス関西2014

(c) 2014 Masashi Shinbara @shin1x1

http://conference.kphpug.jp/2014/

• 2014/06/28(土) • 大阪産業創造館 • セッション募集中!!