SlideShare a Scribd company logo
コンテナ導入概要資料2018
クラウド・ネイティブの新潮流とDockerコンテナやKubernetes等をとりまく業界動向
@zembustu 前佛雅人
2018年8月版
2
@zembutsu
前佛 雅人
zembutsu@zembutsuBlog: https://pocketstudio.net
お持ち帰り
3
Key Takeaways
1
コンテナはサーバ
仮装化技術の延長
線上ではない 2
コンテナはプロセス
をisolate(分離)して
動かす複数の技術 3
オーケストレーション
は複数のコンテナ等
の計算資源を束ねる
 従来のハードウェア仮想化による
計算資源の効率的な利用が目的
ではなく「クラウド・ネイティブ」に
よる更なる活用のため
 スマートフォンの普及は常時利用・
継続開発が必要なシステムに
 労働生産性向上は、開発や運用
スタイルの変化も促す
https://cncf.io https://docker.com https://kubernetes.io
 アプリケーションの移植性を高め
る実装として広く普及した Docker
 namespace(名前空間)でプロセ
ス空間やファイルシステムやネッ
トワーク等を分ける技術と、
cgroups(コントロール・グループ)
でリソースの利用上限を指定
 コンテナ実行にはイメージが必要
 クラスタを構成するためのノード
管理と、スケジューリング(処理を
実行するために必要なノードを選
び出し、計画した後に実行)をする
 期待状態(Desired State)を常に
自動的に維持する仕組みを内蔵
 継続してサービスを実行するため
に様々な機能を実装
※本資料は、これからコンテナやDockerを使いたい方向けに、
2018年現在の業界動向や概要を整理したものです。
私達が暮らす社会の変化と
クラウド・コンピューティング
4
情報通信機器の世帯保有率の推移
5
スマートフォン
固定電話
パソコン
平成30年版情報通信白書 by 総務省 is licensed under a Creative Commons 表示 2.1日本 License.
https://creativecommons.org/licenses/by/2.1/jp/
http://www.soumu.go.jp/johotsusintokei/whitepaper/h30.html
6
前提条件が変わった
7
クラウド
移行
クラウド
ネイティブ
Cloud Migration Cloud Native
システム変遷の話ではなく、社会が変わった
8
The Big Switch: Rewriting the world, From Edition to Google
• 20世紀の「電力会社」のように、
インターネットを通したクラウド
コンピューティング
• Nicholas G. Carr
• 2008年1月発売(邦訳10月発売)
• 翔泳社
9
電力会社(20世紀初頭)の例え
• 発電設備
• 送電設備
• 保守
10
• 電力網を通した
家電の普及・利用
• 豊かな生活
• サーバ設備(計算)
• ネットワーク設備
• 保守
• スマートフォンを通した
アプリやサービスの
普及・利用
• 豊かな生活
巨大電力
ネットワーク
クラウド
コンピュー
ティング
ELECTRIC GRID
COMPUTING GRID
コンテナ導入概要資料2018
コンテナ導入概要資料2018
クラウドは特別な存在ではなくなった
• 個々のマシンやデータセンタ上
のサーバにデータを持ち、システ
ムを動かす時代の終焉を予測
• ただし、1つのマシン(One
Machine)に集約されるのでは
なく、分散した
13
http://www.roughtype.com/?p=8314
クラウドの定義
• 2011年9月に最終版を策定
• 本質的特質
• On-Demand self-service
• Broad network access
• Resource pooling
• Rapid elasticity
• Measured service
• サービス・モデル
• Software as a Service (SaaS)
• Platform as a Service (PaaS)
• Infrastructure as a Service (IaaS)
14
SP 800-145, The NIST Definition of Cloud Computing
https://csrc.nist.gov/publications/detail/sp/800-145/finalb
クラウド・ネイティヴの時代
From “Cloud Computing”,
To “Cloud Native”
15
16
© 2018 Cloud Native Computing Foundation17 ※ https://github.com/cncf/presentations からの引用
コンテナ クラウド
ネイティブ
仮想化からクラウド・ネイティブへ
From Virtualization to Cloud Native
• クラウド・ネイティブ・コンピューティングはオープンソースのソフト
ウェアを積み重ね、次のために用います:
– アプリケーションをマイクロサービス(microservices)に分割し、
– 各パーツ自身をコンテナにパッケージし、
– リソース利用を最適化するために、動的に統合/オーケスト
レート(orchestrate)する
オープン
ソース
IaaS
PaaS
オープン
ソース
PaaS
仮想化
2000 2001 2006 2009 2010 2011
非仮想化
ハードウェア
2013 2015
IaaS
18
物理サーバ時代
機
材
発
注
機
材
納
品
設
置
機
器
設
定
見
積
も
り
O
S
設
定
環
境
構
築
試
験
運
用
開
始
19
仮想化
事
前
設
計
ク
リ
ッ
ク
試
験
利
用
開
始
20
仮想化 クラウド
事
前
設
計
ク
リ
ッ
ク
試
験
利
用
開
始
事
前
設
計
ク
リ
ッ
ク
試
験
利
用
開
始
事
前
設
計
ク
リ
ッ
ク
試
験
利
用
開
始
“ペット vs 家畜”
21Architectures for open and scalable clouds
http://www.slideshare.net/randybias/architectures-for-open-and-scalable-clouds
システム基盤も、サービス側も変わり続ける前提
22
Pet vs Cattle、価値観の転換点、そして板挟み
物理サーバ
静的
STATIC
動的
DYNAMIC
IPアドレス
覚えて
いますか?
仮想化技術
クラウド
コンピューティング
クラウド
ネイティブ
スケーラブル
安定性
信頼性
より速く
かつ、
安定性
信頼性
柔軟に
 メインフレーム
 ワークステーション  パーソナルコンピュータ
 携帯電話  スマートフォン タブレット端末
