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