Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Docker基礎+Docker0.9/0.10概要
Search
Kazuyuki Mori
April 11, 2014
Programming
0
29
Docker基礎+Docker0.9/0.10概要
Kazuyuki Mori
April 11, 2014
Tweet
Share
More Decks by Kazuyuki Mori
See All by Kazuyuki Mori
ライブ配信サーバー完全に理解した
mainyaa
2
770
BitMech 探索的 トレーディングシステム fin-py study #1
mainyaa
0
44
GoPiGo2で遊んでみた
mainyaa
0
32
Electron(旧atom shell)基礎+入門
mainyaa
0
40
Docker基礎+docker0.9, 0.10概要
mainyaa
0
50
Other Decks in Programming
See All in Programming
モバイルアプリからWebへの横展開を加速した話_Claude_Code_実践術.pdf
kazuyasakamoto
0
330
GitHubとGitLabとAWS CodePipelineでCI/CDを組み比べてみた
satoshi256kbyte
4
240
知っているようで知らない"rails new"の世界 / The World of "rails new" You Think You Know but Don't
luccafort
PRO
1
160
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
370
速いWebフレームワークを作る
yusukebe
5
1.7k
MCPでVibe Working。そして、結局はContext Eng(略)/ Working with Vibe on MCP And Context Eng
rkaga
5
2.3k
Compose Multiplatform × AI で作る、次世代アプリ開発支援ツールの設計と実装
thagikura
0
160
AIコーディングAgentとの向き合い方
eycjur
0
270
Laravel Boost 超入門
fire_arlo
3
220
プロパティベーステストによるUIテスト: LLMによるプロパティ定義生成でエッジケースを捉える
tetta_pdnt
0
330
Testing Trophyは叫ばない
toms74209200
0
880
Zendeskのチケットを Amazon Bedrockで 解析した
ryokosuge
3
310
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
96
6.2k
Designing Experiences People Love
moore
142
24k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
KATA
mclloyd
32
14k
Facilitating Awesome Meetings
lara
55
6.5k
Unsuck your backbone
ammeep
671
58k
GraphQLの誤解/rethinking-graphql
sonatard
72
11k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
Music & Morning Musume
bryan
46
6.8k
Thoughts on Productivity
jonyablonski
70
4.8k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
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の長期的なサポートを提供
補足 • Facebookグループを作ったので良かったら入ってください • https://www.facebook.com/groups/ 237393613114175/
Thanks