Docker基礎+docker0.9, 0.10概要

Internet

kazuyuki-mori
  • 1. Docker基礎 0.9/0.10概要 @mainyaa Image by docker blog
  • 2. Who ● @mainyaa ● Kazuyuki Mori ● フロントエンドからバックエンドまでやる系エンジニア ● AngualrJSとDocker大好き ● Topgate, Inc. - http://www.topgate.co.jp/ ● Happy New World - http://d.hatena.ne.jp/mainyaa ● 日経ソフトウエア 2014年06月号 でDockerの記事書いてます ○ WindowsでDockerやりたい人向け(ステマ)
  • 3. Docker? Image by docker blog
  • 4. デプロイの問題 ● デプロイしてみたら動きませんでした>< ● サーバーごとに違う環境変数、pythonのバー ジョン、ライブラリのバージョン ● 手元では上手くいくが、プロダクションでは転ぶ 場合にどうするか ● ロックインを避けつつスケールしたい
  • 5. Dockerとは ● オープンソースの次世代仮想化技術 ● アプリケーションを「コンテナ」にパッ ケージング&デプロイ&実行 ● 1回ビルドすればどこでも動く ● Dockerfileさえあればいつでも再現で きる ● Go言語で書かれている
  • 6. 何を解決するの? ● デプロイ作業をもっと手軽に! ○ Dockerfileを元に必要なライブラリや環境変数もまとめ てパッケージング ○ パッケージングしたコンテナ仮想環境を実行&テスト& デプロイ Dockerfileでインフラをコードとして扱える
  • 7. 何を解決するの? ● コンテナ仮想化 ○ ビルドもデプロイも高速 ○ オーバーヘッドが少ない ○ プラットフォームやハードウェアからの隔離環境 ○ ラップトップで動いているものをそのままサーバーに持っ ていける 問題が起きても、本番と同一のコンテナを手元で動かせ、shellで 入れるため再現性が高い
  • 8. 何を解決するの? ● ロールバック ○ すべてのコンテナには固有IDがある ○ Dockerfileの行ごとにコンテナIDが作られる ○ 全てのコンテナは親からの差分保存 ○ gitのように失敗した時点に戻ってやりなおせる ○ アプリケーション、DB、ネイティブツールをコンテナ単位 に疎結合に 依存関係ごとバージョン切り替え&ロールバック
  • 9. 何を解決するの? ● VMと何が違うのか ○ Dockerfileでインフラをコードにできる ○ ゲストOSがなく、カーネルを共有しているためオーバー ヘッドが少ない ○ 過去の成功分は再実行しないため、テストやCIも高速 ○ Dockerコンテナ != Linuxコンテナ
  • 10. VM vs コンテナ Image by docker document
  • 11. コンテナ? Image by nromagna
  • 12. ハイレベルから見たコンテナ ● 軽量VM ○ プロセス隔離空間 ○ ネットワーク隔離空間 ○ リソース分離:CPU, メモリのcgroupsによる制御 ○ ルートとして実行できる ○ コピーオンライト ○ ログはすべてstdout/stderr/stdin
  • 13. ローレベルから見たコンテナ ● chrootの強化版 ○ 1コンテナ=1プロセス ○ カーネルをホストと共有している ○ エミュレーションがない ■ VMでもないし準仮想化でもない ○ cgroupsによるリソース制限
  • 14. Devにとってのコンテナ ● コンテナ内だけを気にすればよい ○ アプリケーションのコード ○ アプリケーションの依存ライブラ リ ○ パッケージマネージャー ○ ネイティブアプリ ○ データ Image by hisashi_0802
  • 15. Opsにとってのコンテナ ● コンテナ外だけを気にすればよい ○ ログ ○ リモートアクセス ○ ネットワーク設定 ○ リソースモニタリング Image by グッ写/GATAGS
  • 16. Dockerfile? ● OSのスクラッチイメージからアプリケーションが動作するまでを 書いたコード ● Dockerは、ビルド時にDockerfileの1行ごとにコンテナを作り、 sha1ハッシュのコンテナIDを割り当てる ● コンテナは常に親コンテナからの差分の積み上げ ● Dockerfileの一部を変えても、成功部分は実行しないため、テ ストやCIが非常に高速になる
  • 17. FROM ubuntu:12.04 # Pull base image. RUN apt-get update RUN apt-get apt-get install -y redis-server -- no-install-recommends # Install redis. RUN apt-get clean && rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/* EXPOSE 80 # Expose ports. ENTRYPOINT ["/usr/bin/redis-server"] # Define default command.
  • 18. AUFS? ● コピーオンライト ○ 変更が発生したら初めて保存 ● レイヤー構造のファイルシステム ● 親コンテナからの差分のみを保存していく ● 差分こそDockerのキモ
  • 19. コピーオンライト+AUFS? ● ルートファイルシステムはコピーオンライトで作られる ● もし、1GBのゲストOSを10個動かそうとした場合に使用する ディスクスペースは・・・? ○ VM: 10GB ○ Docker: 1GB ● 高速デプロイ、省メモリ、省ディスクスペース
  • 20. AUFS? Image by docker document
  • 21. AUFS? Image by docker document
  • 22. AUFS? Image by docker document
  • 23. AUFS? Image by docker document
  • 24. デモ ● https://asciinema.org/a/7392
  • 25. 制約 ● Linuxでしか動かない ● Linux カーネル3.8以降 ● 64bitマシンのみ ● 運用面, securityの課題 Image by Docker blog
  • 26. まとめ ● Dockerならディスクスペースを抑えつつ仮想化できるよ ○ 固めて、積み上げて、配信して、切り替える ○ コピーオンライトによる差分 ○ どのコンテナにもshellで入って再現できる ● アプリケーションのお試しや配布が手軽にできる ● プライベートなPaaS ● 自動テストやCI ● 1日に数十回のデプロイ ● 中央集権型から分散型へ ○ CoreOS, etcd, Serf, HAProxy, SkyDNS Image by Docker blog
  • 27. Docker 0.9概要 ● execution driversにより、足回りが 抽象化された ● 多数の隔離ツールがトレードオフとと もに利用できるようになった。ドライ バは絶賛開発中 ● OpenVZ, systemd-nspawn, libvirt- lxc, libvirt-sandbox, qemu/kvm, BSD Jails, Solaris Zones, chroot Image by docker blog
  • 28. Docker 0.9概要 ● バグ修正多数 ● docker build 時に--rmがデフォルトになった ● libcontainerがデフォルトのドライバとなった ○ Pure Go-langで書かれたユーザーランドパッケージに 依存しない隔離ライブラリ ○ = lxcは必須じゃなくなった
  • 29. Docker 0.9概要 Image by Docker blog
  • 30. Docker 0.10概要 ● バグ修正多数 ● 品質向上とシステム管理者向けのアップデート ○ シグナルハンドリング修正 ○ TLS認証サポート ○ sytemdプラグインサポート
  • 31. Docker 1.0の目標 ● プロダクション品質 ● すべての主要なOSでのファーストクラスのサポート ● 小さなコアと安定したプラグインというアーキテクチャ ● 十分なドキュメント ● Dockerとパートナーによって、商用サポートができること ● Dockerの長期的なサポートを提供 Image by Docker blog
  • 32. 補足 ● Facebookグループを作ったので良かったら入ってください ● https://www.facebook. com/groups/237393613114175/ Image by Docker blog
    Please download to view
  • 32
    All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
    Description
     
    Text
    • 1. Docker基礎 0.9/0.10概要 @mainyaa Image by docker blog
  • 2. Who ● @mainyaa ● Kazuyuki Mori ● フロントエンドからバックエンドまでやる系エンジニア ● AngualrJSとDocker大好き ● Topgate, Inc. - http://www.topgate.co.jp/ ● Happy New World - http://d.hatena.ne.jp/mainyaa ● 日経ソフトウエア 2014年06月号 でDockerの記事書いてます ○ WindowsでDockerやりたい人向け(ステマ)
  • 3. Docker? Image by docker blog
  • 4. デプロイの問題 ● デプロイしてみたら動きませんでした>< ● サーバーごとに違う環境変数、pythonのバー ジョン、ライブラリのバージョン ● 手元では上手くいくが、プロダクションでは転ぶ 場合にどうするか ● ロックインを避けつつスケールしたい
  • 5. Dockerとは ● オープンソースの次世代仮想化技術 ● アプリケーションを「コンテナ」にパッ ケージング&デプロイ&実行 ● 1回ビルドすればどこでも動く ● Dockerfileさえあればいつでも再現で きる ● Go言語で書かれている
  • 6. 何を解決するの? ● デプロイ作業をもっと手軽に! ○ Dockerfileを元に必要なライブラリや環境変数もまとめ てパッケージング ○ パッケージングしたコンテナ仮想環境を実行&テスト& デプロイ Dockerfileでインフラをコードとして扱える
  • 7. 何を解決するの? ● コンテナ仮想化 ○ ビルドもデプロイも高速 ○ オーバーヘッドが少ない ○ プラットフォームやハードウェアからの隔離環境 ○ ラップトップで動いているものをそのままサーバーに持っ ていける 問題が起きても、本番と同一のコンテナを手元で動かせ、shellで 入れるため再現性が高い
  • 8. 何を解決するの? ● ロールバック ○ すべてのコンテナには固有IDがある ○ Dockerfileの行ごとにコンテナIDが作られる ○ 全てのコンテナは親からの差分保存 ○ gitのように失敗した時点に戻ってやりなおせる ○ アプリケーション、DB、ネイティブツールをコンテナ単位 に疎結合に 依存関係ごとバージョン切り替え&ロールバック
  • 9. 何を解決するの? ● VMと何が違うのか ○ Dockerfileでインフラをコードにできる ○ ゲストOSがなく、カーネルを共有しているためオーバー ヘッドが少ない ○ 過去の成功分は再実行しないため、テストやCIも高速 ○ Dockerコンテナ != Linuxコンテナ
  • 10. VM vs コンテナ Image by docker document
  • 11. コンテナ? Image by nromagna
  • 12. ハイレベルから見たコンテナ ● 軽量VM ○ プロセス隔離空間 ○ ネットワーク隔離空間 ○ リソース分離:CPU, メモリのcgroupsによる制御 ○ ルートとして実行できる ○ コピーオンライト ○ ログはすべてstdout/stderr/stdin
  • 13. ローレベルから見たコンテナ ● chrootの強化版 ○ 1コンテナ=1プロセス ○ カーネルをホストと共有している ○ エミュレーションがない ■ VMでもないし準仮想化でもない ○ cgroupsによるリソース制限
  • 14. Devにとってのコンテナ ● コンテナ内だけを気にすればよい ○ アプリケーションのコード ○ アプリケーションの依存ライブラ リ ○ パッケージマネージャー ○ ネイティブアプリ ○ データ Image by hisashi_0802
  • 15. Opsにとってのコンテナ ● コンテナ外だけを気にすればよい ○ ログ ○ リモートアクセス ○ ネットワーク設定 ○ リソースモニタリング Image by グッ写/GATAGS
  • 16. Dockerfile? ● OSのスクラッチイメージからアプリケーションが動作するまでを 書いたコード ● Dockerは、ビルド時にDockerfileの1行ごとにコンテナを作り、 sha1ハッシュのコンテナIDを割り当てる ● コンテナは常に親コンテナからの差分の積み上げ ● Dockerfileの一部を変えても、成功部分は実行しないため、テ ストやCIが非常に高速になる
  • 17. FROM ubuntu:12.04 # Pull base image. RUN apt-get update RUN apt-get apt-get install -y redis-server -- no-install-recommends # Install redis. RUN apt-get clean && rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/* EXPOSE 80 # Expose ports. ENTRYPOINT ["/usr/bin/redis-server"] # Define default command.
  • 18. AUFS? ● コピーオンライト ○ 変更が発生したら初めて保存 ● レイヤー構造のファイルシステム ● 親コンテナからの差分のみを保存していく ● 差分こそDockerのキモ
  • 19. コピーオンライト+AUFS? ● ルートファイルシステムはコピーオンライトで作られる ● もし、1GBのゲストOSを10個動かそうとした場合に使用する ディスクスペースは・・・? ○ VM: 10GB ○ Docker: 1GB ● 高速デプロイ、省メモリ、省ディスクスペース
  • 20. AUFS? Image by docker document
  • 21. AUFS? Image by docker document
  • 22. AUFS? Image by docker document
  • 23. AUFS? Image by docker document
  • 24. デモ ● https://asciinema.org/a/7392
  • 25. 制約 ● Linuxでしか動かない ● Linux カーネル3.8以降 ● 64bitマシンのみ ● 運用面, securityの課題 Image by Docker blog
  • 26. まとめ ● Dockerならディスクスペースを抑えつつ仮想化できるよ ○ 固めて、積み上げて、配信して、切り替える ○ コピーオンライトによる差分 ○ どのコンテナにもshellで入って再現できる ● アプリケーションのお試しや配布が手軽にできる ● プライベートなPaaS ● 自動テストやCI ● 1日に数十回のデプロイ ● 中央集権型から分散型へ ○ CoreOS, etcd, Serf, HAProxy, SkyDNS Image by Docker blog
  • 27. Docker 0.9概要 ● execution driversにより、足回りが 抽象化された ● 多数の隔離ツールがトレードオフとと もに利用できるようになった。ドライ バは絶賛開発中 ● OpenVZ, systemd-nspawn, libvirt- lxc, libvirt-sandbox, qemu/kvm, BSD Jails, Solaris Zones, chroot Image by docker blog
  • 28. Docker 0.9概要 ● バグ修正多数 ● docker build 時に--rmがデフォルトになった ● libcontainerがデフォルトのドライバとなった ○ Pure Go-langで書かれたユーザーランドパッケージに 依存しない隔離ライブラリ ○ = lxcは必須じゃなくなった
  • 29. Docker 0.9概要 Image by Docker blog
  • 30. Docker 0.10概要 ● バグ修正多数 ● 品質向上とシステム管理者向けのアップデート ○ シグナルハンドリング修正 ○ TLS認証サポート ○ sytemdプラグインサポート
  • 31. Docker 1.0の目標 ● プロダクション品質 ● すべての主要なOSでのファーストクラスのサポート ● 小さなコアと安定したプラグインというアーキテクチャ ● 十分なドキュメント ● Dockerとパートナーによって、商用サポートができること ● Dockerの長期的なサポートを提供 Image by Docker blog
  • 32. 補足 ● Facebookグループを作ったので良かったら入ってください ● https://www.facebook. com/groups/237393613114175/ Image by Docker blog
  • Comments
    Top