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.

Docker事始めと最新動向 2015年6月

4,048 views

Published on

OSSユーザーのための勉強会 < OSS X Users Meeting > #9 Docker での発表資料です。

Published in: Engineering
  • Be the first to comment

Docker事始めと最新動向 2015年6月

  1. 1. Docker事始めと最新動向 Haruka Iwao Storage Solution Architect, Red Hat K.K. June 5, 2015
  2. 2. 自己紹介 •  岩尾 はるか (@Yuryu) •  所属: レッドハット株式会社 – ストレージソリューションアーキテクト – 大手家電メーカー、ソーシャルゲーム会社、 Web広告ベンチャーを経て現職 •  大学・大学院で高性能計算(HPC)、分散 ファイルシステムを研究 •  ゲーマーです(水鉄砲でペンキ飛ばしたい)
  3. 3. © Red Hat K.K. All Rights Reserved. 3
  4. 4. Dockerとは •  コンテナ技術を利用したアプリケーショ ンプラットフォーム – “Operating System of the Cloud Era” •  コンテナ+イメージ管理+α •  Kubernetes などの周辺ツールも急速に進 化 © Red Hat K.K. All Rights Reserved. 4
  5. 5. Docker by Google Trends © Red Hat K.K. All Rights Reserved. 5
  6. 6. コンテナとは © Red Hat K.K. All Rights Reserved. 6 Linux KVM コンテナ
  7. 7. Linux コンテナの特徴 •  Linux標準のOSレベル仮想化機能 © Red Hat K.K. All Rights Reserved. 7 非仮想化環境 コンテナ環境
  8. 8. Linuxコンテナの特徴(2) •  コンテナごとに独立したリソースを割り 当てることで、アプリケーションの実行 環境を分離 – 異なるプロセスID – 異なるファイルシステム – 異なるネットワーク設定(仮想NIC) – CPU、メモリ割当量を制限 •  ソフトウェア仮想化と共存が可能 – クラウドの仮想マシン上でも動作 © Red Hat K.K. All Rights Reserved. 8
  9. 9. DockerとLinuxコンテナ •  Dockerは、コンテナを実現する上でLinux カーネルに既に存在する機能を活用 – Cgroup, namespace – 基盤技術として実績がある •  Dockerの考え方は、”Immutable Infrastructure”と相性が良い – Dockerfile によるコンテナ生成(再現性) – OSファイルごとイメージ化(環境非依存性) © Red Hat K.K. All Rights Reserved. 9
  10. 10. DockerとLinuxコンテナ(2) © Red Hat K.K. All Rights Reserved. 10 eth0 eth0 App ファイルシステム   /   ├──  bin   ├──  etc   ├──  usr   └──  ...   コンテナ イメージファイル App NATDevicemapper Docker Linuxコンテナ(プロセスグループ) ホストOS 作成・管理 172.17.0.1 10.0.0.1
  11. 11. Dockerイメージ © Red Hat K.K. All Rights Reserved. 11
  12. 12. Dockerイメージの構造 RHEL nginx Webサーバー OSの基本 ファイル OSの基本 ファイル OSの基本 ファイル nginx nginx HTML ファイル 追加 追加 nginxイメージを元に作成 RHELイメージを元に作成 実体は共有 新規
  13. 13. 起動、終了が非常に高速 •  新しくコンテナを起動、実行、終了させ るのに約0.2秒(Core i7 4558U 2.8GHz) © Red Hat K.K. All Rights Reserved. 13 #  time  docker  run      -­‐t  registry.access.redhat.com/rhel      /bin/true     real  0m0.234s   user  0m0.010s   sys  0m0.020s  
  14. 14. Dockerの開発状況 © Red Hat K.K. All Rights Reserved. 14
  15. 15. コンテナ向けLinuxの登場 •  コンテナに最適化されたdistroの登場 – CoreOS – Project Atomic – Red Hat Enterprise Linux Atomic Host – Snappy Ubuntu Core •  小さなフットプリント •  分散システム向けの機能を持つものも – 例: etcd, fleet © Red Hat K.K. All Rights Reserved. 15
  16. 16. DockerCon •  米サンフランシスコにて、Docker専門の カンファレンスが開催(2年目) © Red Hat K.K. All Rights Reserved. 16
  17. 17. © Red Hat K.K. All Rights Reserved. 17 http://blog.docker.com/2014/06/keynote-videos-from-dockercon14/
  18. 18. Dockerへの支持 •  クラウド環境でのサポート – Red Hat OpenShift – Amazon Web Services – Google Cloud Platform •  周辺ソフトウェア – Kubernetes – Chef for Containers © Red Hat K.K. All Rights Reserved. 18
  19. 19. Red Hat の取り組み •  RHELへの移植 •  Device mapper thin- provisioning への対応 – ディスク性能の向上 •  Systemd(RHEL7のプ ロセス管理機能)との 統合 •  SELinuxへの対応 © Red Hat K.K. All Rights Reserved. 19 http://blog.docker.com/2014/06/keynote-videos-from- dockercon14/
  20. 20. Docker in RHEL 7 •  RHEL 7 の “Extras” チャンネルで利用可能 •  フルサポートですぐに利用可能 © Red Hat K.K. All Rights Reserved. 20
  21. 21. RHEL6からRHEL7上のコンテナへ © Red Hat K.K. All Rights Reserved. 21 互換性を保ちつつ、OSレベルの新機能を活用
  22. 22. •  コンテナホストのための最低限のOS環境 – Dockerに対応 – Systemd, SELinux 対応 – 少ないディスク、メモリ消費 – rpm-ostreeの採用 •  既存の契約で利用可能 RHEL Atomic Host © Red Hat K.K. All Rights Reserved. 22 [1]  https://access.redhat.com/products/red-­‐hat-­‐enterprise-­‐linux/atomic-­‐host-­‐beta
  23. 23. rpm-ostree •  Atomic Host における yum の代替 •  システム全体をスナップショットのよう に管理 •  依存関係を追跡しないので高速 •  バージョンアップ、ダウンが容易 – rpm-ostree {upgrade|rollback|status|…} © Red Hat K.K. All Rights Reserved. 23
  24. 24. コンテナのポータビリティ © Red Hat K.K. All Rights Reserved. 24
  25. 25. Continuous Delivery with Docker © Red Hat K.K. All Rights Reserved. 25 開発者 A 開発者 B コードをpush notify & build notify & test 開発・テスト 開発者 C デプロイ
  26. 26. コードからデプロイの高速化 •  コミットしてからユーザーに届くまで、 分単位で完了 •  価値を届けるのを高速化 •  Amazonは11.6秒に1度デプロイしている •  Googleは1週間に20億のコンテナを起動
  27. 27. Dockerを使ってみる
  28. 28. Dockerイメージの作成手順 •  2ステップで作成できます •  Dockerfile の作成 •  $ docker build -t <tag> Dockerfileの場所 – 例) $ docker build -t yuryu/test .
  29. 29. Dockerfileとは •  イメージ作成の手順を書いたもの •  例) FROM  registry.access.redhat.com/rhel     RUN  yum  -­‐y  install  httpd   ADD  index.html  /var/www/html/index.html     EXPOSE  80     CMD  ["/usr/sbin/httpd",  "-­‐DFOREGROUND"]  
  30. 30. Dockerfile 文法 •  FROM - ベースとなるイメージ •  RUN - イメージ構築で実行するコマンド •  ADD - イメージ内にファイルを追加 •  EXPOSE - ポートを外に見せる •  CMD - デフォルトで実行されるコマンド FROM  registry.access.redhat.com/rhel     RUN  yum  -­‐y  install  httpd   ADD  index.html  /var/www/html/index.html     EXPOSE  80     CMD  ["/usr/sbin/httpd",  "-­‐DFOREGROUND"]  
  31. 31. Dockerfile 文法(2) •  MAINTAINER - メンテナを書く •  USER - コンテナ内で実行するユーザー •  WORKDIR - 基準ディレクトリの変更 •  COPY - ホストからファイルのコピー – ADD が大きすぎるので分割 •  その他リファレンスは下記 – https://docs.docker.com/reference/ builder/  
  32. 32. 作って動かす •  $ docker run で実行 – -d バックグラウンドで実行 – -P EXPOSE したポートを割り当て $  mkdir  demo-­‐apache   $  cd  demo-­‐apache   $  curl  -­‐L  -­‐o  Dockerfile  bit.ly/1FA902p   $  echo  “Hello,  Docker!”  >  index.html   $  build  -­‐t  demo-­‐apache  .     $  docker  run  -­‐dP  demo-­‐apache  
  33. 33. docker build 実行例 [yuryu@rhel7  docker-­‐apache]$  docker  build  -­‐t  demo-­‐apache  .   Sending  build  context  to  Docker  daemon  3.584  kB   Sending  build  context  to  Docker  daemon     Step  0  :  FROM  registry.access.redhat.com/rhel    -­‐-­‐-­‐>  e1f5733f050b   Step  1  :  RUN  yum  -­‐y  install  httpd    -­‐-­‐-­‐>  Using  cache    -­‐-­‐-­‐>  3679b20fa9ba   Step  2  :  ADD  index.html  /var/www/html/index.html    -­‐-­‐-­‐>  Using  cache    -­‐-­‐-­‐>  db91c285d5ad   Step  3  :  EXPOSE  80    -­‐-­‐-­‐>  Using  cache    -­‐-­‐-­‐>  c9ceb17b169f   Step  4  :  CMD  /usr/sbin/httpd  -­‐DFOREGROUND    -­‐-­‐-­‐>  Using  cache    -­‐-­‐-­‐>  4e99155706f6   Successfully  built  4e99155706f6  
  34. 34. docker run 実行例 •  ランダムなポートと、コンテナID、コン テナ名が割り当てられる [yuryu@rhel7  docker-­‐apache]$  docker  run  -­‐dP  demo-­‐apache   8d6b20a1e23427ad575bed1aee9cbea5406e5ed648a645e955cd6c6c6a 34ea0a   [yuryu@rhel7  docker-­‐apache]$  docker  ps   CONTAINER  ID                IMAGE                                COMMAND                             CREATED                          STATUS                            PORTS                                   NAMES   8d6b20a1e234                demo-­‐apache:latest      "/usr/sbin/httpd   -­‐DF      4  seconds  ago              Up  4  seconds                 0.0.0.0:49247-­‐>80/tcp        jovial_jones                  
  35. 35. Docker周辺ツールの紹介
  36. 36. libnetwork •  コンテナのためのネットワーク •  Linux Bridge, vxlan などを使って、コンテ ナごとにカスタムのネットワークを作成 •  Docker本体から利用可能(予定)
  37. 37. Docker Compose •  複数コンテナからなるアプリを定義 •  YAMLで記述 •  この例はpython appとredis
  38. 38. Docker Machine •  仮想マシン、クラウド上のインスタンス を同等に扱うツール(ベータ)
  39. 39. Docker Swarm •  複数のマシンを1台の仮想的なDockerホス トとして管理するツール •  クラスタが作れる •  現在ベータ
  40. 40. cAdvisor •  Dockerのための監視ツール – https://github.com/google/cadvisor
  41. 41. cAdvisorの画面
  42. 42. cAdvisor起動方法 #  setenforce  Permissive   $  docker  run        -­‐-­‐volume=/:/rootfs:ro        -­‐-­‐volume=/var/run:/var/run:rw        -­‐-­‐volume=/sys:/sys:ro        -­‐-­‐volume=/var/lib/docker/:/var/lib/docker:ro        -­‐-­‐publish=8080:8080        -­‐-­‐detach=true        -­‐-­‐name=cadvisor        -­‐-­‐volume=/cgroup:/cgroup        google/cadvisor:latest
  43. 43. Kubernetes •  複数のDockerコンテナを管理するツール •  Googleが中心となって開発 – Borg での経験がベース •  AWSのELB, Auto Scaling, CloudFormation に似た機能を持つイメージ
  44. 44. Kubernetes Master Pod Container Minion MinionPod Container Minion Kubelet Proxy Internet
  45. 45. Kubernetesにないもの •  コードからサービスへの一貫した管理 – テスト、デプロイとの統合など •  ユーザー、認証、権限管理 •  ネットワークの分離 •  WebUI
  46. 46. OpenShift とは •  オープンソースのPaaS •  OpenShift Origin (upstream) – https://github.com/openshift/origin •  OpenShift by Red Hat
  47. 47. OpenShift v3 •  PaaSに必要な機能を追加 – ユーザ管理、認証 – ネットワークの分離 – ソースからデプロイまでの 一貫したシステム •  Docker, Kubernetes と正 しく役割分担 – Simple, robust
  48. 48. STI (Source to Image) •  Gitレポジトリを指定 •  自動的にコンテナイメージを作成・更新 •  差分ビルドによる高速化 •  アプリケーションのビルド、コンテナの ビルドを一体化して管理 •  コード変更からデプロイを簡単・高速化
  49. 49. vxlanでネットワークを分離 Pod Container Minion MinionPod Container Kubelet Proxy Minion vxlan
  50. 50. Web UI、ネットワーク管理、ユーザー管理 Jenkinsとの連携 ソースからサービス構築などのサービス コンテナのファイルフォーマット Linuxコンテナへのインタフェース プロキシ、ロードバランサの提供 コンテナのライフサイクル管理 コンテナを組み合わせてサービスを作る
  51. 51. ご清聴ありがとうございました

×