Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

VagrantユーザのためのDocker入門

55,446 views

Published on

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

Published in: Engineering
  • Be the first to comment

VagrantユーザのためのDocker入門

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

×