"Docker is NOT Container." 
~ Dockerとコンテナ技術、PaaSの関係を理解する 
レッドハット株式会社 
中井悦司 / Etsuji Nakai 
Senior Solution Architect 
and Cloud Evangelist 
v1.1 2014/11/12
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する 
自己紹介 
 中井悦司(なかいえつじ) 
2 
– Twitter @enakai00 
 日々の仕事 
– Senior Solution Architect and 
Cloud Evangelist at Red Hat K.K. 
企業システムでオープンソースの活用を希望される 
お客様を全力でご支援させていただきます。 
 昔とった杵柄 
– 素粒子論の研究(超弦理論とか) 
– 予備校講師(物理担当) 
– インフラエンジニア(Unix/Linux専門) 
好評発売中
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する 
Contents 
 Dockerが生まれた背景 
 Dockerが実現するアプリケーション開発の世界 
 Dockerを本番サービスに適用するメリット 
 今後の発展 
3
Dockerが生まれた背景
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する 
History 
 2011年 米dotCloud社がパブリックのPaaSサービスを提供開始 
 2013年 dotCloudのコア技術を「Docker」として公開 
 2014年 dotCloud社は、Docker, Inc.に社名を変更して、Dockerを 
     活用したサービス、製品にビジネスを切り替えることを表明 (*) 
5 
(*) dotCloudのPaaSサービスは、米cloudControl社が事業を引き継いでサービスを提供中 
  https://www.dotcloud.com/about.html
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する 
Dockerに対するRed Hatの貢献 
 Red Hatの開発協力により、RHEL対応とさらなる機能拡張を継続 
6 
– RHEL7での正式サポート 
– RHELのThin Provisioning機能対応(ディスク性能の向上) 
– RHEL7のプロセス管理機能(systemd)との統合
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する 
クラウドサービスとしてのPaaS環境の課題 (1) 
 PaaSのメリット 
⇒ 実行環境の構築・管理に手間をかけず、アプリケーション開発に集中 
7 
アプリケーション実行環境 
(フレームワーク/ライブラリー) 
サーバー/OS 
開発したコードを 
クラウドにデプロイ 
アプリケーション 
プログラム
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する 
クラウドサービスとしてのPaaS環境の課題 (2) 
アプリケーションのコードと実行環境は、多くの場合、密結合しており、 
「ありもの」の実行環境だけでは、不便が生じることも多い 
8 
アプリケーション 
プログラム 
アプリケーション実行環境 
(フレームワーク/ライブラリー) 
サーバー/OS 
「悪魔は細部に宿る」 
・使いたいフレームワークが無い 
・必要なライブラリーが不足 
・ライブラリーバージョンの不整合 
・etc...
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する 
dotCloudが実行環境のメンテナンスに用意した仕組み 
 dotCloudは、クラウド内部の仕組みとして、アプリケーションの実行環 
境を自動構築して「Dockerイメージ」に固める技術を開発 
9 
–さらに、クラウド以外の環境でも利用できるようにオープンソースとして公開 
アプリケーション 
プログラム 
Dockerサービス 
サーバー/OS 
さまざまな実行環境を 
Dockerイメージとして 
作成・メンテナンス 
Docker 
イメージ
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する 
(参考)Linuxコンテナーの仕組み 
 「Linuxコンテナー」は、プロセスグループごとに独立したOS環境を見せる技術 
– ローカルディスクの内容(ディレクトリー内のファイル) 
– ネットワーク環境(NIC、IPアドレス) 
– CPU、メモリー割り当て 
※ Dockerよりもずっと古くから存在する技術です。 
10 
通常のLinux環境コンテナーで分割した環境 
コンテナー 
アプリケーション 
・・・ 
Linuxカーネル 
アプリケーション 
物理サーバー/仮想マシン 
Linuxカーネル 
・・・ 
コンテナー 
物理サーバー/仮想マシン 
コンテナーごとに 
見える環境が異なる 
すべてのアプリケーション 
から同じ環境が見える 
アプリケーション 
アプリケーション
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する 
Dockerとコンテナの関係 
11 
コンテナー 
アプリケーション 
ルートディレクトリー 
ディレクトリーツリー 
として割り当て 
Linux上にマウント 
 「Dockerイメージ」の実体は、コンテナーに 
