75
捕鯨! 詳解 Docker 株式会社co-meeting パブリッククラウドエバンジェリスト 吉田パクえ

捕鯨!詳解docker

Embed Size (px)

Citation preview

Page 1: 捕鯨!詳解docker

捕鯨!詳解 Docker

株式会社co-meeting

パブリッククラウドエバンジェリスト

吉田パクえ

Page 2: 捕鯨!詳解docker

http://www.co-meeting.co.jp/

Happy Work! Happy Life!株式会社co-meetingは、法人向けソフトウェアの開発・販売に10年以上携わってきた4人のメンバーによって創業されたITベンチャー企業です。人生において大きな時間を占める「仕事をしている時間」。co-meetingは、世界中の「仕事をしている人」に向けて、仕事時間を充実させ人生を豊かにするWebサービスを提供していきます。

Page 3: 捕鯨!詳解docker

パブリッククラウドえばんじぇりすと

吉田 パクえ

http://fb.com/pakuepakue

Page 4: 捕鯨!詳解docker

1. クラウドの啓蒙活動講演、セミナー、執筆 etc

2. マーケティング支援1. 商品企画、記事広告2. 総合的なアドバイス3. イベントの企画、司会、登壇

3. 企業向け1. “クラウド” コンサルテーション

プランニングから新規事業開発支援まで2. “クラウド” 社員教育

新入社員・営業・技術指導3. 自社主催イベントへの協力

4. その他1. 特定非営利活動法人 aip セミナー講師2. CompTIA Mobility+ Subject Matter Expert 3. 学生向けセミナーや地域活性化へのお手伝い4. 放送大学 非常勤講師

パクえのお仕事

Page 5: 捕鯨!詳解docker

Dockerはなぜ生まれたのか

Page 6: 捕鯨!詳解docker

クラウド(IaaS)の仕組み

仮想サーバ

作成・変更削除・複製

・中にサーバができる・サーバの管理は利用者の責任・OSより上を管理する

・数分で手に入る

Page 7: 捕鯨!詳解docker

クラウドの実際

物理サーバ

物理サーバ

物理サーバ

仮想化基盤

管理

仮想化基盤 仮想化基盤

仮想サーバ

仮想サーバ

仮想サーバ

作成・変更削除・複製

実際は自動化された仮想化基盤の管理機構を経由している

<パターン>・全て共有・仮想基盤を占有・物理サーバを占有

Page 8: 捕鯨!詳解docker

入手は早くなったけど・・・

仮想サーバ

OS

ミドルウェア

アプリケーション

OSの管理ミドルウェアの管理アプリの開発と管理が面倒なのは相も変わらず

・仮想サーバを取り出せない・サーバ構築作業も自動化・冪等性が保障しにくい

Immutable InfrastructureBlue-Green Deployment

面倒なものは捨ててしまえ作り直せばいいじゃん

Page 9: 捕鯨!詳解docker

“作り直す”=冪等性の担保

冪等性ある操作を1回行っても複数回行っても結果が同じであることをいう概念

構築そのものをプログラムしてしまう自動化・再現性の向上

Page 10: 捕鯨!詳解docker

重宝されたのは“手順化”の仕組み

正確にはChefではなく、Chef-soloが使われるようになった

新しい課題・Chef-soloは環境にクライアントを入れる必要がある。・Rubyで書くため、Rubyを知る必要がある。・異なるOSによって手順が異なるためレシピを作るのがかなり手間がかかる

・もともと大型の環境を想定しており、仕組みが煩雑

最近はこっちのほうが人気Pythonでできている

Page 11: 捕鯨!詳解docker

アプリ開発者が求めるものは?

・完成したものをそのまま持ち込みたい(もしくは、全く同じことを保障してほしい)

・VMではサイズが大きいので運びにくい・作るのをもっと早くしたい

OS

ミドルウェア

アプリケーション

ここだけで何とかしたい!

Page 12: 捕鯨!詳解docker

昔からあった技術の復興 ~ コンテナ

OS

ミドルウェア

アプリケーション

コンテナ

コンテナ実行基盤

物理 or 仮想サーバ

ミドルとアプリで塊を作り、その下に基盤を設けることでどこでも動く状態を確保する

Page 13: 捕鯨!詳解docker

実際のところを見てみよう

~新規のサーバを稼働させる

Page 14: 捕鯨!詳解docker

デモについて

•デモで実際に行った手順は以下にて公開してあります。

