Dockerが導く新しいシステム環境の世界
~ Dockerとコンテナー技術、PaaSの関係を理解する
レッドハット株式会社
中井悦司 / Etsuji NakaiSenior Solution Architect
and Cloud Evangelist
v1.4 2015/07/30
2
Dockerが導く新しいシステム環境の世界 ~ Dockerとコンテナー技術、PaaSの関係を理解する
自己紹介
中井悦司(なかいえつじ)– Twitter @enakai00
日々の仕事– Senior Solution Architect and
Cloud Evangelist at Red Hat K.K.企業システムでオープンソースの活用を希望されるお客様を全力でご支援させていただきます。
昔とった杵柄– 素粒子論の研究(超弦理論とか)– 予備校講師(物理担当)– インフラエンジニア(Unix/Linux専門)
好評発売中!
3
Dockerが導く新しいシステム環境の世界 ~ Dockerとコンテナー技術、PaaSの関係を理解する
Contents
Dockerが生まれた背景 Dockerが実現するアプリケーション開発の世界 Dockerを本番サービスに適用するメリット 今後の発展
Dockerが生まれた背景
5
Dockerが導く新しいシステム環境の世界 ~ 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が導く新しいシステム環境の世界 ~ Dockerとコンテナー技術、PaaSの関係を理解する
Dockerに対するRed Hatの貢献
Red Hatの開発協力により、RHEL対応とさらなる機能拡張を継続– RHEL7での正式サポート– RHELのThin Provisioning機能対応(ディスク性能の向上)– RHEL7のプロセス管理機能(systemd)との統合– Docker専用Linuxディストリビューション(Atomic Host)の開発
7
Dockerが導く新しいシステム環境の世界 ~ Dockerとコンテナー技術、PaaSの関係を理解する
クラウドサービスとしてのPaaS環境の課題 (1)
PaaSのメリット⇒ 実行環境の構築・管理に手間をかけず、アプリケーション開発に集中
アプリケーション実行環境(フレームワーク/ライブラリー)
サーバー/OS
開発したコードをクラウドにデプロイ
アプリケーションプログラム
8
Dockerが導く新しいシステム環境の世界 ~ Dockerとコンテナー技術、PaaSの関係を理解する
アプリケーション実行環境(フレームワーク/ライブラリー)
サーバー/OS
アプリケーションプログラム
クラウドサービスとしてのPaaS環境の課題 (2)
アプリケーションのコードと実行環境は、多くの場合、密結合しており、「ありもの」の実行環境だけでは、不便が生じることも多い
「悪魔は細部に宿る」
・使いたいフレームワークが無い・必要なライブラリーが不足・ライブラリーバージョンの不整合・etc...
9
Dockerが導く新しいシステム環境の世界 ~ Dockerとコンテナー技術、PaaSの関係を理解する
dotCloudが実行環境のメンテナンスに用意した仕組み dotCloudは、クラウド内部の仕組みとして、アプリケーションの実行環
境を自動構築して「Dockerイメージ」に固める技術を開発–さらに、クラウド以外の環境でも利用できるようにオープンソースとして公開
Dockerサービス
サーバー/OS
アプリケーションプログラム
さまざまな実行環境をDockerイメージとして作成・メンテナンス
Dockerイメージ
10
Dockerが導く新しいシステム環境の世界 ~ Dockerとコンテナー技術、PaaSの関係を理解する
Dockerが提供する基本機能
Dockerfile
① Dockerイメージを自動作成
OSイメージ
アプリケーションライブラリー
アプリケーションフレームワーク
イメージの作成手順を記載
Dockerイメージ
OS上にインストール可能なものはすべてイメージ化可能
② Dockerイメージを保存・公開
③ Dockerサーバーに イメージを配布・実行
11
Dockerが導く新しいシステム環境の世界 ~ Dockerとコンテナー技術、PaaSの関係を理解する
(参考)Linuxコンテナーの仕組み
コンテナー
物理サーバー/仮想マシン
Linuxカーネル
アプ
リケ
ーシ
ョン
アプ
リケ
ーシ
ョン
・・・
物理サーバー/仮想マシン
Linuxカーネル
・・・
コンテナー
通常のLinux環境 コンテナーで分割した環境
コンテナーごとに見える環境が異なる
すべてのアプリケーションから同じ環境が見える
「Linuxコンテナー」は、プロセスグループごとに独立したOS環境を見せる技術– ローカルディスクの内容(ディレクトリー内のファイル)– ネットワーク環境(NIC、IPアドレス)– CPU、メモリー割り当て
※ Dockerよりもずっと古くから存在する技術です。
アプ
リケ
ーシ
ョン
アプ
リケ
ーシ
ョン
12
Dockerが導く新しいシステム環境の世界 ~ Dockerとコンテナー技術、PaaSの関係を理解する
Dockerとコンテナの関係コンテナー
アプ
リケ
ーシ
ョン
ディレクトリーツリー
Linux上にマウント
ルートディレクトリーとして割り当て
「Dockerイメージ」の実体は、コンテナーに割り当てるディスクイメージに、ネットワーク設定などの環境情報を付与したものにすぎません。
Dockerの真の価値は、次のような「イメージ管理機能」にあります。
– Dockerfile:Dockerイメージを自動作成する仕組み
– Docker Hub:Dockerイメージを共有・配布する仕組み
Dockerイメージ
Dockerが実現するアプリケーション開発の世界
14
Dockerが導く新しいシステム環境の世界 ~ Dockerとコンテナー技術、PaaSの関係を理解する
Dockerを活用したアプリケーション開発の世界 ローカルの開発環境を利用しながら、多数の開発者に同一の開発環境を提供。
–テストサーバーにも同じ環境を提供することで、「環境差異による問題発生」を防止 Dockerfileからイメージを自動作成するので、イメージの修正・変更・再配布が容易
–開発コードのように、実行環境を「バージョン管理」可能に
フレームワーク
データベース
Dockerfile
Dockerイメージを自動作成
開発・テスト環境にDockerイメージを配布
開発コードをコードリポジトリーにプッシュ
CIツールによりインテグレーションテストを自動実行
15
Dockerが導く新しいシステム環境の世界 ~ Dockerとコンテナー技術、PaaSの関係を理解する
ちょっと脱線:CIツールによる継続的インテグレーション
人間の世界
マシンの世界ビルドとテストの自動実行結果レポートの作成
テスト結果、コード分析結果カバレッジの推移など
開発者
コードコミット
レポートのフィードバック
コードリポジトリ
CIツールマシンと人間の役割を明確に分離したプロセスがCIの肝
このようなCI環境もDockerを利用すると簡単に準備が可能
Dockerを本番サービスに適用するメリット
17
Dockerが導く新しいシステム環境の世界 ~ Dockerとコンテナー技術、PaaSの関係を理解する
フレームワーク
データベース
アプリケーションフレームワークライブラリー
Dockerイメージを本番環境に展開!
テストが実施された「確実動くアプリケーション」をそのままDockerイメージに固めて、本番環境に自動デプロイするという運用を想像してみましょう・・・。
サービス環境へのDocker適用のメリット
18
Dockerが導く新しいシステム環境の世界 ~ Dockerとコンテナー技術、PaaSの関係を理解する
Immutable Infrastructureとは?
–アプリケーションの設定変更、バージョンアップなどは、稼働中の本番環境をいじるのではなく、大元のコードを変更して再テストした後に、本番環境を新規構築してそっくり置き換えるという運用手法。–運用中の環境変更するリスク(想定外の不具合)を回避して、常にテスト済み
の環境を本番提供可能に。–同一構成のサーバーを大量に並べるスケールアウト環境で、多数のサーバーの
構成を常に同一に保ち続ける。
Dockerイメージによる自動デプロイにより、これまで実現困難と言われていた「Immutable Infrastructre」がついに実現可能になります。
Dockerによる自動デプロイのメリット
「Immutable Infrastructre」を実現して構成管理を容易に!
今後の発展
20
Dockerが導く新しいシステム環境の世界 ~ Dockerとコンテナー技術、PaaSの関係を理解する
Kubernetes:Dockerをより高度に管理する仕組みを提供
http://jp.techcrunch.com/2014/07/11/20140710google-microsoft-ibm-and-others-collaborate-to-make-managing-docker-containers-easier/
今後は、Kubernetesを利用したDevOps基盤が開発されていきます
21
Dockerが導く新しいシステム環境の世界 ~ Dockerとコンテナー技術、PaaSの関係を理解する
Kubernetesの役割は、複数の物理サーバーを統合して1つの「Dockerサーバー」に見せることです。
– Kubernetesが提供する機能の例• Dockerイメージの自動配置• コンテナーを配置するサーバーの最適化• コンテナー間のネットワーク通信経路の確保• ダイナミックなコンテナーの増減• サーバー障害時のコンテナー再配置• など・・・
Kubernetesの基本機能
・・・
・・・
22
Dockerが導く新しいシステム環境の世界 ~ Dockerとコンテナー技術、PaaSの関係を理解する
Kubernetesの基本サーバー構成
etcd
・・・
バックエンドデータベース(KVS)
Kubernetes MasterKubernetes Node (Minion)
・・・
クラスタ構成で負荷分散可能
Docker Docker Docker
必要に応じて追加可能
Docker Registry
1台のMasterから複数のNodeを管理するシンプルなアーキテクチャーです。–現在は、Masterを冗長化する機能はありませんので、必要に応じてActive-Standbyクラ
スターを構成します。–バックエンドデータベース(etcd)を外出しにしておけば、IPアドレスのFailoverのみで
構わないはずです。
23
Dockerが導く新しいシステム環境の世界 ~ Dockerとコンテナー技術、PaaSの関係を理解する
Kubernetesのネットワーク構成
etcd KubernetesMaster
DockerRegistry
オーバーレイネットワークとして構成
・・・
物理的には、全サーバーを共通のサービスネットワークに接続するだけで利用可能です。
ただし、コンテナ間通信用の内部ネットワークをオーバーレイネットワークとして用意する必要があります。– Flannel、Open vSwitchなどでオーバーレイネットワークを構成します。
サービスネットワーク192.168.122.0/24
Node
docker0
Node
docker0
内部ネットワーク10.1.0.0/16
24
Dockerが導く新しいシステム環境の世界 ~ Dockerとコンテナー技術、PaaSの関係を理解する
サーバー/仮想マシン
Docker
サーバー/仮想マシン
Docker
Kubernetes
DevOps環境
・・・
実行リソース提供
コンテナー管理
複数サーバーに跨るオーケストレーション
UI、モニタリング、イメージ作成ワークフロー
etc.
RHEL Atomic Host
OpenShift v3
OpenShift v3:DockerによるDevOps環境を実現
・・・
・・・
OpenShift v3は、Docker/Kubernetesをコアコンポーネントとして、インテグレートされたDevOps環境を提供します。
25
Dockerが導く新しいシステム環境の世界 ~ Dockerとコンテナー技術、PaaSの関係を理解する
OpenShift v3での機能拡張
OpenShift v3では、Kubernetes単体に対して、次のような機能拡張がなされています。
–外部ネットワーク(SDN)との連携• OpenShift v3のデフォルトでは、Open vSwitchを利用して、VXLANによるoverlayネットワーク
を構成します。今後は、プラグイン方式による外部ネットワーク(SDN)との連携機能の提供が予定されています。
– URLによるサービスへのアクセス• Kubernetesでは、外部からサービスにアクセスする際は、ノードのIPアドレスを明示的に指定す
る必要があります。OpenShift v3では、サービスごとに固有のURLを割り当てて、URLによる透過的なアクセスが可能になります。
–マルチテナントでの利用• マルチテナントで利用するためのインターフェースが提供されます。開発用/テスト用/本番用
で物理ノードを分離するなどの管理も可能です。
–永続ストレージの提供• コンテナーが停止してもデータが保存される永続ストレージが提供されます。
–イメージビルド/ローリングアップデート機能の提供• Kubernetesでは、使用するイメージは、レジストリーに事前登録してある前提です。OpenShift
v3では、gitにソースコードをプッシュすると、「ビルド→テスト→イメージ化→レジストリー登録」の一連の処理が自動化できるようになっています。
26
Dockerが導く新しいシステム環境の世界 ~ Dockerとコンテナー技術、PaaSの関係を理解する
OpenShift v3のシステムコンポーネント
https://github.com/openshift/openshift-pep/blob/master/openshift-pep-013-openshift-3.md#system-components
外部ネットワーク(SDN)連携
ヘルスチェック&オートスケール
イメージ作成・管理
イベント管理
コンテナ配置
27
Dockerが導く新しいシステム環境の世界 ~ Dockerとコンテナー技術、PaaSの関係を理解する
階層型イメージの自動アップデート
RHEL7 (v1)
PHP (v1)
RHEL7 (v1)
RHEL7 (v1)
PHP (v1)
App (v1)
RHEL7 (v1)
PHP (v1)
App (v2)
RHEL7 (v1)
PHP (v2)
RHEL7 (v1)
PHP (v2)
App (v2)
新しいアプリケーションイメージを自動作成
RHEL7 (v2)
PHP (v2)
App (v2)
RHEL7 (v2)
PHP (v2)
RHEL7 (v2)
新しいPHPイメージを自動作成
セキュリティアップデート
セキュリティアップデート
OS管理担当
MW管理担当
アプリ開発者
28
Dockerが導く新しいシステム環境の世界 ~ Dockerとコンテナー技術、PaaSの関係を理解する
チーム間でのイメージの引き渡し
App (v1.0) App (v1.1) App (v1.2) App (v1.3)
アプリ開発者
App (v1.1)
App (v1.2)
App (v1.2)test test
prod
QAチーム
デプロイチーム
「test」タグを付けて引き渡し
「prod」タグを付けて引き渡し
本番用ノードにデプロイ
既存バージョンを稼働したままローリングアップデート
EMPOWER PEOPLE,
EMPOWER ENTERPRISE,
OPEN INNOVATION.
Top Related