割り当てるディスクイメージに、ネットワー 
ク設定などの環境情報を付与したものにすぎ 
ません。 
 Dockerの真の価値は、次のような「イメージ 
管理機能」にあります。 
– Dockerfile: 
Dockerイメージを自動作成する仕組み 
– Docker Hub: 
Dockerイメージを共有・配布する仕組み 
Dockerイメージ
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する 
Dockerが提供する基本機能 
12 
① Dockerイメージを自動作成 
Dockerfile 
アプリケーション 
フレームワーク 
アプリケーション 
ライブラリー 
OSイメージ 
イメージの 
作成手順を記載 
Docker 
イメージ 
OS上にインストール可能な 
ものはすべてイメージ化可能 
② Dockerイメージを保存・公開 
③ Dockerサーバーに 
 イメージを配布・実行
Dockerが実現する 
アプリケーション開発の世界
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する 
Dockerを活用したアプリケーション開発の世界 
 ローカルの開発環境を利用しながら、多数の開発者に同一の開発環境を提供。 
14 
– テストサーバーにも同じ環境を提供することで、「環境差異による問題発生」を防止 
 Dockerfileからイメージを自動作成するので、イメージの修正・変更・再配布が容易 
– 開発コードのように、実行環境を「バージョン管理」可能に 
フレームワーク 
データベース 
Dockerイメージを 
自動作成 
Dockerfile 
開発・テスト環境に 
Dockerイメージを配布 
CIツールにより 
インテグレーション 
テストを自動実行 
開発コードを 
コードリポジトリー 
にプッシュ
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する 
ちょっと脱線:ソフトウェアの変更要求が高まる背景 
 ビジネス要件の変化と技術の進歩に開発速度が追いつかない現状 
15 
要件定義設計  コーディングテスト運用 
要件定義の際に決めたシステムが・・・ 運用開始時は既に時代遅れに!
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する 
ちょっと脱線:ソフトウェアの変更要求が高まる背景 
16 
設計 
要件定義 
テスト 
運用 
開発期間の短縮 
設計 
要件定義 
継続的なアップデート 
テスト 
設計 
要件定義 
テスト 
開発期間の短縮と継続的なアップデートが必要に。 
「継続的インテグレーション」 
(CI) の適用 
「継続的デリバリー」 
の実践 
コ ディング 
ー 
コ ディング 
ー 
コ ディング 
ー
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する 
ちょっと脱線:CIツールによる継続的インテグレーション 
17 
ビルドとテストの自動実行マシンの世界 
人間の世界 
結果レポートの作成 
テスト結果、コード分析結果 
カバレッジの推移など 
コード 
コミット 
開発者 
レポートのフィードバック 
コード 
リポジトリ 
CIツール 
マシンと人間の役割を明確に 
分離したプロセスがCIの肝 
このようなCI環境もDockerを 
利用すると簡単に準備が可能
Dockerを本番サービスに 
適用するメリット
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する 
Container Usage at Google 
19 
We start over 2billion 
containers per week. 
https://speakerdeck.com/jbeda/containers-at-scale
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する 
 テストが実施された「確実動くアプリケーション」をそのままDockerイメージに 
固めて、本番環境に自動デプロイするという運用を想像してみましょう・・・。 
20 
フレームワーク 
データベース 
アプリケーション 
フレームワーク 
ライブラリー 
Dockerイメージを 
本番環境に展開! 
サービス環境へのDocker適用のメリット
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する 
Dockerによる自動デプロイのメリット 
「Immutable Infrastructre」を実現して 
構成管理を容易に! 
Immutable Infrastructureとは? 
–アプリケーションの設定変更、バージョンアップなどは、稼働中の本番環境を 
21 
いじるのではなく、大元のコードを変更して再テストした後に、本番環境を新 
規構築してそっくり置き換えるという運用手法。 
–運用中の環境変更するリスク(想定外の不具合)を回避して、常にテスト済み 
の環境を本番提供可能に。 
–同一構成のサーバーを大量に並べるスケールアウト環境で、多数のサーバーの 
構成を常に同一に保ち続ける。 
 Dockerイメージによる自動デプロイにより、これまで実現困難と言われていた 