https://gist.github.com/yuyalush/5ddd4668fca01f58e25e

是非、同じくやってみてください。

Page 15: 捕鯨!詳解docker

デモ:公開イメージをカスタマイズ

dockerhub

imagespull

container

run

tar

save

psstart / stoprestarttopcommit

Server

カスタマイズする

運び出せる

Page 16: 捕鯨!詳解docker

完全に同じものを迅速に作り出せる

images containerrun

Cloud AServer

・仮想イメージの複製よりも早い・同一性が担保される

・OSの起動が無いので早い

・コンテナのサイズはとても小さいcontainer

container

Page 17: 捕鯨!詳解docker

デモ:クラウド間の移動

Server

images containerrun

tar

load

Server

images container

commit

tar

Save

Cloud A Cloud B

scp

構築環境 本番環境

・数コマンドで実施できるのでお手軽・シェルコマンドのみなので、自動化もしやすい・ダウンタイムの発生をコントロールする仕組みが必要

同じ稼働環境

Page 18: 捕鯨!詳解docker

ポイント

•コンテナはイメージからの差分しか持たない• runコマンドでコンテナ作成と実行

• psコマンドでコンテナの一覧

• rmコマンドでコンテナの削除

• Commitコマンドでimageに昇格させ、使い回しが可能になる

•カーネルの上位で動くため、サイズが小さい• 仮想サーバ: ディスクイメージのサイズ(20GB~30GB)

• コンテナ: 実行する部分+アルファ(100MB~2GB)

•動き出すまでにハードの起動やOSの起動が無い• アプリの起動と比較すると、サーバの作成や起動はとても遅い

Page 19: 捕鯨!詳解docker

実際のところを見てみよう

~開発したものを他へ持っていく

Page 20: 捕鯨!詳解docker

Docker Hubでの公開イメージを活用

無料イメージを使いコンテナを作成する。稼働させるソースコードは独自のものを準備する流れです。

最新版のRubyやRailsのインストールを割愛できる

Page 21: 捕鯨!詳解docker

Dockerfileを作り、ローカルでビルドしRunで動き出すそうだ。

Page 22: 捕鯨!詳解docker

Ruby:2.1.5のイメージを使い、必要なインストールを行っている。実行したところにあるソースコードを練りこんで、最後にサーバを起動している。

Page 23: 捕鯨!詳解docker

これまでのデモを組み合わせます

images

container

run

Dockerfile

build

tar

save

commit

CloudA / Serverソースコード入り

構築の自動化

運び出せる

Server

images containerrun

tar

load

本番環境

同じ稼働環境

CloudB / Server

scp6

7

8

9

Page 24: 捕鯨!詳解docker

Dockerfileを作成<下準備>1、イメージを作るマシンにはDockerとアプリの開発環境を作っておく2、今回は簡単なRailsアプリの可動環境を作ります

・RubyとRailsのセットアップを実施・簡易なアプリを作る

<作業>1、RailsのアプリのディレクトリにDockerfiileを作成し、

以下を一行書く。FROM rails:onbuild

Server

Dockerfile

Cloud A

構築環境

ソースコード

Page 25: 捕鯨!詳解docker

イメージの構築docker –t build [イメージの名前] .

文字が流れてビルドが実施される。

Server

Dockerfile

Cloud A

images

ソースコード

完了後にimagesで確認すると、完成したイメージが格納されているのが確認できる

初回のbuildはかなり時間がかかる。Tips diskI/Oが早い環境を使うと効果あり。

Page 26: 捕鯨!詳解docker

作成されたイメージの稼働を確認するdocker run –d –p 3000:3000 bookshelf-app

Server

Dockerfile

Cloud A

images containerrun

ソースコード

ソースコード

Page 27: 捕鯨!詳解docker

ソースコードを書き換える

タイトルを「書籍一覧」へ

Server

Dockerfile

Cloud A

images container

ソースコード

ソースコード

Page 28: 捕鯨!詳解docker

イメージのリビルド

量が少ないとほぼ一瞬で終わる

Server

Dockerfile

Cloud A

images

ソースコード

Page 29: 捕鯨!詳解docker

もう一度コンテナを作り直す

Server

Dockerfile

Cloud A

images container

run

ソースコード

ソースコード

container

ソースコード

Page 30: 捕鯨!詳解docker

イメージをファイルへ出力する

docker save –output=bookshelf.tar bookshelf-app

885MBでした

Server

tar

Cloud A

imagessave

Page 31: 捕鯨!詳解docker

