docker基礎+docker0.9, 0.10概要

Post on 15-Jan-2015

48.458 Views

Category:

Internet

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

Docker基礎0.9/0.10概要@mainyaa

Image by docker blog

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やりたい人向け(ステマ)

Docker?

Image by docker blog

デプロイの問題

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

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

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

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

場合にどうするか

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

Dockerとは

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

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

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

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

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

きる

● Go言語で書かれている

何を解決するの?

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

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

てパッケージング

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

デプロイ

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

何を解決するの?

● コンテナ仮想化

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

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

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

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

ていける

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

入れるため再現性が高い

何を解決するの?

● ロールバック

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

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

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

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

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

に疎結合に

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

何を解決するの?

● VMと何が違うのか

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

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

ヘッドが少ない

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

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

VM vs コンテナ

Image by docker document

コンテナ?

Image by nromagna

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

● 軽量VM

○ プロセス隔離空間

○ ネットワーク隔離空間

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

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

○ コピーオンライト

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

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

● chrootの強化版

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

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

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

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

○ cgroupsによるリソース制限

Devにとってのコンテナ

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

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

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

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

○ ネイティブアプリ

○ データ

Image by hisashi_0802

Opsにとってのコンテナ

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

○ ログ

○ リモートアクセス

○ ネットワーク設定

○ リソースモニタリング

Image by グッ写/GATAGS

Dockerfile?

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

書いたコード

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

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

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

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

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

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.

AUFS?

● コピーオンライト

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

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

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

● 差分こそDockerのキモ

コピーオンライト+AUFS?

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

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

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

○ VM: 10GB

○ Docker: 1GB

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

AUFS?

Image by docker document

AUFS?

Image by docker document

AUFS?

Image by docker document

AUFS?

Image by docker document

デモ

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

制約

● Linuxでしか動かない

● Linux カーネル3.8以降

● 64bitマシンのみ

● 運用面, securityの課題

Image by Docker blog

まとめ

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

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

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

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

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

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

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

○ CoreOS, etcd, Serf, HAProxy, SkyDNS

Image by Docker blog

Docker 0.9概要

● execution driversにより、足回りが

抽象化された

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

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

バは絶賛開発中

● OpenVZ, systemd-nspawn, libvirt-

lxc, libvirt-sandbox, qemu/kvm,

BSD Jails, Solaris Zones, chroot

Image by docker blog

Docker 0.9概要

● バグ修正多数

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

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

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

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

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

Docker 0.9概要

Image by Docker blog

Docker 0.10概要

● バグ修正多数

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

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

○ TLS認証サポート

○ sytemdプラグインサポート

Docker 1.0の目標

● プロダクション品質

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

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

● 十分なドキュメント

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

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

Image by Docker blog

補足

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

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

Image by Docker blog

top related