Weitere ähnliche Inhalte Ähnlich wie Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~ (20) Mehr von Masahito Zembutsu (20) Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~16. 16
仮想化 Docker / コンテナクラウド
事
前
設
計
ク
リ
ッ
ク
試
験
利
用
開
始
事
前
設
計
ク
リ
ッ
ク
試
験
利
用
開
始
事
前
設
計
ク
リ
ッ
ク
試
験
利
用
開
始
サーバ統合・リソース有効活用
設置スペース・消費電力削減
運用自動化・効率化
システム可用性向上
これまでの延長上の技術と思われ
てしまい、その視点で「使える」か
「使えない」かが論じられています。
ですが、それは正しいのでしょうか。
19. 19
“Docker allows you to package an application with
all of its dependencies into a standardized unit for
software development.”
Dockerはアプリケーションと全ての依存関係をパッケージ化します。その
ソフトウェア開発の全依存関係は、標準化したユニットに入っています。
www.docker.com
Dockerを作ったのはdotCloud
というPaaSを提供する会社の方。
利用者はインフラの面倒をみたい
のではなく、アプリを動かしたいの
だと利用者との対話で気づきます。
22. Docker
アプリを開発・移動・実行するプラットフォーム
設計思想は「開発者が簡単にアプリケーションを動かす環境を作る」こと
Dockerプロジェクト
PyCon 2013 (PythonカンファレンスUS) 3月13日、 LT でオープンソース・プロジェクトを発表 [1]
Solomon Hykes … dotcloud 創業者であり、 Docker プロジェクトを開始
32,000以上の GitHub Stars、40億 Docker コンテナのダウンロード、2,900人以上の貢献者
Dockr Inc.
Docker におけるミッションとは、膨大な革新を生み出すツールを作る [2]
Docker プロジェクトのオリジナル開発者、かつ、プロジェクトのスポンサー、商業サポート
[1] “The future of Linux Containers” https://www.youtube.com/watch?v=wW9CAH9nSLs
[2] “Our mission at Docker to create tools of mass innovation” http://www.docker.com/company/ 22
改めて、Dockerとはアプリケー
ションを動かす仕組み・プログラム
です。オープンソースのプロジェクト
と、その支援と商用サポートをする
会社がお互い独立しています。
23. 23
依存関係
システム基盤
• オペレーティング・システム [Linux|Unix|Windows]
• ハードウェア、ネットワーク、ストレージ
• 物理 or 仮想化 or クラウド
• ミドルウェア
• 各種プログラミング言語環境や、システム・ライブラリなど
• バイナリやソースコード
• 設定用パラメータ
application
dependencies
Infrastructure
アプリ
従来のシステム開発において、か
ならず基盤、ネットワークやサーバ
などハードウェア・リソースありきで
前提や制約が組まれていた場面が
殆どでした。
24. 24
依存関係
システム基盤
Docker
コンテナ
Docker Engine
(dockerd)
• ミドルウェア
• 各種プログラミング言語環境や、システム・ライブラリなど
• バイナリやソースコード
• 設定用パラメータ
application
dependencies
Infrastructure
• オペレーティング・システム [Linux|Unix|Windows]
• ハードウェア、ネットワーク、ストレージ
• 物理 or 仮想化 or クラウド
アプリ
Dockerの登場で、アプリありきで
考えられるようになりました。つまり
Dockerコンテナ、正確には
Dockerイメージさえあれば、イン
フラを意識せずに動かせるように。
28. 28
Dockerと愉快な仲間達
Build RunShip
“Build, Ship, Run, Any App Anywhere”
Docker Engine for Linux / Commercial Support
Docker for Mac, Windows, Windows Server 2016
そして構築・移動・実行、どの段階
でもアプリが間違いなく動く環境を
Dockerが、正しくはDockerエン
ジンが動く環境であれば実現でき
るのを目指しました。
29. 29
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
(運用)
アプリはDockerイメージとして構
築・移動し、コンテナ状態として実
行できるようになったのです。
30. Docker ツール群
• Docker Engine
• Docker Machine
• Docker Swarm
• Docker Compose
• Docker Toolbox
• Kitematic
• Docker Hub
• Docker Registry
• Docker Content Trust
• Docker Cloud
30
そして、そのような環境を実現する
べくツール群やサービスが提供され
ています。が、今日はDockerの
宣伝するつもりはないので、詳しい
解説は避けさせてください。
36. 仮想マシン vs Docker ではない!!
コンテナはプラットフォームに依存しない
コンテナであれば、ある環境で構築したら、別の環境に迅速に移動可
Dockerイメージはソフトウェアのスケール(増減)を迅速かつ簡単に
コンテナは OS とアプリを明確に役割分担
開発者はアプリケーション開発に集中、運用担当はデプロイ作業や運用に集中
仮想化は手軽に厳密なリソース管理が可能
仮想化システムの利用には業務手順の(大きな)変更を伴わない
リソースの集約と管理をしやすい
単純な比較は無意味
システム基盤としてのコンテナ導入や、コスト削減・省力化視点でのコンテナ化は無意味
36
技術要素は似てますが方向が別
37. 37
仮想化 Docker コンテナ
独立した環境
仮想ハードウェア
Dockerイメージ
リソース集約
様々なOSが動作
Linux kernel
技術を活用
※ Dockerコンテナは、アプリケーションが複数サーバにスケール
する前提なら、環境の繰り返し作成・廃棄を高速に行える
※ スケールが必要なければ、必要なハードウェアや OS に
あわせた環境を自由に構築できる
• プロセスは namespace を通して PID 、
ファイルシステムなど、様々な名前空間を分離
プロセスを起動後、瞬時に分離かつリソースを制限可能
な点が仮想化と似て見えますが、実装や仕組みや操作
性は全く異なる。
• Control groups の機能を使い、1つ1つの
コンテナ(Linuxのプロセス) に対して CPU、メモリ、
I/O の制限をかけられます
使い捨て型
(再利用性)
共通要素
• ハイパーバイザ型もしくはホスト型の仮想化
技術により仮想マシンを実行
• ハイパーバイザ技術により仮想マシンを実行
インフラのコード化
• Dockerfile や docker-compose.yml で
確実にアプリが動作する環境再現性を管理
• 階層化したイメージ・レイヤにファイルシステムや
メタデータを格納
• 親子関係により、ディスク容量節約や移動高速化
• 厳密なリソース定義や確実な環境分離を
提供
環境の移行がスムーズ
• サーバ管理する業務フローが確定しているの
であれば、変更しなくてもシステムの移行や
集約をしやすいので、導入しやすい
• Windows / Linux など選べる
• 32bit / 64bit などアーキテクチャを選択できる
自由度の高いハードウェア・エミュレーションや
管理性を提供する。
39. Dockerを動かす技術
• Docker Engine (dockerd) がリクエストを受信後、各種処理
• 名前空間(namespace)はプロセスごとに独立した環境を作る
• コントロール・グループ(cgroups)はリソースを制限・管理
• Linux カーネル技術や業界共通の規格を採用
40. 40
Docker Engine とデーモンの変遷
Docker Engine
Linux Kernel
・namespaces
・cgroups
LXC libcontainer runC
containerd
v0.9~
v1.11~
Version 7 Unix
chroot
jail
dockerd
v1.12~
デーモン
ライブラリ
ランタイム
docker daemon
Docker: the container engine
v1.11~
バージョンによって実装面の変遷
はありましたが、Linuxカーネルの
機能を「良い感じ」に処理してくれ
るのがDockerエンジン(という名
前のデーモン)の役割です。
41. 41
Docker はサーバ・クライアント型モデル
OS ( Linux )
物理/仮想サーバ
Docker エンジン
( dockerd デーモン )
Linux kernel
コンテナ コンテナ コンテナ
リモート
API
docker
クライアント TCP あるいは
Unix ソケットドメイン
containerd
Runtime: runC (OCI規格準拠)
・docker コマンド
Linux, Mac OS X, Windows
・Kitematic (GUI)
Mac OS X, Windows
・Docker Compose
・Docker Swarm
43. 43
コンテナのプロセス
httpd
PID 1
コンテナA コンテナB
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
実際のホスト上ではdockerd
(dockerエンジン)のプロセスツ
リー以下に存在しています。コンテ
ナの中では、あたかも自分たちしか
見えない状態。
51. コンテナを動かすには?
51
$ docker run hello-world
hello-world コンテナの実行
$ docker run –i –t ubuntu bash
ubuntu コンテナの実行
$ docker run –d –p 80:80 –v /data/:/usr/share/nginx/html nginx:latest
nginx コンテナの実行
一見すると難しいように見えますが、
分かりやすい英単語が機能を表し
ていますので、Dockerが何を行っ
ているか?と適切に理解していれ
ば、さほど障壁は高くありません。
52. イメージを作るには?
52
$ docker commit [コンテナID] [イメージ名:タグ]
docker commit コマンド
$ docker build –t [イメージ名:タグ] .
docker bulid コマンド
$ docker build –t [イメージ名:タグ] .
Dockerfile ファイル
Dockerイメージの作成も独特に
見える概念の1つですが、これもア
プリケーションをいかに様々な場所
に移すかを考えたら、このような仕
組みになっています。
58. 58
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
(運用)
ここで改めてDockerとはアプリ
ケーションを迅速に構築・移動・実
行するための役割を担います。
63. 63
“Pipelines as code
Teams are pushing for automation across their environments, including their
development infrastructure. Pipelines as code is defining the deployment pipeline
through code instead of configuring a running CI/CD tool.”
開発インフラを含む環境全体を横断する自動化を努める用語。コードとしてのパイプラインは、
CI/CDツールを調整するのではなく、コードを通してデプロイ用のパイプライン(業務ライン)を
定義すること。
Technology Radar, https://www.thoughtworks.com/radar/techniques/pipelines-as-code
CI/CDを通してのコード化という
意味で、Pipeline as codeとい
う言葉も生まれています。
66. Dockerと課題
セキュリティ対策は従来と同じ
べースの OS は通常の Linux ないし Windows なので、セキュリティ対応は欠かせない
従来の手法に比べ、更新しやすい(イメージの自動構築機能)
Content Trust や Notary といった技術を利用しセキュリティを高める
運用や監視も特に変わらない
Docker Engine の管理が必要になるが、その他は通常のサーバ管理と同じ
Docker 導入が目的化すると方向を見失いがち
リソース削減や集約が、そのまま開発・運用コストの削減にはつながらない
73. 73
Mesos Master
Mesos Slave群
処理(Executor) APIフレームワーク
Marathon
Apache Aurora
Chronos
…etc
汎用スケジューラ
meta-scheduler
Mesos Slave
Mesos Slave Mesos Slave
Mesos Slave Mesos Slave Mesos Slave
タスクをスケジュール
リソース要求
Mesos Slave
Mesos Slave Mesos Slave
Mesos Slave Mesos Slave Mesos Slave
Mesos Slave
Mesos Slave Mesos Slave
Mesos Slave Mesos Slave Mesos Slave
Mesos Slave
俺がルール
ブックだ!!
Executor Containerlizer 拡大縮小可能かつ効率的リソース利用
プラガブル
Pluggable
障害耐性
Zookeeper Quorum
タスクを処理(実行)
88. 1. Dockerは難しい
2. 今すぐ始めなくてはいけない
3. すべての環境をコンテナにしなくてはいけない
4. 仮想化システムは不要になる
5. 構成管理ツール(Chef,Puppet,Ansible等)は不要になる
6. VagrantがあればDockerは不要だ
7. Dockerは構成管理ツールを使っていれば不要だ
8. クラウド環境は不要になる
9. クラウド上でなければDockerの価値は無い
10. Windows上でLinuxのコンテナが動く
11. Dockerやコンテナが全てを解決してくれる
12. Docker であれば業務効率化できる
13. Docker があればコスト削減できる
14. Docker やコンテナを使うとベンダーロックインされる
15. いまあるシステムを、Dockerで作り直さなくてはいけない
16. システム・インテグレータにはコンテナは向かない
17. 閉じた環境では使えない・使う意味が無い
導入前の疑問
89. 18. 定番のOSが無い。どれを選ぶべきか分からない
19. よく落ちる
20. ネットワークが貧弱だ
21. データの可用性が貧弱
22. データベースが重い、使えない
23. データベースやキャッシュサーバの用途にDockerは向かない
24. Dockerはディスク容量を無駄に消費する
25. コンテナが止まるとログが記録されない
26. Dockerfileのビルドに毎回かなり時間がかかる
27. 複数のコンテナを立ち上げるのは大変だ
28. マシンを再起動すると、コンテナで動かしていたサービスをまた起動する必要があるので面倒
29. Docker Registryは不安定だ。使い物にならない。可用性が無い
30. 英語のドキュメントを読むのが大変だ。日本語の情報が古い
利用直後の困りどころ
90. 31. 本番環境では使えない
32. DockerにはSLAが無いから使えない
33. Dockerは冗長化できない
34. Dockerは(運用チームにとって)学習コストが高い
35. 商用サポートを受けられない
36. 1サーバ1コンテナで運用すべきだ
37. Docker は kubernetes がないと意味が無い
38. kubernetesがあればDockerやDocker Swarmは不要だ
39. Kernelのチューニングができない
40. Dockerはオワコン、これからはrkt
41. Docker ではなく CoreOS を使うべきだ
42. Docker環境は監視ができない
43. Dockerの導入事例がない
44. セキュリティや信頼性に問題がある
45. そもそも、Docker を使う意味が無い
46. Dockerは生産性や効率性に寄与しない
47. 5年後10年後もDockerで大丈夫なのか?
48. Dockerには恨み辛みがある
運用面での疑問や課題