別のクラウドへ転送する

Server

tar

images

Cloud A

Server

tar

images

Cloud B

scp

Page 32: 捕鯨!詳解docker

イメージを取り込む

Docker load –input=bookshelf.tar

Server

tar

images

Cloud AServer

tar

images

Cloud B

container

ソースコード

Dockerfile

ソースコード

Page 33: 捕鯨!詳解docker

起動して動作を確認する

Server

tar

images

Cloud A

Server

tar

images

Cloud B

container

ソースコード

Dockerfile

ソースコード

runcontainer

ソースコード

Page 34: 捕鯨!詳解docker

Dockerを読み解くポイント

Page 35: 捕鯨!詳解docker

Dockerにまつわる誤解

英語 https://devopsu.com/blog/docker-misconceptions/日本語 http://postd.cc/docker-misconceptions/

誤解その1:Dockerを習得したら、他のシステムツールを学ぶ必要はない誤解その2:Dockerコンテナごとに1つのプロセスだけを持たせる誤解その3:Dockerを使えば、構成管理(CM)ツールを使う必要はない誤解その4:今すぐDockerを使うべき誤解その5:速度と一貫性を実現するためにはDockerを使うべき

Page 36: 捕鯨!詳解docker

粒度が変化していることに注意!

物理サーバ

仮想化基盤

管理

仮想サーバ

仮想サーバ

仮想サーバ

仮想サーバ

Docker Engine

コンテナ

コンテナ

コンテナ

コンテナ

仮想サーバのリソースを共有する

つまり、サーバの管理自体は必要!

Page 37: 捕鯨!詳解docker

コンテナはロールで作ること

Docker Engine

コンテナ コンテナ

Docker Engine

コンテナ

コンテナ

コンテナ

コンテナ

APP DB

スケールさせにくい スケールさせやすい

Page 38: 捕鯨!詳解docker

どこにいるか、外から解らない

Docker Engine

コンテナ

コンテナ

コンテナ

コンテナ

仮想サーバ

Docker Engine

コンテナ

コンテナ

コンテナ

コンテナ

仮想サーバ

Docker Engine

コンテナ

コンテナ

コンテナ

コンテナ

仮想サーバ

・むしろ管理するものが増えてる・仮想サーバが飛ぶと被害はむしろ増えている

管理レイヤーが必要

Page 39: 捕鯨!詳解docker

どれが楽かは場合によるDocker

サーバ

サーバ

Docker

サーバ

Docker

サーバ

Docker

構成管理系

サーバ

サーバ

Web

サーバ

Web

サーバ

Webサーバ サーバ

クラウドイメージ系

サーバ

サーバ

Web

サーバ

Web

サーバ

Web

サーバ

Web

Page 40: 捕鯨!詳解docker

スケーラブルなアプリへの開発方針に沿っているかが重要なポイント

http://12factor.net/

http://orangain.hatenablog.com/entry/12factor-ja

•コードベースバージョン管理されている1つのコードベースと複数のデプロイ•依存関係依存関係を明示的に宣言し分離する•設定設定を環境変数に格納する•バックエンドサービスバックエンドサービスをアタッチされたリソースとして扱う•ビルド、リリース、実行ビルド、リリース、実行の3つのステージを厳密に分離する•プロセスアプリケーションを1つもしくは複数のステートレスなプロセスとして実行する•ポートバインディングポートバインディングを通してサービスを公開する•並行性プロセスモデルによってスケールアウトする•廃棄容易性高速な起動とグレースフルシャットダウンで堅牢性を最大化する•開発/本番一致開発、ステージング、本番環境をできるだけ一致させた状態を保つ•ログログをイベントストリームとして扱う•管理プロセス管理タスクを1回限りのプロセスとして実行する

Page 41: 捕鯨!詳解docker

簡単な話・・・

アプリ稼働環境として使うなら、以下の4つは個別に用意すること。

1、ロードバランサー各コンテナへリクエストを分散させる

2、データの永続化部分つまりDBはサービス使うか、自分で作っておく

3、キャッシュ部分・L7のロードバランスで固定させる・RedisなどのKVS使ってセッション情報を共有する

4、ログコンテナの中に残すと後で読めない

それ以外にも・コンテナの死活監視が必要・構成管理も要るよ・環境変数にコネクト先を入れる仕組み(もしくは、それに相当する何か)

Page 42: 捕鯨!詳解docker

Dockerを補強する動き

