docker基礎+docker0.9, 0.10概要

32
Docker基礎 0.9/0.10概要 @mainyaa Image by docker blog

Upload: kazuyuki-mori

Post on 15-Jan-2015

48.458 views

Category:

Internet


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Docker基礎+docker0.9, 0.10概要

Docker基礎0.9/0.10概要@mainyaa

Image by docker blog

Page 2: Docker基礎+docker0.9, 0.10概要

Who

● @mainyaa

● Kazuyuki Mori

● フロントエンドからバックエンドまでやる系エンジニア

● AngualrJSとDocker大好き

● Topgate, Inc. - http://www.topgate.co.jp/

● Happy New World - http://d.hatena.ne.jp/mainyaa

● 日経ソフトウエア 2014年06月号 でDockerの記事書いてます

○ WindowsでDockerやりたい人向け(ステマ)

Page 3: Docker基礎+docker0.9, 0.10概要

Docker?

Image by docker blog

Page 4: Docker基礎+docker0.9, 0.10概要

デプロイの問題

● デプロイしてみたら動きませんでした><

● サーバーごとに違う環境変数、pythonのバー

ジョン、ライブラリのバージョン

● 手元では上手くいくが、プロダクションでは転ぶ

場合にどうするか

● ロックインを避けつつスケールしたい

Page 5: Docker基礎+docker0.9, 0.10概要

Dockerとは

● オープンソースの次世代仮想化技術

● アプリケーションを「コンテナ」にパッ

ケージング&デプロイ&実行

● 1回ビルドすればどこでも動く

● Dockerfileさえあればいつでも再現で

きる

● Go言語で書かれている

Page 6: Docker基礎+docker0.9, 0.10概要

何を解決するの?

● デプロイ作業をもっと手軽に!

○ Dockerfileを元に必要なライブラリや環境変数もまとめ

てパッケージング

○ パッケージングしたコンテナ仮想環境を実行&テスト&

デプロイ

Dockerfileでインフラをコードとして扱える

Page 7: Docker基礎+docker0.9, 0.10概要

何を解決するの?

● コンテナ仮想化

○ ビルドもデプロイも高速

○ オーバーヘッドが少ない

○ プラットフォームやハードウェアからの隔離環境

○ ラップトップで動いているものをそのままサーバーに持っ

ていける

問題が起きても、本番と同一のコンテナを手元で動かせ、shellで

入れるため再現性が高い

Page 8: Docker基礎+docker0.9, 0.10概要

何を解決するの?

● ロールバック

○ すべてのコンテナには固有IDがある

○ Dockerfileの行ごとにコンテナIDが作られる

○ 全てのコンテナは親からの差分保存

○ gitのように失敗した時点に戻ってやりなおせる

○ アプリケーション、DB、ネイティブツールをコンテナ単位

に疎結合に

依存関係ごとバージョン切り替え&ロールバック

Page 9: Docker基礎+docker0.9, 0.10概要

何を解決するの?

● VMと何が違うのか

○ Dockerfileでインフラをコードにできる

○ ゲストOSがなく、カーネルを共有しているためオーバー

ヘッドが少ない

○ 過去の成功分は再実行しないため、テストやCIも高速

○ Dockerコンテナ != Linuxコンテナ

Page 10: Docker基礎+docker0.9, 0.10概要

VM vs コンテナ

Image by docker document

Page 11: Docker基礎+docker0.9, 0.10概要

コンテナ?

Image by nromagna

Page 12: Docker基礎+docker0.9, 0.10概要

ハイレベルから見たコンテナ

● 軽量VM

○ プロセス隔離空間

○ ネットワーク隔離空間

○ リソース分離:CPU, メモリのcgroupsによる制御

○ ルートとして実行できる

○ コピーオンライト

○ ログはすべてstdout/stderr/stdin

Page 13: Docker基礎+docker0.9, 0.10概要

ローレベルから見たコンテナ

● chrootの強化版

○ 1コンテナ=1プロセス

○ カーネルをホストと共有している

○ エミュレーションがない

■ VMでもないし準仮想化でもない

○ cgroupsによるリソース制限

Page 14: Docker基礎+docker0.9, 0.10概要

Devにとってのコンテナ

● コンテナ内だけを気にすればよい

○ アプリケーションのコード

○ アプリケーションの依存ライブラ

○ パッケージマネージャー

○ ネイティブアプリ

○ データ

Image by hisashi_0802

Page 15: Docker基礎+docker0.9, 0.10概要

Opsにとってのコンテナ

● コンテナ外だけを気にすればよい

○ ログ

○ リモートアクセス