「Immutable Infrastructre」がついに実現可能になります。
今後の発展
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する 
Kubernetes:Dockerをより高度に管理する仕組みを提供 
今後は、Kubernetesを利用した 
PaaS基盤が開発されていきます 
http://jp.techcrunch.com/2014/07/11/20140710google-microsoft-ibm-and-others-collaborate-to-make-managing-docker-containers-easier/ 
23
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する 
(参考)Kubernetesの基本機能 
 Kubernetesの役割は、複数の物理サーバーを統合して1つの「Docker 
サーバー」に見せること 
24 
– 開発計画中の機能の例 
• Dockerイメージの自動配置 
• コンテナーを配置するサーバーの最適化 
• コンテナー間のネットワーク通信経路の確保 
• 負荷に応じてコンテナーを増減するオートスケール 
• サーバー障害時のコンテナー再配置 
• など・・・ 
・・・ 
・・・
EMPOWER PEOPLE, 
EMPOWER ENTERPRISE, 
OPEN INNOVATION.

第37回「Dockerのユースケースと将来」(2014/10/30 on しすなま!)

  • 1.
    "Docker is NOTContainer." ~ Dockerとコンテナ技術、PaaSの関係を理解する レッドハット株式会社 中井悦司 / Etsuji Nakai Senior Solution Architect and Cloud Evangelist v1.1 2014/11/12
  • 2.
    "Docker is NOTContainer." ~ Dockerとコンテナ技術、PaaSの関係を理解する 自己紹介  中井悦司(なかいえつじ) 2 – Twitter @enakai00  日々の仕事 – Senior Solution Architect and Cloud Evangelist at Red Hat K.K. 企業システムでオープンソースの活用を希望される お客様を全力でご支援させていただきます。  昔とった杵柄 – 素粒子論の研究(超弦理論とか) – 予備校講師(物理担当) – インフラエンジニア(Unix/Linux専門) 好評発売中
  • 3.
    "Docker is NOTContainer." ~ Dockerとコンテナ技術、PaaSの関係を理解する Contents  Dockerが生まれた背景  Dockerが実現するアプリケーション開発の世界  Dockerを本番サービスに適用するメリット  今後の発展 3
  • 4.
  • 5.
    "Docker is NOTContainer." ~ Dockerとコンテナ技術、PaaSの関係を理解する History  2011年 米dotCloud社がパブリックのPaaSサービスを提供開始  2013年 dotCloudのコア技術を「Docker」として公開  2014年 dotCloud社は、Docker, Inc.に社名を変更して、Dockerを      活用したサービス、製品にビジネスを切り替えることを表明 (*) 5 (*) dotCloudのPaaSサービスは、米cloudControl社が事業を引き継いでサービスを提供中   https://www.dotcloud.com/about.html
  • 6.
    "Docker is NOTContainer." ~ Dockerとコンテナ技術、PaaSの関係を理解する Dockerに対するRed Hatの貢献  Red Hatの開発協力により、RHEL対応とさらなる機能拡張を継続 6 – RHEL7での正式サポート – RHELのThin Provisioning機能対応(ディスク性能の向上) – RHEL7のプロセス管理機能(systemd)との統合
  • 7.
    "Docker is NOTContainer." ~ Dockerとコンテナ技術、PaaSの関係を理解する クラウドサービスとしてのPaaS環境の課題 (1)  PaaSのメリット ⇒ 実行環境の構築・管理に手間をかけず、アプリケーション開発に集中 7 アプリケーション実行環境 (フレームワーク/ライブラリー) サーバー/OS 開発したコードを クラウドにデプロイ アプリケーション プログラム
  • 8.
    "Docker is NOTContainer." ~ Dockerとコンテナ技術、PaaSの関係を理解する クラウドサービスとしてのPaaS環境の課題 (2) アプリケーションのコードと実行環境は、多くの場合、密結合しており、 「ありもの」の実行環境だけでは、不便が生じることも多い 8 アプリケーション プログラム アプリケーション実行環境 (フレームワーク/ライブラリー) サーバー/OS 「悪魔は細部に宿る」 ・使いたいフレームワークが無い ・必要なライブラリーが不足 ・ライブラリーバージョンの不整合 ・etc...
  • 9.
    "Docker is NOTContainer." ~ Dockerとコンテナ技術、PaaSの関係を理解する dotCloudが実行環境のメンテナンスに用意した仕組み  dotCloudは、クラウド内部の仕組みとして、アプリケーションの実行環 境を自動構築して「Dockerイメージ」に固める技術を開発 9 –さらに、クラウド以外の環境でも利用できるようにオープンソースとして公開 アプリケーション プログラム Dockerサービス サーバー/OS さまざまな実行環境を Dockerイメージとして 作成・メンテナンス Docker イメージ
  • 10.
    "Docker is NOTContainer." ~ Dockerとコンテナ技術、PaaSの関係を理解する (参考)Linuxコンテナーの仕組み  「Linuxコンテナー」は、プロセスグループごとに独立したOS環境を見せる技術 – ローカルディスクの内容(ディレクトリー内のファイル) – ネットワーク環境(NIC、IPアドレス) – CPU、メモリー割り当て ※ Dockerよりもずっと古くから存在する技術です。 10 通常のLinux環境コンテナーで分割した環境 コンテナー アプリケーション ・・・ Linuxカーネル アプリケーション 物理サーバー/仮想マシン Linuxカーネル ・・・ コンテナー 物理サーバー/仮想マシン コンテナーごとに 見える環境が異なる すべてのアプリケーション から同じ環境が見える アプリケーション アプリケーション
  • 11.
    "Docker is NOTContainer." ~ Dockerとコンテナ技術、PaaSの関係を理解する Dockerとコンテナの関係 11 コンテナー アプリケーション ルートディレクトリー ディレクトリーツリー として割り当て Linux上にマウント  「Dockerイメージ」の実体は、コンテナーに 割り当てるディスクイメージに、ネットワー ク設定などの環境情報を付与したものにすぎ ません。  Dockerの真の価値は、次のような「イメージ 管理機能」にあります。 – Dockerfile: Dockerイメージを自動作成する仕組み – Docker Hub: Dockerイメージを共有・配布する仕組み Dockerイメージ
  • 12.
    "Docker is NOTContainer." ~ Dockerとコンテナ技術、PaaSの関係を理解する Dockerが提供する基本機能 12 ① Dockerイメージを自動作成 Dockerfile アプリケーション フレームワーク アプリケーション ライブラリー OSイメージ イメージの 作成手順を記載 Docker イメージ OS上にインストール可能な ものはすべてイメージ化可能 ② Dockerイメージを保存・公開 ③ Dockerサーバーに  イメージを配布・実行
  • 13.
  • 14.
    "Docker is NOTContainer." ~ Dockerとコンテナ技術、PaaSの関係を理解する Dockerを活用したアプリケーション開発の世界  ローカルの開発環境を利用しながら、多数の開発者に同一の開発環境を提供。 14 – テストサーバーにも同じ環境を提供することで、「環境差異による問題発生」を防止  Dockerfileからイメージを自動作成するので、イメージの修正・変更・再配布が容易 – 開発コードのように、実行環境を「バージョン管理」可能に フレームワーク データベース Dockerイメージを 自動作成 Dockerfile 開発・テスト環境に Dockerイメージを配布 CIツールにより インテグレーション テストを自動実行 開発コードを コードリポジトリー にプッシュ
  • 15.
    "Docker is NOTContainer." ~ Dockerとコンテナ技術、PaaSの関係を理解する ちょっと脱線:ソフトウェアの変更要求が高まる背景  ビジネス要件の変化と技術の進歩に開発速度が追いつかない現状 15 要件定義設計  コーディングテスト運用 要件定義の際に決めたシステムが・・・ 運用開始時は既に時代遅れに!
  • 16.
    "Docker is NOTContainer." ~ Dockerとコンテナ技術、PaaSの関係を理解する ちょっと脱線:ソフトウェアの変更要求が高まる背景 16 設計 要件定義 テスト 運用 開発期間の短縮 設計 要件定義 継続的なアップデート テスト 設計 要件定義 テスト 開発期間の短縮と継続的なアップデートが必要に。 「継続的インテグレーション」 (CI) の適用 「継続的デリバリー」 の実践 コ ディング ー コ ディング ー コ ディング ー
  • 17.
    "Docker is NOTContainer." ~ Dockerとコンテナ技術、PaaSの関係を理解する ちょっと脱線:CIツールによる継続的インテグレーション 17 ビルドとテストの自動実行マシンの世界 人間の世界 結果レポートの作成 テスト結果、コード分析結果 カバレッジの推移など コード コミット 開発者 レポートのフィードバック コード リポジトリ CIツール マシンと人間の役割を明確に 分離したプロセスがCIの肝 このようなCI環境もDockerを 利用すると簡単に準備が可能
  • 18.
  • 19.
    "Docker is NOTContainer." ~ Dockerとコンテナ技術、PaaSの関係を理解する Container Usage at Google 19 We start over 2billion containers per week. https://speakerdeck.com/jbeda/containers-at-scale
  • 20.
    "Docker is NOTContainer." ~ Dockerとコンテナ技術、PaaSの関係を理解する  テストが実施された「確実動くアプリケーション」をそのままDockerイメージに 固めて、本番環境に自動デプロイするという運用を想像してみましょう・・・。 20 フレームワーク データベース アプリケーション フレームワーク ライブラリー Dockerイメージを 本番環境に展開! サービス環境へのDocker適用のメリット
  • 21.
    "Docker is NOTContainer." ~ Dockerとコンテナ技術、PaaSの関係を理解する Dockerによる自動デプロイのメリット 「Immutable Infrastructre」を実現して 構成管理を容易に! Immutable Infrastructureとは? –アプリケーションの設定変更、バージョンアップなどは、稼働中の本番環境を 21 いじるのではなく、大元のコードを変更して再テストした後に、本番環境を新 規構築してそっくり置き換えるという運用手法。 –運用中の環境変更するリスク(想定外の不具合)を回避して、常にテスト済み の環境を本番提供可能に。 –同一構成のサーバーを大量に並べるスケールアウト環境で、多数のサーバーの 構成を常に同一に保ち続ける。  Dockerイメージによる自動デプロイにより、これまで実現困難と言われていた 「Immutable Infrastructre」がついに実現可能になります。
  • 22.
  • 23.
    "Docker is NOTContainer." ~ Dockerとコンテナ技術、PaaSの関係を理解する Kubernetes:Dockerをより高度に管理する仕組みを提供 今後は、Kubernetesを利用した PaaS基盤が開発されていきます http://jp.techcrunch.com/2014/07/11/20140710google-microsoft-ibm-and-others-collaborate-to-make-managing-docker-containers-easier/ 23
  • 24.
    "Docker is NOTContainer." ~ Dockerとコンテナ技術、PaaSの関係を理解する (参考)Kubernetesの基本機能  Kubernetesの役割は、複数の物理サーバーを統合して1つの「Docker サーバー」に見せること 24 – 開発計画中の機能の例 • Dockerイメージの自動配置 • コンテナーを配置するサーバーの最適化 • コンテナー間のネットワーク通信経路の確保 • 負荷に応じてコンテナーを増減するオートスケール • サーバー障害時のコンテナー再配置 • など・・・ ・・・ ・・・
  • 25.
    EMPOWER PEOPLE, EMPOWERENTERPRISE, OPEN INNOVATION.