Page 43: 捕鯨!詳解docker

Kubernetes : クーバネティス

Page 44: 捕鯨!詳解docker

PodPod

かなりややこしい。。。

Docker Engine

コンテナ

コンテナ

コンテナ

コンテナ

Docker Engine

コンテナ

コンテナ

コンテナ

コンテナ

MasterProxy

PrivateImages

Master: 各Pod内のコンテナを監視し、決められた数を生成するProxy: どこに通信するかを調整する

Page 45: 捕鯨!詳解docker

ログについてはFluentdになりました

https://github.com/GoogleCloudPlatform/kubernetes/blob/master/contrib/logging/fluentd-ek/README.md

Page 46: 捕鯨!詳解docker

Dockerを扱う専用OSの登場

etcd : 実体はKVS。クラスタ間での設定を共有する

ISOイメージで134MBほど

Page 47: 捕鯨!詳解docker

CoreOSによるクラスター管理

Apache2.0ライセンスによるオープンソース提供

Page 48: 捕鯨!詳解docker

個人的な印象

•難しすぎる

•超巨大な構成の中で使わないと効果を発揮できない

•そもそも、サーバのリソースが共有になるので物理サーバを使う or 巨大なインスタンスを使うでもしないと、管理工数増が目立ってしまうのでは?

• クラウドベンダーが管理機構を含めて用意してくれないと事実上使えないと考えてます。

Page 49: 捕鯨!詳解docker

各ベンダーの最新動向

Page 50: 捕鯨!詳解docker

You will be billed for those instances according to Compute Engine's pricing, until the clusters are deleted.

Page 51: 捕鯨!詳解docker

CoreOSの狙い

つまり、クラウドベンダーがDockerのクラスタ管理機構を独自に提供するようにすること。

Page 52: 捕鯨!詳解docker

Kubernetes Visualizerのリリース

Page 53: 捕鯨!詳解docker

Amazonは?

2014/11/12辺りに何かありそう・・・

https://gigaom.com/2014/11/09/887434/

Page 54: 捕鯨!詳解docker

Amazon EC2 Container Service

http://aws.typepad.com/aws_japan/2014/11/aws_container.html

•簡単なクラスター管理 - ECSはDockerコンテナから成るクラスターをセットアップし管理します。ECSはコンテナの起動や終了を行い、クラスターのステート情報を保持します。複数のアベイラビリティゾーンにまたがる数万のコンテナを保持するクラスターに簡単にスケールすることができます•ハイパフォーマンス - アプリケーションのビルディングブロックとしてコンテナを用いることができます。数秒で数千のコンテナを起動、停止、管理できます•柔軟なスケジューリング - ECSは組み込みスケジューラーを持っており、可用性、効率性の面でコンテナをクラスター上で適切に管理します。ECSはステート情報へのアクセスを提供しますが、もちろん、独自のスケジューラーや既存のオープンソースのスケジューラを用いてサービスAPIを利用することも可能です•拡張可能でポータブル - ECSはオンプレミスで用いるのと同様のDockerデーモンを用います。オンプレミスで用いたものを容易にAWSに持ち込み、持ち出すことが可能です•リソースの効率的利用 - コンテナ化されたアプリケーションはリソースを非常に効果的に使えます。単一のEC2インスタンスの上で複数のお互いに関係のないコンテナを走らせることができます。例えば、同じインスタンスの上で、短期間だけ画像処理を行うコンテナと、長期間にわたって動かすWeb

サービス用のコンテナを同時に動かすことができます•AWSの他サービスとの統合 - ECS上のアプリケーションは、もちろん、Elastic IPアドレスやリソースタグ、Virtual Private Cloud (VPC)といったAWSの機能を利用できます。コンテナはEC2やS3と同様に新しいレベルのビルディングブロックとして用いることができるでしょう•セキュアなサービス - VPCの中のEC2インスタンスでタスクを動かすことができます。タスクはIAM

ロール、セキュリティグループなどのAWSセキュリティ機能を活用できます。コンテナはマルチテナント環境で動作し、定義されたインタフェースを通じてお互いに会話することができます。コンテナが稼働するEC2インスタンスも完全に所有しコントロールできます。

以下、抜粋

Page 55: 捕鯨!詳解docker

説明から読み解く

1、クラスター管理のサービスEC2のインスタンスを追加することで、以降の管理をしてくれる

2、タスクベースJSONにてタスクを設定することで、元となるイメージや必要なコンテナ数を確保してくれたりする。コンテナ同士のリンクも可能。