ハードウェアとソフトウェアを所有する時代 サービスとしての計算資源を利用する時代
現在の課題
agile
DevOps
12 Factor
App
Microservices
SRE
コストと速さ・柔軟さが釣り合わない 釣り合う
開発者のみならず
エンドユーザも
23
Netflix Development Patterns for Scale,
Performance & Availability (DMG206) | AWS re:Invent 2013
https://www.slideshare.net/AmazonWebServices/dmg206
 Service oriented architecture
 Redundancy
 Statelessness
 NoSQL
 Eventual consistency
【参考】 https://github.com/cncf/presentations/blob/master/2016-software-circus/what-is-cloud-native/what-is-cloud-native.pdf
これらのパターンであり、ソフトウェアが必要
 Availability
 Automation
 Acceleration
 Anywhere!
可用性
自動化
加速
どこでも
マイクロサービス
デプロイ 管理
CI/CD OODA
コンテナはどこでも移動
Cloud Nativeの概念は以前から
クラウド・ネイティブ
Cloud Native Computing Foundation (CNCF)
24
プロジェクトを支援
 コンテナ化
 動的なオーケストレーション
 マイクロサービス指向
【参考】 CNCF About https://www.cncf.io/about/faq/
2000年設立。Linuxを中心としたオープンソースの
エコシステムを築くため、コンピュータ業界を中心に
自動車業界など、50以上のサブプロジェクトを持つ。
幅広く業界との調整や標準化のために努める非営利
団体。
2015年設立
ベンダロックイン無くクラウドを移動できるように
オープンソースのソフトウェアを積み重ねて:
アプリケーションやプロセス等の各パートをコンテナ内に
パッケージ化し、再利用性、透明性、、リソースを分離
コンテナを活発にスケジュールし、
リソース利用率の最適化を管理
アプリケーションをマイクロサービスに分割し、
全体的な敏捷性(agility)とメンテナンス性を極めて向上
Cloud Native の定義
• https://github.com/cncf/toc/blob/master/DEFINITION.md
• Cloud native technologies empower organizations to build and run scalable
applications in modern, dynamic environments such as public, private, and
hybrid clouds. Containers, service meshes, microservices, immutable
infrastructure, and declarative APIs exemplify this approach.
• These techniques enable loosely coupled systems that are resilient, manageable,
and observable. Combined with robust automation, they allow engineers to
make high-impact changes frequently and predictably with minimal toil.
• The Cloud Native Computing Foundation seeks to drive adoption of this paradigm
by fostering and sustaining an ecosystem of open source, vendor-neutral projects.
We democratize state-of-the-art patterns to make these innovations accessible
for everyone.
25
CNCF Cloud Native Definition v1.0
Cloud Native の定義(翻案)
• https://github.com/cncf/toc/blob/master/DEFINITION.md
• クラウドネイティブ技術は、パブリック、プライベート、ハイブリッドクラウドのような動的な環境
において、モダンでスケーラブルなアプリケーションの構築と実行できる力を組織に与えます。
コンテナ、サービスメッシュ、マイクロサービス、イミュータブル・インフラストラクチャ、宣言型
API が、このアプローチを実証します。
• これらの技術によって、弾力性があり、管理可能であり、監視可能な、緩やかに結びつくシステム
を実現します。堅牢な自動化と連携することで、エンジニアは大規模な影響のある変更を、最小
限の苦痛で、定期的かつ予測できる状態で行えるようにします。
• クラウド・ネイティブ・コンピューティング・ファウンデーションは、このパラダイムの採用を加速
するため、オープンソースで、ベンダー中立なプロジェクトとしてのエコシステムの育成と維持
を模索します。私たちは誰もがこれらのイノベーションに到達できるよう、業界最先端のパター
ンを民主化します。
26
CNCF Cloud Native Definition v1.0
27
コンテナやマイクロサービスのようなクラウドネ
イティブ技術は、組織が開発とデプロイをスケー
ラブルに、アジャイル・アプリケーションとサービ
スを動的に、かつ分散環境で行えるようになりま
す。 これらの特長の考慮した設計のシステムであ
れば、回復力のある(resilient)、弾力的
(elastic)で、疎結合(loosely coupled)となり、
管理可能な抽象化と宣言型の API を通すので、
つまり、効率的で信頼性のある自動化をもたらす
のです。これにより、エンジニアはアプリケーショ
ンを監視できたり、影響の大きな変更も簡単に行
えたりします。そしてプロセスとワークフローは結
果的に、これらの環境を最大限に活かし、苦痛を
最小化するのです。
1. コンテナ化
• Docker コンテナで一般的に行う
• あらゆる大きさのアプリケーションと依存関係(エ
ミュレータ上で実行する PDP-11 のコードですら)
をコンテナ化できる
• 時間がたてば、適切なアプリケーション分割を求
めるようになり、次世代の機能をマイクロサービス
として書くでしょう
28
2. CI/CD
• 継続的インテグレーション/継続的デリバリ
(CI/CD)をセットアップすると、ソースコードに対
する変更の結果、自動的に新しいコンテナが構
築、テストされ、定期的にテスト環境に展開する
だけでなく、本番環境にすら展開する。
• ロールアウト、ロールバック、テストを自動的に行
うようセットアップする。
29
3. オーケストレーション
• Kubernetes は業界トップのオーケストレーション・
ソリューションです。
• 認証 Kubernetes ディストリビューション、対応
(Hosted)プラットフォーム、インストーラーから
選択すべきです。
30
© 2018 Cloud Native Computing Foundation31
インタラクティブなランドスケープは l.cncf.io をご覧ください
Cloud Native 参照アーキテクチャ
Networking
Provisioning
Runtime
Orchestration & Management
Application Definition / Development
Compute
Storage
マイクロサービス・パターン
分散オーケストレーションと管理
コンテナ化
インフラ
※ CNCFプロジェクトが定義する範囲外
【参考】 https://github.com/cncf/presentations/blob/master/2016-software-circus/what-is-cloud-native/what-is-cloud-native.pdf 32
© 2018 Cloud Native Computing Foundation33
コンテナ技術と実装
Container
34
35
36
Docker≠コンテナ
37
技術と仕様
Technology Specification
コンテナ Docker
38
アプリケーションを
isolate(分離)する
insulatus→isolated→isolate
isle island
39
40
プロセス等を名前空間で分離
cgroupでリソースを割り当て
namespace isolate
control group
PID名前空間
41
httpd
PID 1
プロセスhttpd
名前空間
プロセスruby
名前空間
ruby
PID 1
chris.rb
PID 2
/sbin/init
PID 1
containerd
PID 5
httpd
PID 6
ruby
PID 7
chris.rb
PID 8
alice
PID 2
bob
PID 3
PPID 1 PPID 1
PPID 4
PPID 5 PPID 5
PPID 7
PPID 1
dockerd
PID 4
ホスト上には存在
ファイルシステム名前空間
42
ubuntuの
ファイルシステム
名前空間
… …
centosの
ファイルシステム
名前空間
/etc /bin /etc /bin
/ /
/data/ubuntu /data/centos
/
/etc /data/bin ホスト上には存在
コンテナはプロセスの状態
43
コンテナAの
ファイルシステム
… …
コンテナBの
ファイルシステム
/etc
(/data/ubuntu/etc)
/bin
(/data/ubuntu/bin)
/etc
(/data/centos/etc)
/bin
(/data/centos/bin)
/ /
httpd
PID 1
プロセスA プロセスB
ruby
PID 1
chris.rb
PID 2
コンテナA コンテナB
名前空間の isolate
・プロセス
・ファイルシステム
・ネットワーク
・ホスト名
・UID・GID
・プロセス間通信、等
cgroupでリソース制限
・CPU
・メモリ
・I/O
・ディスク・クォータ、等
44
プロセス等を名前空間で分離
cgroupでリソースを割り当て
namespace isolate
control group
Docker
45
“Docker allows you to package an application
with all of its dependencies into a standardized
unit for software development.”
www.docker.com
全ての依存関係をパッケージ化して、コンテナとして動かす
Docker Engineのアーキテクチャ
46※ Docker Engine v1.11 以降
ユーザ
(docker CLI等)
Docker Container Engine
dockerd
containerd
(docker-containerd)
shim
(docker-containerd-shim)
shim
(docker-containerd-shim)
shim
(docker-containerd-shim)
runC
(runtime-runc)
コンテナ
Docker Image
コンテナ
Docker Image
コンテナ
Docker Image
JSON/REST API
CNCF/OCI業界標準規格に準拠
runC
(runtime-runc)
runC
(runtime-runc)
gRPC エンドポイント
Docker Engine トップレベルのデーモン
(Moby プロジェクトの成果物)
Docker イメージに含むファイルを、
パラメータに従い、コンテナとして実行
コンテナを実際に作成・起動する
ランタイムのバイナリ・プログラム
コンテナやイメージをはじめとし、
ネットワーク、ストレージを管理する
必要最小限のデーモン
ランタイムが実行したコンテナを管理
Dockerイメージはイメージ・レイヤの積み重ね
47
利用者からは
1つに見える
親
子
関
係
派生も
共有
利用者からは
1つに見える
プログラムやライブラリと
メタ情報(実行するプログラムやポートなど)
だから高速に移動できる・開発を高速化できる
リソースを有効に使える “lightweight” な性質
DockerコンテナはDockerイメージを実行
48
元のレイヤに対する変更情報を記録
Copy on Write の性質
利用者からは
1つに見える
利用者からは
1つに見える
だから高速に移動できる・開発を高速化できる
リソースを有効に使える “lightweight” な性質
49
サービスを
提供したい
開発
環境
テスト
環境
準備
環境
本番
環境
都度、環境構築課題 異なるOS環境課題
都度、プロビジョニング課題 動かない課題
時間がかかる課題 遅い課題 面倒課題
アプリを
動かしたい
コンテナ
開発 テスト 準備 本番
50
構築・移動・実行
Build Ship Run
51
52
53
54
55
56
Dockerと愉快な仲間達
Build Run開 発 ・ 構 築 移 動 実 行
Ship
“Build, Ship, Run, Any App Anywhere”
Docker Engine for Linux / Commercial Support
Docker for Mac, Windows, Windows Server 2016
Docker Trusted Registry
Docker Hub
Universal Control Plane
Toolbox
Kitematic
Dev
(開発)
Ops
(運用)
57
Docker Hub
Dockerイメージの保管と共有をするためのリポジトリ(倉庫)
docker クライアント docker エンジン
docker container run hello-world
OSに対してdocker プログラムの
実行を伝える
Docker に対してコンテナに読み込む
イメージの情報を伝える
Docker コンテナを作成・実行
するためのサブコマンド
$ docker container run hello-world
run
docker クライアント docker エンジン
$ docker container run hello-world
run
Docker Hub
pull
レジストリ
latest
イメージ
タグ
hello-world レポジトリ
latest
イメージ
タグ
latest
コンテナ化した
hello-worldの実行
Hello from Docker.
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs
the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent
it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker Hub
account:
https://hub.docker.com
For more examples and ideas, visit:
https://docs.docker.com/userguide/
$ docker container run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
03f4658f8b78: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7
Status: Downloaded newer image for hello-world:latest
Hello from Docker.
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
(省略)
Share images, automate workflows, and more with a free Docker Hub account:
https://hub.docker.com
For more examples and ideas, visit:
https://docs.docker.com/userguide/
ローカルにhello-worldイメージがない
公式イメージlibraryにある”hello-world”を取得
最新の”hello-world:latest”イメージを取得完了
hello-worldイメージを使ったコンテナの実行(run)を命令
61
https://hub.docker.com
だがちょっとまって欲しい
仮想化とは違うの?
62
Docker≠コンテナ型仮想化
• アプリケーション・コンテナ
• システム・コンテナ(コンテナ型仮想化)
https://www.docker.com/resources/what-container
オーケストレーションと
Kubernetes
Orchestration
63
Cloud Native 参照アーキテクチャ
Networking
Provisioning
Runtime
Orchestration & Management
Application Definition / Development
Compute
Storage
マイクロサービス・パターン
分散オーケストレーションと管理
コンテナ化
インフラ
※ CNCFプロジェクトが定義する範囲外
【参考】 https://github.com/cncf/presentations/blob/master/2016-software-circus/what-is-cloud-native/what-is-cloud-native.pdf 64
65
Orchestration
( ( )
Scheduling Cluster Management
複数のホスト・システム上を横
断するアプリケーションをス
ケール(拡大・縮小)できる機能
※コンテナに依存しない
• Marathon, chronos
• Docker swarm
• Deis
• fleet
• Apache Mesos
• DCOS (Mesosphere)
• Kubernetes
• Docker Engine
(swarm mode)
+ Docker Compose
• Rancher
• Nomad
設定ファイルをベースに
サービスを定義・維持
計算資源の抽象化
従来のオーケストレーション
66【参考】 https://www.slideshare.net/Docker/container-orchestration-from-theory-to-practice/7
クラスタ
一方通行
宣言型サービス・モデルのオーケストレーション
67
Declarative service model
【参考】 https://www.slideshare.net/Docker/container-orchestration-from-theory-to-practice/7
OD クラスタ
Δ S
D = 期待状態
O = オーケストレータ
S = 状態
Δ = 状態から期待状態への収束
フィードバック
 レプリカ作成
 グローバル・サービス
並列
遅延
変更可能
Q&A
• 何か気になるところはありますか?
• https://slideshare.net/zembutsu
68
お持ち帰り
69
Key Takeaways
1
コンテナはサーバ
仮装化技術の延長
線上ではない 2
コンテナはプロセス
をisolate(分離)して
動かす複数の技術 3
オーケストレーション
は複数のコンテナ等
の計算資源を束ねる
 従来のハードウェア仮想化による
計算資源の効率的な利用が目的
ではなく「クラウド・ネイティブ」に
よる更なる活用のため
 スマートフォンの普及は常時利用・
継続開発が必要なシステムに
 労働生産性向上は、開発や運用
スタイルの変化も促す
https://cncf.io https://docker.com https://kubernetes.io
 アプリケーションの移植性を高め
る実装として広く普及した Docker
 namespace(名前空間)でプロセ
ス空間やファイルシステムやネッ
トワーク等を分ける技術と、
cgroups(コントロール・グループ)
でリソースの利用上限を指定
 コンテナ実行にはイメージが必要
 クラスタを構成するためのノード
管理と、スケジューリング(処理を
実行するために必要なノードを選
び出し、計画した後に実行)をする
 期待状態(Desired State)を常に
自動的に維持する仕組みを内蔵
 継続してサービスを実行するため
に様々な機能を実装

More Related Content

コンテナ導入概要資料2018