SlideShare a Scribd company logo
2014/04/12 shin1x1
第3回 コンテナ型仮想化の情報交換会@大阪
Vagrantユーザための
Docker入門
Agenda
(c) 2014 Masashi Shinbara @shin1x1
• Dockerとは
• Dockerを触ってみる
• Vagrantとの比較
• ユースケースに見る
• まとめ
忙しい人のための
Docker解説
(c) 2014 Masashi Shinbara @shin1x1
(c) 2014 Masashi Shinbara @shin1x1
Dockerの特徴1
コンテナ型なので
起動マジ速い!
(c) 2014 Masashi Shinbara @shin1x1
Dockerの特徴2
レイヤードファイルシステム
ディスク、ネットワーク節約

マジeco !!
(c) 2014 Masashi Shinbara @shin1x1
Dockerの特徴3
コンテナがどこでも動く
マジポータブル!
(c) 2014 Masashi Shinbara @shin1x1
Cool だろ?
Dockerとは
(c) 2014 Masashi Shinbara @shin1x1
(c) 2014 Masashi Shinbara @shin1x1
Dockerとは
• Docker社(旧dotCloud社)が開発したOSS
• golang で実装
• コンテナ技術を使った軽量な仮想環境
• レイヤによる差分ファイルシステム
• コンテナ(イメージ)配布システム
(c) 2014 Masashi Shinbara @shin1x1
Docker について
http://www.slideshare.net/dotCloud/docker-intro-
november
(c) 2014 Masashi Shinbara @shin1x1
コンテナとVM
http://www.slideshare.net/dotCloud/docker-intro-november
(c) 2014 Masashi Shinbara @shin1x1
Dockerコンテナ
http://www.slideshare.net/dotCloud/docker-intro-november
(c) 2014 Masashi Shinbara @shin1x1
Dockerシステム概要
http://www.slideshare.net/dotCloud/docker-intro-november
(c) 2014 Masashi Shinbara @shin1x1
Dockerコンテナの更新
http://www.slideshare.net/dotCloud/docker-intro-november
(c) 2014 Masashi Shinbara @shin1x1
レイヤファイルシステム
http://docs.docker.io/en/latest/terms/image/
(c) 2014 Masashi Shinbara @shin1x1
レイヤファイルシステム
http://docs.docker.io/en/latest/terms/image/
(c) 2014 Masashi Shinbara @shin1x1
レイヤファイルシステム
http://docs.docker.io/en/latest/terms/image/
(c) 2014 Masashi Shinbara @shin1x1
レイヤファイルシステム
http://docs.docker.io/en/latest/terms/image/
Dockerを
触ってみる
(c) 2014 Masashi Shinbara @shin1x1
(c) 2014 Masashi Shinbara @shin1x1
OSXで試す
• OSX では、Docker コマンドだけ使えるが、