すでに、アプリケーションが必要とするサービス群(DB,キャッシュ,メッセージング,ストレージなど)があるため、フロント側の管理に特化したサービスになっている印象

Page 56: 捕鯨!詳解docker

IBM BluemixでもDocker対応

Page 57: 捕鯨!詳解docker

OSの動き

Page 58: 捕鯨!詳解docker

Ubuntu Core

Ubuntuさんは管理機構などを用意せず、コンテナ技術に特化したOSの準備まで

Page 59: 捕鯨!詳解docker

Project Atomic

構成管理にはKubernetesを使っている

Page 60: 捕鯨!詳解docker

次世代WindowsServerでもコンテナーが動く

http://weblogs.asp.net/scottgu/docker-and-microsoft-integrating-docker-with-windows-server-and-microsoft-azure

Page 61: 捕鯨!詳解docker

その他

Page 62: 捕鯨!詳解docker

こんなのも登場

日本時間で2014/11/12

Page 63: 捕鯨!詳解docker

最大のポイントは、Herokuのワークフローをそのまま持ち込めること

Page 64: 捕鯨!詳解docker

LB、死活監視、ロギング、構成管理も持っている

Page 65: 捕鯨!詳解docker
Page 66: 捕鯨!詳解docker
Page 67: 捕鯨!詳解docker

CI環境のサービスdorone.io

オープンソース版が公開されており、テスト環境としてDockerを使っている

http://blog.drone.io/2014/2/5/open-source-ci-docker.html

Page 68: 捕鯨!詳解docker

慌ただしいDocker

Page 69: 捕鯨!詳解docker

http://blog.docker.com/2014/12/announcing-docker-machine-swarm-and-compose-for-orchestrating-distributed-apps/

Docker環境構築を楽にするツールクラスタリング環境の管理機能コンテナの管理機構を作っているそうです

Page 70: 捕鯨!詳解docker

http://blog.docker.com/2014/12/docker-announces-docker-hub-enterprise/

Docker Hub Enterpriseのリリース

Dockerで作られたイメージを保存しておくリポジトリ。プライベート環境にHubを構築できる。

IBMがパートナーシップを結んだと発表があり販売する。BluemixやSoftLayerでの展開がありそう。

Page 71: 捕鯨!詳解docker

CoreOSが独自にコンテナ作るとか言い出した

https://coreos.com/blog/rocket/

Dockerには根本的なところで問題があり、かつ機能が増え続けていることへの懸念から独自の技術へシフトするというのが主張

当面はDockerもサポートする体制を維持するようだ

Page 72: 捕鯨!詳解docker

まとめ

Page 73: 捕鯨!詳解docker

これまでを振り返って感じること

• そもそも管理レイヤーがSPOF(単一障害点)にならないようにしないと本番で使える気がしない。

• もし物理サーバレベルでの障害が起きた場合、これまで以上に可動部分が被害を受ける。それに耐えられるような構成を組む必要があるため、かなり大がかりな仕組みが求められる。

• ホストマシンのカーネルパニックが起きたら、全部影響を受けるので、結果的には障害リスク箇所が増えていると感じる。

• 管理レイヤーの構成や維持にかかる労力が相当かかるので、ベンダーからのメニューで補強されないとしんどい。小規模構成なら、これだけの管理レイヤーにかかる工数のほうがむしろ重荷になりかねないのが現状かと。

• クラウド環境で使う場合、稼働リソースが課金ポイントになるため相当リソースをうまく使わないと厳しい。

小さ目サーバを多数、コンテナ少なめ : お金が厳しい大き目サーバを少数、コンテナ多め : リスクが高い

Page 74: 捕鯨!詳解docker

まとめ(というか私見)

• Dockerは流行っているので、勉強しておくのはしておこう

•アプリケーションの開発を12facoterAppsに従い、アーキテクチャーを変えられるかが今後のカギとなる

•もし使うなら、まずはDevOps環境として。

•次に、セットアップのスクリプトを作るとき

•本番で使うためには課題が多い。ベンダーからメニューも提供され始めているのでしばし待て。

•現在はサーバベースのリソース課金であるが、今後はプロセス課金の方向になるかも。(というか、PaaSはすでにそうだしね)

Page 75: 捕鯨!詳解docker

捕鯨!詳解 Docker

完2014/12/15までの情報を元に作ってます。明日、また大きな変化が起きるかもしれないそんな日々が続いているお話でした。