Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
AS
Uploaded by
Akihiro Suda
3,809 views
高速にコンテナを起動できるイメージフォーマット
高速にコンテナを起動できるイメージフォーマット
Software
◦
Read more
4
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 44
2
/ 44
3
/ 44
4
/ 44
5
/ 44
6
/ 44
7
/ 44
8
/ 44
9
/ 44
10
/ 44
11
/ 44
12
/ 44
13
/ 44
14
/ 44
15
/ 44
16
/ 44
17
/ 44
18
/ 44
19
/ 44
20
/ 44
21
/ 44
22
/ 44
23
/ 44
24
/ 44
25
/ 44
26
/ 44
27
/ 44
28
/ 44
29
/ 44
30
/ 44
31
/ 44
32
/ 44
33
/ 44
34
/ 44
35
/ 44
36
/ 44
37
/ 44
38
/ 44
39
/ 44
40
/ 44
41
/ 44
42
/ 44
43
/ 44
44
/ 44
More Related Content
PDF
Where狙いのキー、order by狙いのキー
by
yoku0825
PPTX
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
by
NTT DATA Technology & Innovation
PDF
マイクロにしすぎた結果がこれだよ!
by
mosa siru
PDF
Dockerfile を書くためのベストプラクティス解説編
by
Masahito Zembutsu
PPTX
BuildKitによる高速でセキュアなイメージビルド
by
Akihiro Suda
PDF
Docker Compose 徹底解説
by
Masahito Zembutsu
PDF
WebAssemblyのWeb以外のことぜんぶ話す
by
Takaya Saeki
PDF
ソーシャルゲーム案件におけるDB分割のPHP実装
by
infinite_loop
Where狙いのキー、order by狙いのキー
by
yoku0825
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
by
NTT DATA Technology & Innovation
マイクロにしすぎた結果がこれだよ!
by
mosa siru
Dockerfile を書くためのベストプラクティス解説編
by
Masahito Zembutsu
BuildKitによる高速でセキュアなイメージビルド
by
Akihiro Suda
Docker Compose 徹底解説
by
Masahito Zembutsu
WebAssemblyのWeb以外のことぜんぶ話す
by
Takaya Saeki
ソーシャルゲーム案件におけるDB分割のPHP実装
by
infinite_loop
What's hot
PDF
PostgreSQL 15の新機能を徹底解説
by
Masahiko Sawada
PPTX
PostgreSQL共有バッファと関連ツール
by
Masahiko Sawada
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
by
Masahito Zembutsu
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
by
Masahiko Sawada
PDF
NetflixにおけるPresto/Spark活用事例
by
Amazon Web Services Japan
PPTX
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
by
NTT DATA Technology & Innovation
PPTX
はじめてのElasticsearchクラスタ
by
Satoyuki Tsukano
PDF
MHA for MySQLとDeNAのオープンソースの話
by
Yoshinori Matsunobu
PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
by
NTT DATA Technology & Innovation
PDF
ビッグデータ処理データベースの全体像と使い分け
by
Recruit Technologies
PDF
Railsで作るBFFの功罪
by
Recruit Lifestyle Co., Ltd.
PDF
PostgreSQLアンチパターン
by
Soudai Sone
PDF
今日からできる!簡単 .NET 高速化 Tips
by
Takaaki Suzuki
PPTX
Azure API Management 俺的マニュアル
by
貴志 上坂
PDF
KafkaとPulsar
by
Yahoo!デベロッパーネットワーク
PDF
containerdの概要と最近の機能
by
Kohei Tokunaga
PDF
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
by
JustSystems Corporation
PDF
BuildKitの概要と最近の機能
by
Kohei Tokunaga
PDF
SolrとElasticsearchを比べてみよう
by
Shinsuke Sugaya
PDF
MQTTとAMQPと.NET
by
terurou
PostgreSQL 15の新機能を徹底解説
by
Masahiko Sawada
PostgreSQL共有バッファと関連ツール
by
Masahiko Sawada
コンテナの作り方「Dockerは裏方で何をしているのか?」
by
Masahito Zembutsu
アーキテクチャから理解するPostgreSQLのレプリケーション
by
Masahiko Sawada
NetflixにおけるPresto/Spark活用事例
by
Amazon Web Services Japan
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
by
NTT DATA Technology & Innovation
はじめてのElasticsearchクラスタ
by
Satoyuki Tsukano
MHA for MySQLとDeNAのオープンソースの話
by
Yoshinori Matsunobu
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
by
NTT DATA Technology & Innovation
ビッグデータ処理データベースの全体像と使い分け
by
Recruit Technologies
Railsで作るBFFの功罪
by
Recruit Lifestyle Co., Ltd.
PostgreSQLアンチパターン
by
Soudai Sone
今日からできる!簡単 .NET 高速化 Tips
by
Takaaki Suzuki
Azure API Management 俺的マニュアル
by
貴志 上坂
KafkaとPulsar
by
Yahoo!デベロッパーネットワーク
containerdの概要と最近の機能
by
Kohei Tokunaga
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
by
JustSystems Corporation
BuildKitの概要と最近の機能
by
Kohei Tokunaga
SolrとElasticsearchを比べてみよう
by
Shinsuke Sugaya
MQTTとAMQPと.NET
by
terurou
Similar to 高速にコンテナを起動できるイメージフォーマット
PPTX
高速にコンテナを起動できるイメージフォーマット (NTT Tech Conference #2)
by
Akihiro Suda
PDF
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
by
Kohei Tokunaga
PDF
DOO-013_Docker 最新動向と Azure Container Service 入門
by
decode2016
PDF
Dockerの仕組みとIIJ社内での利用例
by
maebashi
PDF
コンテナ導入概要資料2018
by
Masahito Zembutsu
PDF
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
by
NTT DATA Technology & Innovation
PDF
ソフトウェア工学2023 09 CI CD
by
Toru Tamaki
PPTX
KubeCon EU報告(ランタイム関連,イメージ関連)
by
Akihiro Suda
PDF
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
by
Masahito Zembutsu
PDF
オトナのDocker入門
by
Tsukasa Kato
PDF
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
by
Masahiro Nagano
PDF
コンテナ時代にインフラエンジニアは何をするのか
by
gree_tech
PDF
Docker for Windows & Web Apps for Containers 実践活用技法
by
Microsoft Corporation
PPTX
はじめてのDockerパーフェクトガイド(2017年版)
by
Hiroshi Hayakawa
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
by
Kohei Tokunaga
PPTX
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
by
Akihiro Suda
PDF
Docker handson
by
koda3
PPTX
root権限無しでKubernetesを動かす
by
Akihiro Suda
PDF
GPU Container as a Service を実現するための最新OSS徹底比較
by
NTT Communications Technology Development
PPTX
Rootlessコンテナ
by
Akihiro Suda
高速にコンテナを起動できるイメージフォーマット (NTT Tech Conference #2)
by
Akihiro Suda
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
by
Kohei Tokunaga
DOO-013_Docker 最新動向と Azure Container Service 入門
by
decode2016
Dockerの仕組みとIIJ社内での利用例
by
maebashi
コンテナ導入概要資料2018
by
Masahito Zembutsu
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
by
NTT DATA Technology & Innovation
ソフトウェア工学2023 09 CI CD
by
Toru Tamaki
KubeCon EU報告(ランタイム関連,イメージ関連)
by
Akihiro Suda
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
by
Masahito Zembutsu
オトナのDocker入門
by
Tsukasa Kato
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
by
Masahiro Nagano
コンテナ時代にインフラエンジニアは何をするのか
by
gree_tech
Docker for Windows & Web Apps for Containers 実践活用技法
by
Microsoft Corporation
はじめてのDockerパーフェクトガイド(2017年版)
by
Hiroshi Hayakawa
コンテナ未経験新人が学ぶコンテナ技術入門
by
Kohei Tokunaga
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
by
Akihiro Suda
Docker handson
by
koda3
root権限無しでKubernetesを動かす
by
Akihiro Suda
GPU Container as a Service を実現するための最新OSS徹底比較
by
NTT Communications Technology Development
Rootlessコンテナ
by
Akihiro Suda
More from Akihiro Suda
PDF
20260201 [FOSDEM] gomodjail - library sandboxing for Go modules.pdf
by
Akihiro Suda
PDF
20260131 [FOSDEM] Lima v2.0 - expanding the focus to hardening AI.pdf
by
Akihiro Suda
PDF
20251113 [KubeCon NA Pavilion] Lima.pdf_
by
Akihiro Suda
PDF
20251112 [KubeCon NA Pavilion] containerd.pdf
by
Akihiro Suda
PDF
20250617 [KubeCon JP 2025] containerd - Project Update and Deep Dive.pdf
by
Akihiro Suda
PDF
20250616 [KubeCon JP 2025] VexLLM - Silence Negligible CVE Alerts Using LLM.pdf
by
Akihiro Suda
PDF
20250403 [KubeCon EU] containerd - Project Update and Deep Dive.pdf
by
Akihiro Suda
PDF
20250403 [KubeCon EU Pavilion] containerd.pdf
by
Akihiro Suda
PDF
20250402 [KubeCon EU Pavilion] Lima.pdf_
by
Akihiro Suda
PDF
20241115 [KubeCon NA Pavilion] Lima.pdf_
by
Akihiro Suda
PDF
20241113 [KubeCon NA Pavilion] containerd.pdf
by
Akihiro Suda
PDF
【情報科学若手の会 (2024/09/14】なぜオープンソースソフトウェアにコントリビュートすべきなのか
by
Akihiro Suda
PDF
【Vuls祭り#10 (2024/08/20)】 VexLLM: LLMを用いたVEX自動生成ツール
by
Akihiro Suda
PDF
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
by
Akihiro Suda
PDF
20240321 [KubeCon EU Pavilion] Lima.pdf_
by
Akihiro Suda
PDF
20240320 [KubeCon EU Pavilion] containerd.pdf
by
Akihiro Suda
PDF
20240201 [HPC Containers] Rootless Containers.pdf
by
Akihiro Suda
PDF
[Podman Special Event] Kubernetes in Rootless Podman
by
Akihiro Suda
PDF
[KubeConNA2023] Lima pavilion
by
Akihiro Suda
PDF
[KubeConNA2023] containerd pavilion
by
Akihiro Suda
20260201 [FOSDEM] gomodjail - library sandboxing for Go modules.pdf
by
Akihiro Suda
20260131 [FOSDEM] Lima v2.0 - expanding the focus to hardening AI.pdf
by
Akihiro Suda
20251113 [KubeCon NA Pavilion] Lima.pdf_
by
Akihiro Suda
20251112 [KubeCon NA Pavilion] containerd.pdf
by
Akihiro Suda
20250617 [KubeCon JP 2025] containerd - Project Update and Deep Dive.pdf
by
Akihiro Suda
20250616 [KubeCon JP 2025] VexLLM - Silence Negligible CVE Alerts Using LLM.pdf
by
Akihiro Suda
20250403 [KubeCon EU] containerd - Project Update and Deep Dive.pdf
by
Akihiro Suda
20250403 [KubeCon EU Pavilion] containerd.pdf
by
Akihiro Suda
20250402 [KubeCon EU Pavilion] Lima.pdf_
by
Akihiro Suda
20241115 [KubeCon NA Pavilion] Lima.pdf_
by
Akihiro Suda
20241113 [KubeCon NA Pavilion] containerd.pdf
by
Akihiro Suda
【情報科学若手の会 (2024/09/14】なぜオープンソースソフトウェアにコントリビュートすべきなのか
by
Akihiro Suda
【Vuls祭り#10 (2024/08/20)】 VexLLM: LLMを用いたVEX自動生成ツール
by
Akihiro Suda
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
by
Akihiro Suda
20240321 [KubeCon EU Pavilion] Lima.pdf_
by
Akihiro Suda
20240320 [KubeCon EU Pavilion] containerd.pdf
by
Akihiro Suda
20240201 [HPC Containers] Rootless Containers.pdf
by
Akihiro Suda
[Podman Special Event] Kubernetes in Rootless Podman
by
Akihiro Suda
[KubeConNA2023] Lima pavilion
by
Akihiro Suda
[KubeConNA2023] containerd pavilion
by
Akihiro Suda
高速にコンテナを起動できるイメージフォーマット
1.
Copyright©2017 NTT Corp.
All Rights Reserved. ⽇本電信電話(株) ソフトウェアイノベーションセンタ 須⽥ 瑛⼤ <suda.akihiro@lab.ntt.co.jp> ⾼速にコンテナを起動できる イメージフォーマット BDI研究会 (2017/8/1) スライド: https://www.slideshare.net/AkihiroSuda
2.
2 Copyright©2017 NTT Corp.
All Rights Reserved. • GitHub: @AkihiroSuda / Twitter: @_AkihiroSuda_ • コンテナ関連OSSのメンテナ(所謂コミッタ) • Docker Moby Core メンテナ • BuildKit イニシャルメンテナ (github.com/moby/buildkit) • 次世代 `docker build` (DockerfileをDAG化し並⾏実⾏) • またの機会にこちらについても詳しく.. ⾃⼰紹介 2017年4⽉,DockerプロジェクトはMobyプロジェクトに移⾏した. Mobyプロジェクトの成果物を元として,Docker製品が開発されている. : ≒ : RHEL Fedora
3.
3 Copyright©2017 NTT Corp.
All Rights Reserved. • `docker pull` し終わる前に`docker run`可能になるような イメージフォーマットを提案 • 例えば Docker公式のOpenJDKイメージは全体で672MBある が7MB pullした時点でsh起動可能になる • 88MBでJRE,137MBでJDK • その他,重複除去などの利点もあり • OCI標準仕様との互換性を重視 お話しする内容
4.
4 Copyright©2017 NTT Corp.
All Rights Reserved. • Dockerとは • Docker・OCIイメージの構成・問題 • 提案するイメージフォーマット • 今後の技術的・コミュニティ的な取り組み⽅針 • デモ (時間があれば) アウトライン
5.
5 Copyright©2017 NTT Corp.
All Rights Reserved. Dockerとは • いわゆるコンテナ型仮想化基盤 • 仮想マシンより軽い • イメージの作成・共有が簡単 • 昔のjailなどとの⼤きな違い • 分散実⾏にも対応 • 標準: Swarm-mode / 3rd party: Kubernetes など FROM ubuntu:17.04 RUN apt-get install foobar COPY foobar.conf /etc Dockerfileをコミットする イメージがビルドされる クラスタにデプロイできる
6.
6 Copyright©2017 NTT Corp.
All Rights Reserved. • Linuxカーネルが備えるcgroups・namespaceと,Copy-on-Write (CoW)ファイルシステムとを組み合わせて実装されている • AUFS, OverlayFS, BtrFS, ZFSに対応.DeviceMapperでのCoWにも対応. • 対応しているディストリビューションや,安定性などの特性が違う • Dockerfileの1⾏毎にCoWレイヤーが⽣成される • イメージサイズは⼩さく抑えるのが鉄則 (VMとは使い勝⼿が違う) • ⼩さいイメージを多数組み合わせて,マイクロサービス化する • とは⾔っても,現実にはなかなか⼩さくしにくいものである • ⼩さくしやすくする試みとしては,OracleのMicrocontainer (Smith)などが最近出てきている Dockerとは FROM ubuntu:17.04 RUN apt-get install foobar COPY foobar.conf /etc mount –t overlay –o lowerdir=0,upperdir=1 .. mount –t overlay –o lowerdir=1,upperdir=2 ..
7.
7 Copyright©2017 NTT Corp.
All Rights Reserved. • DockerのCoWレイヤは,AUFSレイヤを固めたtarファイルとしてイメー ジ化される • 実際のCoWファイルシステムがOverlayFSでもDeviceMapperでも,AUFSレイヤー のtarとして表現される • QCOW2など,ハイパーバイザ⽤のブロックレベルのCoW技術とは対照的 Docker・OCIイメージの構成 後で説明します TAR TAR FROM ubuntu:17.04 RUN apt-get install foobar COPY foobar.conf /etc mount –t overlay –o lowerdir=0,upperdir=1 .. mount –t overlay –o lowerdir=1,upperdir=2 .. ベースレイヤは普通のtar • 追加・変更されたファイル • 削除されたファイルの情報 (whiteoutファイル) TAR /bin/bash /bin/ls ... /usr/bin/foobar /usr/lib/libfoobar.so ... /etc/foobar.conf
8.
8 Copyright©2017 NTT Corp.
All Rights Reserved. • TARファイルや,環境変数のJSONなどが,merkle tree構造を持つblob ストアに格納される • ⼀般にDocker Registryを⽤いて配信する.(バックエンドはS3やSwiftなど) Docker・OCIイメージの構成 { "schemaVersion": 2, "manifests": [ { "mediaType": "application/vnd.oci.image.manifest.v1+json", "size": 7143, "digest": "sha256:e692418e4cbaf90ca69d05a66403747baa33ee08806650b51fab815ad7fc331f" } } /index.json /blobs/sha256/e692418e... ... (次スライド) JSON JSON
9.
9 Copyright©2017 NTT Corp.
All Rights Reserved. /blobs/sha256/e692418e... { "schemaVersion": 2, "config": { "mediaType": "application/vnd.oci.image.config.v1+json", "size": 7023, "digest": "sha256:b5b2b2c507a0944348e0303114d8d93aaaa081732b86451d9bce1f432a537bc7" }, "layers": [ { "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip", "size": 33554432, "digest": "sha256:61be55a8e2f6b4e172338bddf184d6dbee29c98853e0a0485ecee7f27b9af0b4" }, { "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip", "size": 1073741824, "digest": "sha256:3c3a4604a545cdc127456d94e421cd355bca5b528f4a9c1905b15da2eb4a4c6b" }, { "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip", "size": 73109, "digest": "sha256:ec4b8955958665577945c89419d1af06b5f7636b4ac3da7f12184802ad867736" } ] } /blobs/sha256/b5b2b2c5... (環境変数などのJSON) /blobs/sha256/61be55a8... (ベースレイヤのtar) /blobs/sha256/3c3a4604... (差分レイヤのtar) /blobs/sha256/ec4b8955... (更なる差分レイヤのtar) TAR TAR TAR JSON JSON
10.
10 Copyright©2017 NTT Corp.
All Rights Reserved. • merkle tree構造を持っているので,manifestのSHA256値を指定すれば, 確実に環境を再現できる (`docker pull foobar@sha256:e692418e..`) Docker・OCIイメージの構成 /index.json /blobs/sha256/e692418e... /blobs/sha256/b5b2b2c5... /blobs/sha256/61be55a8... /blobs/sha256/3c3a4604... /blobs/sha256/ec4b8955... Index Manifest 環境変数などのconfig AUFSレイヤのtar群 merkle tree
11.
11 Copyright©2017 NTT Corp.
All Rights Reserved. • 2017年7⽉,Linux Foundation傘下のOpen Containers Initiative によりOCIイメージ仕様の策定完了 • CoreOS陣営が提案していたappc・ACIもOCIに合流した • データ構造はDockerイメージと類似しており,⾼い互換性を持つが, Docker Registry HTTP APIに依存しなくなった. HTTP, NFS, IPFSなど,ディレクトリ的なセマンティックを持つ任意のプ ロトコルで配信可能. • 個⼈的にはIPFSなどP2Pを⽤いたイメージ配信に期待 • Dockerでも,近々正式に実装予定. • ※混同に注意: Dockerfileの構⽂・命令が標準化されたわけではない OCIイメージ≒Dockerイメージ
12.
12 Copyright©2017 NTT Corp.
All Rights Reserved. • tar = Tape ARchiverが現れたのは1979年 (UNIX 7th Edition) • 磁気テープ前提のフォーマットのため,本来はDocker・OCIのユースケース に合っていない Docker・OCIイメージの問題 1970年代のUNIXがターゲットとしていた PDP-11 ミニコンピュータ & 磁気テープドライブ https://en.wikipedia.org/wiki/PDP-11
13.
13 Copyright©2017 NTT Corp.
All Rights Reserved. • tar内のファイルの⼀覧がわからない ⇒テープ全体を読み終わるまでmountできない • ファイルがどのオフセットにあるかわからない (tarとは別に索引を作成したとしても, tarがgzipなどで圧縮されていると, どのみちseekできない) 問題1: 「テープ」全体を⾛査しないとメタデータを取得できない メタデータ0 ファイル0 メタデータ1 ファイル2 メタデータ{n-1} ファイル{n-1} 終端 zero (1024B) ... ファイル名や パーミッションなど ファイル内容
14.
14 Copyright©2017 NTT Corp.
All Rights Reserved. 問題1: 「テープ」全体を⾛査しないとメタデータを取得できない この問題が解決できれば,メタデータだけpullした時点でmount(2)しておき, ファイル本体はread(2)が発⽣した時点でlazyにpullできるようになる! • 巨⼤なコンテナイメージを多数のノードに配信する場合,起動時間短縮・ネッ トワーク負荷軽減できて嬉しい ユースケース • ⼤量のHTMLや画像ファイルを含むWebアプリケーション • 様々なビッグデータとコードとをひとまとめにしたイメージ • 論⽂を`docker run foo@sha256:deadbeef..` 1発で確実に再現できる世界 になると嬉しい • 巨⼤なOS (GNOME・KDE⼊りの仮想デスクトップ環境や,Windowsなど) • 巨⼤な⾔語ランタイム (Java,.NETなど) • 複数のソフトウェアを結合試験する環境 など
15.
15 Copyright©2017 NTT Corp.
All Rights Reserved. • 1つのレジストリで,複数の似たようなイメージを配信することを考える • バージョン違い • アーキテクチャ違い • 設定違い など • 同じファイルを多数含むtarであっても,別々のblobになるため,ストレ ージが無駄になる 問題2: blobの重複を除去できない FROM ubuntu:17.04 RUN apt-get install foo FROM ubuntu:17.04 RUN apt-get install foo bar FROM debian:9 RUN apt-get install foo FROM ubuntu:17.04 RUN echo … > /etc/apt/source.list RUN apt-get install foo 同じファイルを多数含んでいるが別物
16.
16 Copyright©2017 NTT Corp.
All Rights Reserved. • 巨⼤なtarレイヤのblobは,複数のrangeに分けて,複数のコネクション を使って並列にpullしたい • 複数のサーバを利⽤できる場合,短時間でのpull完了が⾒込まれる • しかし任意のプロトコルで可能なわけではない • HTTP/1.1 Range Requestsは RFC7233 にてOPTIONALとされている 問題3: ⼀般に,単⼀レイヤを分割して並列にpullできない Range 0-1023 Range 1024-2047
17.
17 Copyright©2017 NTT Corp.
All Rights Reserved. 1. 「テープ」全体を⾛査しないとメタデータを取得できない 2. 重複除去できない 3. ⼀般に,単⼀レイヤを分割して並列にpullできない Docker・OCIイメージの問題 まとめ
18.
18 Copyright©2017 NTT Corp.
All Rights Reserved. 提案するイメージフォーマット FILEgrain(仮称) https://github.com/AkihiroSuda/filegrain
19.
19 Copyright©2017 NTT Corp.
All Rights Reserved. • 単⼀のtar blobを,ファイル毎に別個のblobに崩す • 各ファイルのSHA256ダイジェストをメタデータに記載しcontent-addressableにする • メタデータのblobさえpullすれば,getdents(2)やstat(2)できるので, イメージ全体をpullせず,mount(2)・コンテナ起動可能 • read(2)が発⽣した段階で初めて,lazyにpullすればよい 提案するイメージフォーマットの概略 メタデータ0 ファイル0 メタデータ1 ファイル2 メタデータ{n-1} ファイル{n-1} 終端 zero (1024B) ... メタデータ0 ファイル0 メタデータ1 ファイル2 メタデータ{n-1} ファイル{n-1} ... TAR continuity ファイル名,パーミッション, SHA256ダイジェストなど content-addressable
20.
20 Copyright©2017 NTT Corp.
All Rights Reserved. • メタデータはcontinuityで表現する • continuity.. containerdコミュニティで提案されている,ファイルシステ ムメタデータ記述フォーマット (https://github.com/containerd/continuity) • ファイル名,パーミッション,xattr(7),ダイジェスト値などをProtocolBuffers形式で シリアライズする • 次世代containerd(下位ランタイム)のテストで使われているほか, Docker・Mobyでもイメージ検証に使う案がある (moby-core#32153) • 類似フォーマットにBSDのmtree(8)がある • 将来的にcontainerdに統合したいので,containerdコミュニティ系のcontinuityにした • containerdコミュニティについては最後の⽅のスライドで説明 (Docker・Kubernetes共通の次世代ランタイム) メタデータのフォーマット
21.
21 Copyright©2017 NTT Corp.
All Rights Reserved. • 単⼀のOCIイメージ中に,普通のOCIマニフェストと,提案フォーマットのマ ニフェストの両⽅を格納できる • ⇒提案フォーマットに対応・未対応のソフトウェアを容易に共存させることができる OCIイメージとの互換性を重視 /index.json /blobs/sha256/e692... /blobs/sha256/b5b2... /blobs/sha256/61be... /blobs/sha256/3c3a... /blobs/sha256/ec4b... Index OCI Manifest 環境変数などのconfig (共通) AUFSレイヤのtar群 /blobs/sha256/a8e3... 提案フォーマットのManifest /blobs/sha256/de81... continuity /blobs/sha256/583f... /blobs/sha256/3af1... /blobs/sha256/5c2a... /blobs/sha256/39c1... /blobs/sha256/12ea... ばらされたファイル群(⼤量) `docker pull foo:v1-filegrain` `docker pull foo:v1` {"v1-filegrain": "sha256:a8e3..", "v1":"sha256:e692.."}
22.
22 Copyright©2017 NTT Corp.
All Rights Reserved. • 普通のOCIのtarレイヤに,提案フォーマットのレイヤを重ね合わせること ができるので,⽋点を補い合うことができる • 細かい⼤量のファイルは普通のtarにまとめるほうが,I/Oが1回で済むし,圧縮率向上 も期待できるので,速い場合もある OCIイメージとの互換性を重視 { ... "layers": [ { "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip", "size": 33554432, "digest": "sha256:e692..." }, { "mediaType": "application/vnd.continuity.layer.v0+pb", "size": 16724, "digest": "sha256:a18b..." } ] } TAR continuity 頻繁に使うファイルや, 細かいファイルは 普通のOCIのレイヤ (pullし終わるまでコンテナ を起動できない) かさばるファイルは提案フォーマットのレイヤ (lazyにpullできるが細かいファイルに不向き)
23.
23 Copyright©2017 NTT Corp.
All Rights Reserved. 問題1.「テープ」全体を⾛査しないとメタデータを取得できない ⇒ continuityのblobだけpullすればメタデータを取得できる. ファイル本体をpullする前にmount・コンテナ起動可能. 問題2. 重複除去できない ⇒ ファイルを細かいblobにばらしたので,同じファイルを含むレイヤは⾃ ずと重複除去される 問題3. ⼀般に,単⼀レイヤを分割して並列にpullできない ⇒ ファイルを細かいblobにばらしたので,並列にpullできる Docker・OCIイメージの問題を解決できる
24.
24 Copyright©2017 NTT Corp.
All Rights Reserved. 1. blob数の肥⼤化 • イメージをファイルシステム上に配置する場合,/blobs/sha256 ディレクトリに⼤ 量のファイルが出来るため,readdir(3) が遅くなりがち • /blobs/sha256/deadbeef..を/blobs/sha256/de/deadbeef..のように"sharding"する テクニックは不可 (OCIとの互換性のため) 2. RPCオーバヘッド増⼤ • 細かいファイルは単⼀のtarにまとめてpullするほうがRPCが少なくて済む 3. イメージによっては圧縮率低下 • 似たようなファイルを多数含むレイヤは,従来通り,単⼀のtarにまとめると⾼い圧 縮率が期待される ただし,前述の通り,従来のOCIレイヤとの重ね合わせでカバー可能 提案フォーマットの⽋点
25.
25 Copyright©2017 NTT Corp.
All Rights Reserved. 没案: 外部ストアを併⽤する ⇒特定のプロトコルに依存するし,OCIのmerkle treeを使えなくなること があり,環境再現性・セキュリティ⾯での懸念があるため,没 なぜ他の⽅法にしないか 類似研究: Harter, Tyler, et al. "Slacker: Fast Distribution with Lazy Docker Containers." FAST. 2016. • NFS上のext4イメージをループバックマウントし,ブロック粒度でのlazy-pull,重複除去を実現 Lestaris, George. "Alternatives to layer-based image distribution: using CERN filesystem for images." Container Camp UK. 2016. Blomer, Jakob, et al. "A Novel Approach for Distributing and Managing Container Images: Integrating CernVM File System and Mesos." MesosCon NA. 2016. • CernVM-FSを⽤いて,ファイル粒度でのlazy-pull,重複除去を実現 • CernVM-FSもmerkle treeを持っているが,OCIのmerkle treeに接ぎ⽊するには⼀⼿間要りそう IPFS(P2Pでcontent-addressableなファイルシステム)の使⽤も考えたが,特定プロトコルに依存したく なかったので没 ※提案フォーマットはHTTPでもNFSでもCernVM-FSでもIPFSでも,任意のプロトコルで配信可能
26.
26 Copyright©2017 NTT Corp.
All Rights Reserved. 没案2: tarを先頭からseekしていけばよいのではないか? ⇒没 • 圧縮されたtarではseek不可能 • ⾮圧縮tarでもプロトコルによってはseekできない • メタデータ全体をとるためのリクエストが多発 なぜ他の⽅法にしないか メタデータ0 ファイル0 メタデータ1 ファイル2 メタデータ{n-1} ファイル{n-1} 終端 zero (1024B) ... ファイル本体を読み⾶ばしてseekし メタデータだけ先に集める? TAR
27.
27 Copyright©2017 NTT Corp.
All Rights Reserved. 没案3: tarの代わりにzip(など)にすればよいのではないか? ⇒プロトコルによってはseekできないし,zipはメタデータのサポートが弱 いので没 なぜ他の⽅法にしないか ZIP 予備メタデータ0 圧縮済ファイル0 予備メタデータ1 圧縮済ファイル2 予備メタデータ{n-1} 圧縮済ファイル{n-1} ... フッタ メタデータ0 メタデータ1 ... メタデータ{n-1} メタデータだけまとめて先にpullできる?
28.
28 Copyright©2017 NTT Corp.
All Rights Reserved. 評価
29.
29 Copyright©2017 NTT Corp.
All Rights Reserved. • read-onlyなFUSEファイルシステムとして実装 • 将来的にもread-onlyのままのつもり • コンテナはVMとは違い,immutableにするのが鉄則./tmp, /runとパーシステントボ リューム以外への書き込みは⾏うべきではない. • /tmpや/runは⼀般にtmpfsを別途マウントする • パーシステントボリュームは,ホスト側のext4やXFSをbind-mountする • 実際,OverlayFSやAUFSも書き込み操作のサポートは限定的 (https://github.com/AkihiroSuda/docker-issues) • 1つのファイルに対してROなfdとRWなfdを両⽅openし,書き込むと,ROな⽅が意図しない 結果を返す.(yumなど実際のアプリケーションに影響するが,バグではなくoverlayの仕様) • 今のところ,Dockerは任意にmountされたrootfsを使えないので, Dockerそのものには統合できていない.runc (Docker, containerdの下 位ランタイム)を⽤いて評価した. 実装
30.
30 Copyright©2017 NTT Corp.
All Rights Reserved. 評価に⽤いたイメージ イメージ 説明 rootfs (tar+gzip展開後) openjdk:8 sha256:5da842d59f76009fa27ffde06888ebd 560c7ad17607d7cd1e52fc0757c9a45fb Debian 9.1, OpenJDK 8u141 671.7MB kdeneon/all sha256:e3e7f216a5f8f1fdcff4eab8807d7af cd291c050099ab3e8a8355b7b28a19247 Ubuntu 16.04, KDE Plasma 5.10, Firefox 54など 4.8GB kaggle/python sha256:335103c998aea22a5608c2eeca7dcf1 09e0828ed233b75f5098182c5b058fe98 Debian 8.5, 様々な機械学習フレー ムワーク, NLTKデータセット(⾃然 ⾔語関連)など 8.3GB ※詳細な再現⼿順は https://github.com/AkihiroSuda/filegrain/issues/17 に掲載.
31.
31 Copyright©2017 NTT Corp.
All Rights Reserved. • openjdk:8 (総blob容量 = 671.7MB + メタ 5.4MB) • マウント: 5.4MB ( 2 blobs) • イメージ本体のblobではなく,メタデータ(manifestとcontinuity)の読み込み • `sh`: 累計 7.3MB ( 8 blobs) • `java –version`: 累計 88.2MB ( 30 blobs) • `javac HelloWorld.java`: 累計137.3MB ( 50 blobs) • kdeneon/all (4.8GB + 34.5MB) • マウント: 34.5MB ( 2 blobs) • `sh`: 累計36.7MB ( 8 blobs) • `startkde`: 累計742.7MB (4,267 blobs) • `firefox`: 累計866.6MB (4,506 blobs) ※各コマンドは続けて起動 評価: コンテナ起動に必要なblob量 (無圧縮) 1/5 1/5 以下
32.
32 Copyright©2017 NTT Corp.
All Rights Reserved. • kaggle/python (8.3GB + 38.2MB) • マウント: 38.2MB ( 2 blobs) • `sh`: 累計 40.1MB ( 8 blobs) • `ipython –c ʻecho(“hello”)ʼ`: 累計 75.4MB (1033 blobs) • `ipython –c ʻimport nltkʼ`: 累計352.0MiB (2799 blobs) 評価: コンテナ起動に必要なblob量 (無圧縮) 1/24 以下
33.
33 Copyright©2017 NTT Corp.
All Rights Reserved. 評価: 圧縮率 イメージ rootfs 従来のtarをまと めてgzip -9 提案フォーマット +各blobを個別 にgzip -9 openjdk:8 671.7MB 261.3MB 260.7MB (-645,604B) kdeneon/all 4.8GB 2.1GB 2.1GB (-489,361B) kaggle/python 8.3GB 3.6GB 3.6GB (+4,345,701B) 今回試験したイメージでは圧縮率の違いは誤差の範囲 (似たようなblobが多いイメージでは圧縮率は悪くなりそう)
34.
34 Copyright©2017 NTT Corp.
All Rights Reserved. 評価: 重複除去 kdeneon/all (4.8GB) kaggle/python (8.3GB) 75.4MB の重複を除去できる (互いに全然関係なさそうなイメージだが, Debian系に共通のファイルがあるため重複blobがある)
35.
35 Copyright©2017 NTT Corp.
All Rights Reserved. 評価: FUSEのオーバヘッド 0.1 1 10 100 1回⽬ 2回⽬ 3回⽬ 4回⽬ 5回⽬ 6回⽬ 7回⽬ 8回⽬ 9回⽬ 10回⽬ openjdkの/usr以下をtarで固めるのに要する秒数 従来のDocker (overlay2) 提案フォーマットのFUSE(read-only) Docker 17.06 / Fedora 26 / 2 vCPUs, 2GB RAM, 2GB swap (VMware Fusion, MacBook Pro 2016)
36.
36 Copyright©2017 NTT Corp.
All Rights Reserved. 評価: FUSEのオーバヘッド 0.1 1 10 100 1回⽬ 2回⽬ 3回⽬ 4回⽬ 5回⽬ 6回⽬ 7回⽬ 8回⽬ 9回⽬ 10回⽬ openjdkの/usr以下をtarで固めるのに要する秒数 従来のDocker (overlay2) 提案フォーマットのFUSE(read-only) 提案⼿法ではコンテナ起動後,readが発⽣して初めてblobをpullする. そのため初回データにはpullの時間を含む. (今回はlocalhostがリモートなのでネットワークのオーバヘッドは含まない). ※従来Dockerの⽅は,イメージをpullしてからコンテナ起動するので pullの時間は含んでいない.
37.
37 Copyright©2017 NTT Corp.
All Rights Reserved. 評価: FUSEのオーバヘッド 0.1 1 10 100 1回⽬ 2回⽬ 3回⽬ 4回⽬ 5回⽬ 6回⽬ 7回⽬ 8回⽬ 9回⽬ 10回⽬ openjdkの/usr以下をtarで固めるのに要する秒数 従来のDocker (overlay2) 提案フォーマットのFUSE(read-only) カーネルのキャッシュが効いて速くなる 実装上の何らかの理由で カーネルのキャッシュが効いていない? (read-onlyなので原理的には簡単なはず.楽観的.)
38.
38 Copyright©2017 NTT Corp.
All Rights Reserved. • PullのためのRPCの数が増えることのオーバヘッド • プロトコルに依存する • TODO: Docker Registry APIのクライアントを実装し評価する. • 現在のPOCはローカルディレクトリをレジストリ代わりにしている. 評価: その他
39.
39 Copyright©2017 NTT Corp.
All Rights Reserved. 今後の⽅針
40.
40 Copyright©2017 NTT Corp.
All Rights Reserved. • ファイルより細かい粒度への対応 • ⼤きいファイルはchunk毎にSHA256ダイジェストを計算し,continuityとはまた別 のフォーマットとして保存しておけばよい (continuity#85) • コンテナ起動時にすぐ必要となりそうなファイルを検出し,予め1つのtar にまとめておく • pushする前に1回コンテナを起動し,FUSEの呼び出しをトレースしておけばよい 今後の技術的な⽅針
41.
41 Copyright©2017 NTT Corp.
All Rights Reserved. • 現在,Dockerは多数の”LEGOブロック”へ分解・再編成されつつある最中 • ガバナンスの明確化 • 拡張モジュール開発の容易化 コミュニティ的な取り組み⽅針 Docker CLI Moby Core (dockerd) containerd runc BuildKit (buildd) SwarmKit (swarmd) CLI (これだけはDocker社がコミット権独占) 各モジュールのAPIを統合 分散実⾏Dockerfile的なDAGを実⾏ cgroups, namespace OCIイメージ・CoW FSなど ⾚枠内はKubernetesとも共通する (今後,Dockerの代わりのランタイムとして選択可能になる) 提案フォーマットをcontainerd周辺に導⼊することを⽬指す (DockerやKubernetesの拡張機能として簡単に使えるようにする)
42.
42 Copyright©2017 NTT Corp.
All Rights Reserved. まとめ
43.
43 Copyright©2017 NTT Corp.
All Rights Reserved. • `docker pull` し終わる前に`docker run`可能になるような イメージフォーマットを提案 • https://github.com/AkihiroSuda/filegrain • 例えば Docker公式のOpenJDKイメージは全体で672MBある が7MB pullした時点でsh起動可能になる • 88MBでJRE,137MBでJDK • その他,重複除去などの利点もあり • OCI標準仕様との互換性を重視 まとめ
44.
44 Copyright©2017 NTT Corp.
All Rights Reserved. デモ (時間があれば)
Download