Dockerコンテナは動かない
• VM 等で、Linux 環境を用意する
• Linux 環境として、boot2docker が手軽
• 今回は、Vagrant で CentOS 環境を使う
(c) 2014 Masashi Shinbara @shin1x1
なぜ boot2docker 使わない?
• Vagrant なら、IP の割り当てが楽
• Vagrant なら、synced_folder が便利
• VM の起動は時間がかかるが、あとは一緒
(c) 2014 Masashi Shinbara @shin1x1
インストール(OSX)
!
$ brew install docker!
• Homebrew で 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)を起動
(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/docker
other_args="-H tcp://0.0.0.0:4243 -H unix:// -dns 8.8.8.8"
(c) 2014 Masashi Shinbara @shin1x1
Dockerホスト設定(OSX)
!
$ docker -H tcp://localhost:4243 info!
• Docker コマンドに -H オプションで指定
!
$ export DOCKER_HOST=tcp://localhost:4243!
$ docker info!
• 環境変数で設定しておくと楽
(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
• キャッシュしているイメージを表示
(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 を実行
(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
• 全て(停止コンテナ含めて)表示
(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
• コンテナをイメージ化
(c) 2014 Masashi Shinbara @shin1x1
コンテナ構築を自動化
$ vim Dockerfile!
FROM centos!
MAINTAINER shin1x1 <shin1x1@gmail.com>!
!
#!
# httpd!
RUN yum -y install httpd!
!
#!
# PHP!
RUN yum -y install php!
!
CMD ["/usr/sbin/apachectl", "-DFOREGROUND"]!
• Dockerfile に構築手順を書く
(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 <shin1x1@gmail.com>!
---> 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
• イメージをビルド
(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!
• 構築したイメージをコンテナとして起動
(c) 2014 Masashi Shinbara @shin1x1
コンテナをサービス化
$ docker run -d -p 80:80 shin1x1/httpd_php!
xxxxxxxxxxxxxxxxxxxxxxxx!
• -d = コンテナをバックグラウンドで動かす
• -p = ポートマッピング(ホスト:コンテナ)
• -v = ホストディレクトリをコンテナからマウント
• コンテナのプロセスはフォアグラウンドで動かす
• http://192.168.33.10/ でアクセス可能
(c) 2014 Masashi Shinbara @shin1x1
Vagrantとの比較
※Vagrant で VirtualBox を使う際と比較
(c) 2014 Masashi Shinbara @shin1x1
速くなったVagrant?
• いいえ、違います。
• ユースケースは似てるとこもありますが、

異なるものと思ったほうが良いです。
(c) 2014 Masashi Shinbara @shin1x1
似てるところ
• 独立した仮想環境が容易に作れる
• ベースイメージを利用
• 構築手順(Dockerfile, Vagrantfile)を

書いて、自動構築
• どの環境でも同じ環境が作れる
(c) 2014 Masashi Shinbara @shin1x1
違うところ
• 動作方式(ハイパーバイザー型とコンテナ型)
• 起動速度
• ファイルシステム

(フルバックアップと差分バックアップ)
• ポータビリティ
• 想定しているユースケース
(c) 2014 Masashi Shinbara @shin1x1
ユースケースに見る
VagrantとDocker
(c) 2014 Masashi Shinbara @shin1x1
検証環境に使う
• ミドルウェアのインストールや設定の検証など
• 手軽に作って、壊してができるので良い
• 検証用のベース image を用意しておく
• image のキャッシュを生かすため

同じ VM 上で Docker デーモンを動かす
(c) 2014 Masashi Shinbara @shin1x1
開発環境に使う
• OSX の IDEで書いて、コードの実行はVM

=> Vagrant の synced_folder を利用
• プロジェクト毎に独立した環境にしたい

=> Vagrant の方がより独立した環境に
• 全く同じ環境にしたい

=> アクセス IP も固定した方が吉
• OSXでは、どのみちVMが必要
• Vagrant 内でプロビジョナで Docker 使うならアリ
(c) 2014 Masashi Shinbara @shin1x1
CI環境に使う
• Jenkinsでオールテスト実行環境として利用
• ビルドの度にコンテナを生成して、テスト実行
• ビルド毎に独立した環境
• 軽量な動作で複数実行されても問題無い
• いま、一番導入しやすいところ
• Vagrant だとオーバーヘッドが大きい
(c) 2014 Masashi Shinbara @shin1x1
CI運用例
Mac
private repo
(1) git push
CI サーバ(さくらVPS)
(2) hook
(3) git pull
(4) docker build & docker run
(c) 2014 Masashi Shinbara @shin1x1
CI運用例
• Jenkinsプロジェクト設定(シェルの実行)
sudo docker build -t ${JOB_NAME} .!
sudo docker run -v ${WORKSPACE}/src:/share ${JOB_NAME}
(c) 2014 Masashi Shinbara @shin1x1
本番環境に使う
• Docker の主戦場
• PaaS / DaaS (Docker as a Service)
• サーバでコンテナビルド?
• ビルドしたコンテナをpush?
• まだ模索中…
(c) 2014 Masashi Shinbara @shin1x1
まとめ
(c) 2014 Masashi Shinbara @shin1x1
まとめ
• 軽量でポータブルなコンテナ
• OSXで使うなら、VM が必要
• Docker ≠ better Vagrant
@shin1x1
(c) 2014 Masashi Shinbara @shin1x1
PHPカンファレンス関西2014
(c) 2014 Masashi Shinbara @shin1x1
http://conference.kphpug.jp/2014/
• 2014/06/28(土)
• 大阪産業創造館
• セッション募集中!!

More Related Content

VagrantユーザのためのDocker入門

  • 2. Agenda (c) 2014 Masashi Shinbara @shin1x1 • Dockerとは • Dockerを触ってみる • Vagrantとの比較 • ユースケースに見る • まとめ
  • 4. (c) 2014 Masashi Shinbara @shin1x1 Dockerの特徴1 コンテナ型なので 起動マジ速い!
  • 5. (c) 2014 Masashi Shinbara @shin1x1 Dockerの特徴2 レイヤードファイルシステム ディスク、ネットワーク節約
 マジeco !!
  • 6. (c) 2014 Masashi Shinbara @shin1x1 Dockerの特徴3 コンテナがどこでも動く マジポータブル!
  • 7. (c) 2014 Masashi Shinbara @shin1x1 Cool だろ?
  • 8. Dockerとは (c) 2014 Masashi Shinbara @shin1x1
  • 9. (c) 2014 Masashi Shinbara @shin1x1 Dockerとは • Docker社(旧dotCloud社)が開発したOSS • golang で実装 • コンテナ技術を使った軽量な仮想環境 • レイヤによる差分ファイルシステム • コンテナ(イメージ)配布システム
  • 10. (c) 2014 Masashi Shinbara @shin1x1 Docker について http://www.slideshare.net/dotCloud/docker-intro- november
  • 11. (c) 2014 Masashi Shinbara @shin1x1 コンテナとVM http://www.slideshare.net/dotCloud/docker-intro-november
  • 12. (c) 2014 Masashi Shinbara @shin1x1 Dockerコンテナ http://www.slideshare.net/dotCloud/docker-intro-november
  • 13. (c) 2014 Masashi Shinbara @shin1x1 Dockerシステム概要 http://www.slideshare.net/dotCloud/docker-intro-november
  • 14. (c) 2014 Masashi Shinbara @shin1x1 Dockerコンテナの更新 http://www.slideshare.net/dotCloud/docker-intro-november
  • 15. (c) 2014 Masashi Shinbara @shin1x1 レイヤファイルシステム http://docs.docker.io/en/latest/terms/image/
  • 16. (c) 2014 Masashi Shinbara @shin1x1 レイヤファイルシステム http://docs.docker.io/en/latest/terms/image/
  • 17. (c) 2014 Masashi Shinbara @shin1x1 レイヤファイルシステム http://docs.docker.io/en/latest/terms/image/
  • 18. (c) 2014 Masashi Shinbara @shin1x1 レイヤファイルシステム http://docs.docker.io/en/latest/terms/image/
  • 20. (c) 2014 Masashi Shinbara @shin1x1 OSXで試す • OSX では、Docker コマンドだけ使えるが、
 Dockerコンテナは動かない • VM 等で、Linux 環境を用意する • Linux 環境として、boot2docker が手軽 • 今回は、Vagrant で CentOS 環境を使う
  • 21. (c) 2014 Masashi Shinbara @shin1x1 なぜ boot2docker 使わない? • Vagrant なら、IP の割り当てが楽 • Vagrant なら、synced_folder が便利 • VM の起動は時間がかかるが、あとは一緒
  • 22. (c) 2014 Masashi Shinbara @shin1x1 インストール(OSX) ! $ brew install docker! • Homebrew で docker インストール
  • 23. (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)を起動
  • 24. (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/docker other_args="-H tcp://0.0.0.0:4243 -H unix:// -dns 8.8.8.8"
  • 25. (c) 2014 Masashi Shinbara @shin1x1 Dockerホスト設定(OSX) ! $ docker -H tcp://localhost:4243 info! • Docker コマンドに -H オプションで指定 ! $ export DOCKER_HOST=tcp://localhost:4243! $ docker info! • 環境変数で設定しておくと楽
  • 26. (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 • キャッシュしているイメージを表示
  • 27. (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 を実行
  • 28. (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 • 全て(停止コンテナ含めて)表示
  • 29. (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 • コンテナをイメージ化
  • 30. (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 に構築手順を書く
  • 31. (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 • イメージをビルド
  • 32. (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! • 構築したイメージをコンテナとして起動
  • 33. (c) 2014 Masashi Shinbara @shin1x1 コンテナをサービス化 $ docker run -d -p 80:80 shin1x1/httpd_php! xxxxxxxxxxxxxxxxxxxxxxxx! • -d = コンテナをバックグラウンドで動かす • -p = ポートマッピング(ホスト:コンテナ) • -v = ホストディレクトリをコンテナからマウント • コンテナのプロセスはフォアグラウンドで動かす • http://192.168.33.10/ でアクセス可能
  • 34. (c) 2014 Masashi Shinbara @shin1x1 Vagrantとの比較 ※Vagrant で VirtualBox を使う際と比較
  • 35. (c) 2014 Masashi Shinbara @shin1x1 速くなったVagrant? • いいえ、違います。 • ユースケースは似てるとこもありますが、
 異なるものと思ったほうが良いです。
  • 36. (c) 2014 Masashi Shinbara @shin1x1 似てるところ • 独立した仮想環境が容易に作れる • ベースイメージを利用 • 構築手順(Dockerfile, Vagrantfile)を
 書いて、自動構築 • どの環境でも同じ環境が作れる
  • 37. (c) 2014 Masashi Shinbara @shin1x1 違うところ • 動作方式(ハイパーバイザー型とコンテナ型) • 起動速度 • ファイルシステム
 (フルバックアップと差分バックアップ) • ポータビリティ • 想定しているユースケース
  • 38. (c) 2014 Masashi Shinbara @shin1x1 ユースケースに見る VagrantとDocker
  • 39. (c) 2014 Masashi Shinbara @shin1x1 検証環境に使う • ミドルウェアのインストールや設定の検証など • 手軽に作って、壊してができるので良い • 検証用のベース image を用意しておく • image のキャッシュを生かすため
 同じ VM 上で Docker デーモンを動かす
  • 40. (c) 2014 Masashi Shinbara @shin1x1 開発環境に使う • OSX の IDEで書いて、コードの実行はVM
 => Vagrant の synced_folder を利用 • プロジェクト毎に独立した環境にしたい
 => Vagrant の方がより独立した環境に • 全く同じ環境にしたい
 => アクセス IP も固定した方が吉 • OSXでは、どのみちVMが必要 • Vagrant 内でプロビジョナで Docker 使うならアリ
  • 41. (c) 2014 Masashi Shinbara @shin1x1 CI環境に使う • Jenkinsでオールテスト実行環境として利用 • ビルドの度にコンテナを生成して、テスト実行 • ビルド毎に独立した環境 • 軽量な動作で複数実行されても問題無い • いま、一番導入しやすいところ • Vagrant だとオーバーヘッドが大きい
  • 42. (c) 2014 Masashi Shinbara @shin1x1 CI運用例 Mac private repo (1) git push CI サーバ(さくらVPS) (2) hook (3) git pull (4) docker build & docker run
  • 43. (c) 2014 Masashi Shinbara @shin1x1 CI運用例 • Jenkinsプロジェクト設定(シェルの実行) sudo docker build -t ${JOB_NAME} .! sudo docker run -v ${WORKSPACE}/src:/share ${JOB_NAME}
  • 44. (c) 2014 Masashi Shinbara @shin1x1 本番環境に使う • Docker の主戦場 • PaaS / DaaS (Docker as a Service) • サーバでコンテナビルド? • ビルドしたコンテナをpush? • まだ模索中…
  • 45. (c) 2014 Masashi Shinbara @shin1x1 まとめ
  • 46. (c) 2014 Masashi Shinbara @shin1x1 まとめ • 軽量でポータブルなコンテナ • OSXで使うなら、VM が必要 • Docker ≠ better Vagrant
  • 47. @shin1x1 (c) 2014 Masashi Shinbara @shin1x1
  • 48. PHPカンファレンス関西2014 (c) 2014 Masashi Shinbara @shin1x1 http://conference.kphpug.jp/2014/ • 2014/06/28(土) • 大阪産業創造館 • セッション募集中!!