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パーフェクトガイド(2017年版)

1,570 views

Published on

JPOUG in 15 minutes #6 に登壇した際の資料。Docker基礎 in 30min.

Published in: Technology
  • Be the first to comment

はじめてのDockerパーフェクトガイド(2017年版)

  1. 1. はじめての Docker パーフェクトガイド (2017年版)
  2. 2. 自己紹介 早川 博(はやかわ ひろし) @hhiroshell • 日本オラクル 所属 • Pre-Sales Engineer / Tech Evangelist (new!) • Java SE/EE, Microservices/DevOps
  3. 3. はじめての Docker パーフェクトガイド(2017年版) 1. Dockerのテクノロジーを知る 2. Dockerの使いどころを知る 3. Dockerの周辺事情を知る
  4. 4. 1. Dockerのテクノロジーを知る
  5. 5. Dockerキーワード • コンテナって仮想化技術の一種なんだよね • すごく起動が速いんだよ。コンテナだから • コンテナにしたものはどこでも動くんだよね • れじすとり…?
  6. 6. Dockerのテクノロジー全体像 Docker Daemon コンテナ イメージ Dockerクライアント Dockerホスト Dockerレジストリ
  7. 7. Dockerのテクノロジー全体像 Docker Daemon コンテナ イメージ Dockerクライアント Dockerホスト Dockerレジストリ docker コマンド イメージ取得 コンテナ起動
  8. 8. Dockerのテクノロジー全体像 Docker Daemon コンテナ イメージ Dockerホスト Dockerレジストリ Dockerクライアント
  9. 9. Dockerクライアント • Dockerホストを操作するためのコマンドライン・インター フェース • コマンドを実行すると、Docker DaemonのREST API(Docker API)を呼び出す hhayakaw@HHAYAKAW-JP MINGW64 ~ $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE psmcli gse00002265 c8d807ff0bf2 2 days ago 704MB python 3.6 79e1dc9af1c1 4 days ago 691MB hhayakaw@HHAYAKAW-JP MINGW64 ~
  10. 10. Dockerのテクノロジー全体像 Dockerクライアント Dockerレジストリ Dockerデーモン コンテナ イメージ Dockerホスト
  11. 11. Dockerホスト • Dockerホスト • Dockerデーモン(Dockerの管理プロセス)が動く場所 • コンテナの実行環境 • イメージのキャッシュの保持 • Dockerデーモン( dockerd ) • Dockerの管理プロセス • Dockerクライアントからの指示を受けて、イメージの管理、コンテナの起動 などを行う • Dockerコンテナ/Dockerイメージ • (後述)
  12. 12. DockerイメージとDockerコンテナの関係 イメージを元にコンテナが作られる ひとつのイメージから複数のコンテナを作ることができる DockerコンテナDockerイメージ = = 雛形 動作する マシンの実態 焼型 たい焼き • 例えば…
  13. 13. 仮想化の実現方式の違い ハイパーバイザー型 vs. コンテナ型 • ハイパーバイザー型 • コンテナ型 H/W ホストOS Docker Bins/Libs App A Bins/Libs App C Bins/Libs App B ホストOS ハイパーバイザー Bins/Libs App A Bins/Libs App C Bins/Libs App B ゲストOS ゲストOSゲストOS H/W VM コンテナ
  14. 14. 仮想化の実現方式の違い ハイパーバイザー型 vs. コンテナ型 • ハイパーバイザー型 • ハイパーバイザーがHWをエ ミュレート • VMはOSの完全なコピーを保持 • コンテナ型 • ホストのHW、カーネルをコン テナが利用 • コンテナはカーネルより上位層 のみ保持 H/W ホストOS Docker Bins/Libs App A Bins/Libs App C Bins/Libs App B ホストOS ハイパーバイザー Bins/Libs App A Bins/Libs App C Bins/Libs App B ゲストOS ゲストOSゲストOS H/W
  15. 15. 仮想化の実現方式の違い ハイパーバイザー型 vs. コンテナ型 • ハイパーバイザー型 • 起動にかかる時間が長い • OSの起動を伴う上、HWエミュ レートのオーバーヘッドがある • VMの容量が大きい • 数十GB~ • パフォーマンスが落ちがち • HWエミュレートのオーバーヘッ ドのため • コンテナ型 • 起動にかかる時間が短い • ほとんどアプリケーションのプロ セスの起動のみ • コンテナの容量が小さい • 数十MB~ • パフォーマンスが落ちにくい • HWエミュレートのオーバーヘッ ドがない
  16. 16. Dockerイメージの実態 id: ow3hfw83 Dockerイメージ = カーネルを除いた、そのOSの一連のファイル群 /bin /boot /dev /etc /home /lib /lib64 /media /mnt /opt /proc /root /run /sbin /srv /sys /tmp /usr /var
  17. 17. Dockerイメージの実態 id: ow3hfw83 id: ow3hfw83 id: ow3hfw83 id: ow3hfw83 Dockerイメージ = カーネルを除いた、そのOSの一連のファイル群 に、レイヤー構造が加わったもの /bin /boot /dev /etc… 下レイヤーとの差分 下レイヤーとの差分 下レイヤーとの差分 最下層に全ての差分が適用された結果として、ファイルシステムが見える → Union File System
  18. 18. Dockerイメージの実態 id: ow3hfw83 id: ow3hfw83 id: ow3hfw83 id: ow3hfw83 Ubuntu OSのインストール・イメージ Python 3.xをインストール 必要なPIPパッケージをインストール アプリケーションをインストール 最下層に全ての差分が適用された結果として、ファイルシステムが見える → Union File System Dockerイメージ = カーネルを除いた、そのOSの一連のファイル群 に、レイヤー構造が加わったもの
  19. 19. Dockerコンテナの実態(起動前) id: ow3hfw83 id: ow3hfw83 id: ow3hfw83 id: ow3hfw83 書込み可能な最上位レイヤーを加えたUnion File System /bin /boot /dev /etc… 下レイヤーとの差分 下レイヤーとの差分 下レイヤーとの差分 id: ow3hfw83 下レイヤーとの差分(書き込み可能) 起動前のコンテナ→操作可能なファイル群だけがある状態 (c.f. シャットダウンしたPC)
  20. 20. プロセス群が利用する CPU、メモリ、ネットワーク Dockerコンテナの実態(起動後) id: ow3hfw83 id: ow3hfw83 id: ow3hfw83 id: ow3hfw83 UFSのマウント + 所望のプロセス + 必要なリソース id: ow3hfw83 + プロセス群 ただし、適切に隔離してあげる必要がある
  21. 21. 起動後のコンテナ① ファイルシステム • コンテナのファイルシス テムが、Dockerホストの 然るべきパスにマウント される • カーネルのchrootシステ ムコールを利用 / /etc /bin /data /data/cont1 /data/cont2 / /etc /bin / /etc /bin
  22. 22. 起動後のコンテナ② プロセス • カーネルの名前空間の機能 を利用して、コンテナ毎に PIDの体系を持てるように する • 名前空間が異なるプロセス 同士は、参照できないよう に隔離される /sbin/init PID 1 hoo PID 2 bar PID 3 dockerd PID 4 containerd PID 5 httpd PID 6 java PID 7 Java PID 8 httpd PID 1 java PID 1 java PID 2
  23. 23. 起動後のコンテナ③ ネットワーク • Dockerデーモンが仮想ブ リッジ docker0を構成 • 仮想NICのペア vethを仮想 ブリッジに接続 • コンテナからはeth0と言う NICがあるようにみえる • 仮想ブリッジはIPマスカ レード利用してコンテナと 外部との通信を仲介 vethveth eth0 (veth) eth0 (veth) コンテナ1 コンテナ2 eth0 仮想ブリッジ(docker0)
  24. 24. Dockerイメージの作り方 (1/2) • 起動したコンテナ上で変更を加えたものをイメージ化 id: ow3hfw83 id: ow3hfw83 Ubuntu OSのインストール・イメージ Python 3.xをインストール ←所望のPIPパッケージを追加 > docker commit id: ow3hf w83 id: ow3hf w83 id: ow3hf w83
  25. 25. Dockerイメージの作り方 (2/2) • Dockerfile • Dockerイメージの内容をテキストファイルで定義するもの • ベースのイメージを元に、その差分を一連のShellコマンドで記述 • Dockerfileを入力として、[docker build]コマンドを実行すると、 Dockerfileの内容を元にイメージが作られる > docker build id: ow3hf w83 id: ow3hf w83 id: ow3hf w83 Dockerfile
  26. 26. FROM python:3.6 ARG user ARG password WORKDIR /root # Install PIP Package RUN curl -X GET -u ${user}:${password} -H X-ID-TENANT- NAME:sample_domain -o psmcli.zip RUN pip3 install -U psmcli.zip # Setup Installed Pacakge RUN psm setup Python 3.6のインストールイメージを取得 (後続のコマンドのための環境設定) PIPパッケージのダウンロード PIPパッケージのインストール (コンテナのデフォルト起動プロセスを指定) Dockerfileの例
  27. 27. Dockerのテクノロジー全体像 Dockerクライアント Dockerデーモン コンテナ イメージ Dockerホスト Dockerレジストリ
  28. 28. Dockerレジストリ • Dockerイメージの保管・配送システム • Docker公式の「Docker Hub」のほか、サードパーティが公開 しているレジストリや、自分で構築したレジストリを利用可能 Dockerクライアント Dockerデーモン コンテナ イメージ Dockerホスト Docker Hub Oracle Container Registry
  29. 29. Dockerキーワード • コンテナって仮想化技術の一種なんだよね • すごく起動が速いんだよ。コンテナだから • コンテナにしたものはどこでも動くんだよね • レジストリ!
  30. 30. 2. Dockerの使い所を知る
  31. 31. Dockerの特徴を振り返る • 高い可搬性 • どこでも動く • 単体で必要な依存関係含めコンテナにパッケージ • 軽量/高速 • イメージの容量 • 高速起動 • Hypervisorのオーバーヘッドなし • エコシステム • イメージの公開再利用 • コンテナレジストリを介した連携
  32. 32. アプリケーション開発① • 継続的デリバリー • 各テストフェーズでの環境構築の省力化/品質向上 • 開発→リリースまでのリードタイムを短縮 手作業での テスト コンテナ レジストリ 自動受け入れ テスト 自動 キャパシティ テスト リリースコミットステージ ソースコード リポジトリ コミット コンテナとしてビルド。以降のフェーズで使い回し
  33. 33. アプリケーション開発② • ローカル開発環境を快適に… • コンテナで本番同等のMW環境をつくって常に動作確認 コンテナレジストリ開発用WLSイメージ 実装 UT war 作成 IT 開発者用 PC ここまで完全自動化 手動テストフェーズへ
  34. 34. アプリケーションの運用環境 • Kubernetesクラスター • 大規模なアクセス数変動に耐える柔軟性を、オーケストレーションの しくみと組み合わせることで実現
  35. 35. 特殊なSWの隔離とパッケージ化 • インストールすると他のSWの動作に影響し易いSW(煩雑な依 存条件があるなど)をコンテナにパッケージングして隔離 • 動作環境の構築が難しいSWをコンテナ化して、公開再利用 →ニッチな用途の実行環境をゲットできる • 例: • キーボードのファームウェアの ビルド(make)環境 • Python2.xに依存するコマンド ラインツールの実行環境
  36. 36. 3. Dockerの周辺事情を知る
  37. 37. 抑えておくべきキーワード • コンテナ・オーケストレーション • Cloud Native Computing Foundation
  38. 38. コンテナ・オーケストレーション • コンテナのデプロイとスケーリング自動化するプラットフォーム • Kubernetes, MESOS, Docker Swarm • Kubernetesがデファクトになりつつある状況 • CNCFによるバックアップ • Google, MS等によるホスティングサービスの提供 • Docker EE でのKubernetesサポート開始 (2017~)
  39. 39. コンテナ・オーケストレーション
  40. 40. こういうことがしたい 大きなリソースのプール
  41. 41. こういうことがしたい コンテナ はい! 動け!
  42. 42. こういうことがしたい はい! がんばれ! 自動で複数のマシンに分散配置
  43. 43. こういうことがしたい はい! 自律的にローリングアップデート アップグレード!
  44. 44. こういうことがしたい はい! コンテナが落ちたら自動で新たに立ち上げる
  45. 45. Cloud Native Computing Foundation • Linux Foundationの中のプロジェクト • コンテナとその周辺技術に関するOSSのプロジェクトを、多数ホストして いる • Kubernetes • fluentd • Prometheus • … • 多数のメジャーSWベンダーがプラチナメンバーとして参画 • CNCFのバックアップ=これらの企業の人的/金銭的な投資が入る Platinum Members
  46. 46. はじめての Docker パーフェクトガイド(2017年版)まとめ 1. Dockerのテクノロジー • ハイパフォーマンス • 高い可搬性 • レジストリを中心にしたエコシステム 2. Dockerの使い所 • 開発環境 (DevOps) • 大規模本番環境 • 便利ツール 3. Dockerの周辺事情 • コンテナオーケストレーションがホット

×