○ ネットワーク設定

○ リソースモニタリング

Image by グッ写/GATAGS

Page 16: Docker基礎+docker0.9, 0.10概要

Dockerfile?

● OSのスクラッチイメージからアプリケーションが動作するまでを

書いたコード

● Dockerは、ビルド時にDockerfileの1行ごとにコンテナを作り、

sha1ハッシュのコンテナIDを割り当てる

● コンテナは常に親コンテナからの差分の積み上げ

● Dockerfileの一部を変えても、成功部分は実行しないため、テ

ストやCIが非常に高速になる

Page 17: Docker基礎+docker0.9, 0.10概要

FROM ubuntu:12.04 # Pull base image.

RUN apt-get update

RUN apt-get apt-get install -y redis-server --

no-install-recommends # Install redis.

RUN apt-get clean && rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/*EXPOSE 80 # Expose ports.

ENTRYPOINT ["/usr/bin/redis-server"] # Define default command.

Page 18: Docker基礎+docker0.9, 0.10概要

AUFS?

● コピーオンライト

○ 変更が発生したら初めて保存

● レイヤー構造のファイルシステム

● 親コンテナからの差分のみを保存していく

● 差分こそDockerのキモ

Page 19: Docker基礎+docker0.9, 0.10概要

コピーオンライト+AUFS?

● ルートファイルシステムはコピーオンライトで作られる

● もし、1GBのゲストOSを10個動かそうとした場合に使用する

ディスクスペースは・・・?

○ VM: 10GB

○ Docker: 1GB

● 高速デプロイ、省メモリ、省ディスクスペース

Page 20: Docker基礎+docker0.9, 0.10概要

AUFS?

Image by docker document

Page 21: Docker基礎+docker0.9, 0.10概要

AUFS?

Image by docker document

Page 22: Docker基礎+docker0.9, 0.10概要

AUFS?

Image by docker document

Page 23: Docker基礎+docker0.9, 0.10概要

AUFS?

Image by docker document

Page 24: Docker基礎+docker0.9, 0.10概要

デモ

● https://asciinema.org/a/7392

Page 25: Docker基礎+docker0.9, 0.10概要

制約

● Linuxでしか動かない

● Linux カーネル3.8以降

● 64bitマシンのみ

● 運用面, securityの課題

Image by Docker blog

Page 26: Docker基礎+docker0.9, 0.10概要

まとめ

● Dockerならディスクスペースを抑えつつ仮想化できるよ

○ 固めて、積み上げて、配信して、切り替える

○ コピーオンライトによる差分

○ どのコンテナにもshellで入って再現できる

● アプリケーションのお試しや配布が手軽にできる

● プライベートなPaaS● 自動テストやCI● 1日に数十回のデプロイ

● 中央集権型から分散型へ

○ CoreOS, etcd, Serf, HAProxy, SkyDNS

Image by Docker blog

Page 27: Docker基礎+docker0.9, 0.10概要

Docker 0.9概要

● execution driversにより、足回りが

抽象化された

● 多数の隔離ツールがトレードオフとと

もに利用できるようになった。ドライ

バは絶賛開発中

● OpenVZ, systemd-nspawn, libvirt-

lxc, libvirt-sandbox, qemu/kvm,

BSD Jails, Solaris Zones, chroot

Image by docker blog

Page 28: Docker基礎+docker0.9, 0.10概要

Docker 0.9概要

● バグ修正多数

● docker build 時に--rmがデフォルトになった

● libcontainerがデフォルトのドライバとなった

○ Pure Go-langで書かれたユーザーランドパッケージに

依存しない隔離ライブラリ

○ = lxcは必須じゃなくなった

Page 29: Docker基礎+docker0.9, 0.10概要

Docker 0.9概要

Image by Docker blog

Page 30: Docker基礎+docker0.9, 0.10概要

Docker 0.10概要

● バグ修正多数

● 品質向上とシステム管理者向けのアップデート

○ シグナルハンドリング修正

○ TLS認証サポート

○ sytemdプラグインサポート

Page 31: Docker基礎+docker0.9, 0.10概要

Docker 1.0の目標

● プロダクション品質

● すべての主要なOSでのファーストクラスのサポート

● 小さなコアと安定したプラグインというアーキテクチャ

● 十分なドキュメント

● Dockerとパートナーによって、商用サポートができること

● Dockerの長期的なサポートを提供

Image by Docker blog

Page 32: Docker基礎+docker0.9, 0.10概要

補足

● Facebookグループを作ったので良かったら入ってください

● https://www.facebook.com/groups/237393613114175/

Image by Docker blog