Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
いまさら聞けない Linux コンテナの基礎 / KOF 2015
tenforward
November 06, 2015
Technology
6
2.5k
いまさら聞けない Linux コンテナの基礎 / KOF 2015
KOF 2015 の発表資料です。
参考となる情報にはPDF中からリンクをしていますが、資料中のリンクは Speaker Deck 上ではクリックできないので PDF をダウンロードしてご覧ください。
tenforward
November 06, 2015
Tweet
Share
More Decks by tenforward
See All by tenforward
コンテナの歴史を追いながらいまいちどコンテナについておさらいしてみる / Infra Study 2nd #2
tenforward
10
3.1k
seccomp notify による安全なコンテナ実行環境 / 14th CTStudy
tenforward
0
470
cgroup v1 の内部構造 / 13th CTStudy
tenforward
1
470
cgroup v1概要 / 12th CTStudy
tenforward
2
540
最近のLinuxコンテナの進化 / TechFeed Summit #3
tenforward
3
770
歴史から紐解く Linux カーネルのコンテナ機能 / KOF2019
tenforward
3
460
歴史から紐解くLinuxカーネルのコンテナ機能 / CNDT2019
tenforward
27
7.6k
システムコンテナ向けエンジン LXC/LXD のご紹介 / JapanContainerDays v18.12 meetup
tenforward
2
640
Linux コンテナの内部を知ろう / OSC 2018 Kyoto
tenforward
7
3.5k
Other Decks in Technology
See All in Technology
長年運用されてきたモノリシックアプリケーションをコンテナ化しようとするとどんな問題に遭遇するか? / SRE NEXT 2022
nulabinc
PRO
15
7.1k
Poolにおける足を止めないシステム基盤構築
winebarrel
3
640
モダンデータスタックとかの話(データエンジニアのお仕事とは)
foursue
0
230
數據的多重宇宙 @ LINE Taiwan
line_developers_tw
PRO
0
500
msal.jsのあれこれ
takas0522
0
1.4k
キャッチアップ Android 13 / Catch up Android 13
yanzm
2
910
2022年度ロボットフロンティア第1回
ryuichiueda
0
120
Salesforce女子部-権限についてまとめてみたその1
sfggjp
0
180
Nutanix_Meetup_20220511
keigotomomatsu
0
140
エンジニアと気軽に繋がれるプラットフォーム「ハッカー飯」で行った セキュリティ・モニタリングに関する取り組みについて
nobuakikikuchi
0
350
街じゅうを"駅前化"する電動マイクロモビリティのシェアサービス「LUUP」のIoTとSRE
0gm
1
500
jaws-ug-asa-datasync-20220510
hiashisan
0
460
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
12
890
Designing for humans not robots
tammielis
241
23k
Producing Creativity
orderedlist
PRO
333
37k
Making Projects Easy
brettharned
98
4.3k
The MySQL Ecosystem @ GitHub 2015
samlambert
238
11k
The Web Native Designer (August 2011)
paulrobertlloyd
74
1.9k
Raft: Consensus for Rubyists
vanstee
126
5.4k
Streamline your AJAX requests with AmplifyJS and jQuery
dougneiner
125
8.5k
Writing Fast Ruby
sferik
612
57k
Code Reviewing Like a Champion
maltzj
506
37k
Art, The Web, and Tiny UX
lynnandtonic
280
17k
Building Adaptive Systems
keathley
25
1.1k
Transcript
͍·͞Βฉ͚ͳ͍ Linuxίϯςφͷجૅ KOF 2015 Ճ౻ହจ lxc-jp 2015-11-06 Ճ౻ହจ (lxc-jp) KOF
2015 2015-11-06 1 / 53
ࣗݾհ Ճ౻ହจ http://www.ten-forward.ws/ @ten forward http://gplus.to/tenforward https://github.com/tenforward http://d.hatena.ne.jp/defiant/ (ٕज़ϒϩά) Ճ౻ହจ
(lxc-jp) KOF 2015 2015-11-06 2 / 53
ࣗݾհ ϑΝʔεταʔόɹج൫։ൃ෦ɹॴଐ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 3 / 53
ࣗݾհ Plamo Linux ϝϯςφ LXC ͰֶͿίϯςφೖɹʔܰྔԾԽڥΛ࣮ݱ͢Δٕज़ gihyo.jp Ͱ࿈ࡌ Ճ౻ହจ (lxc-jp)
KOF 2015 2015-11-06 4 / 53
ࣗݾհ LXC ͷ։ൃʹগ͠ࢀՃ man page ͷຊޠ༁ ެࣜϖʔδ (linuxcontainers.org) ༁ όάϑΟοΫεͳͲগ͚ͩ͠ίʔυʹߩݙ
Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 5 / 53
ࠓͷඪ ίϯςφͷ֓ཁΛཧղ͢Δ Linux Χʔωϧ͕࣋ͭίϯςφ͕͏ओཁͳػೳΛ֮͑Δ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 6
/ 53
ࠓͷ༰ ίϯςφͷ֓ཁ Linux ʹ͓͚ΔίϯςφͷΈ Namespace σϞ Cgroup σϞ ωοτϫʔΫؔ࿈ػೳ (͕࣌ؒ͋Ε)
ίϯςφͰ͑Δ໘ന͍ػೳ (͕࣌ؒ͋Ε) ·ͱΊ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 7 / 53
ίϯςφ֓ཁ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 8 / 53
ίϯςφͱ ԾతͳίϯϐϡʔλɾγεςϜΛ࠶ݱ͢ΔԾϚγϯʹର ͯ͠ɺԾతͳ OS ڥΛఏڙ͢Δ ˠ OS ϨϕϧͷԾԽ Χʔωϧ͔ΒݟΔͱී௨ʹϓϩηε͕ىಈ͢Δ͚ͩ ىಈ͢ΔࡍʹִΛࢦࣔ͢Δ
ΧʔωϧͷػೳͰ (ෳͷ) ಠཱۭͨؒ͠Λ࡞Γग़͠ɼϦιʔ εΛׂɾ͢Δ ϓϩηεΛάϧʔϓԽͯ͠ଞͷάϧʔϓͱϦιʔεۭؒΛִ άϧʔϓԽͨ͠ϓϩηεʹର͢ΔϦιʔε੍ݶ ԾԽͱ͍͏ΑΓʮִԽʯͱݴͬͨ΄͏͕Θ͔Γ͍͔͢ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 9 / 53
ίϯςφͷϝϦοτ ߴີԽ͕Մೳ ىಈ͍ͯ͠Δ OS (Χʔωϧ) Ұͭ Φʔόʔϔου͕খ͍͞ ϋʔυΣΞͷԾԽ͕ෆཁ ىಈ͕ૣ͍ ԾϚγϯͷىಈͰͳ͘ɼϗετ
OS ͔ΒݟͨΒ୯ʹϓϩ ηε͕ىಈ͍ͯ͠Δ͚ͩͳͷͰɼී௨ͷϓϩάϥϜ͕ىಈ͢Δ ͷͱ΄ͱΜͲมΘΒͳ͍ ඞͣ͠γεςϜΛಈ͔͢ඞཁͳ͍ (ΞϓϦέʔγϣϯί ϯςφ) ྫ͑ίϯςφͰ httpd ͷΈ͕ಈ͍͍ͯΔ ίϯςφʹϝϞϦΛݻఆతʹׂΓͯΔඞཁ͕ͳ͍ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 10 / 53
ίϯςφͷσϝϦοτ ҟͳΔ OS ͷγεςϜ / ϓϩάϥϜಈ͔ͤͳ͍ ୯ʹϗετ OS ্Ͱϓϩηε͕ىಈ͢Δ͚ͩͳͷͰͨΓલ ΧʔωϧʹؔΘΔૢ࡞Ͱ͖ͳ͍
ىಈ͍ͯ͠ΔΧʔωϧมΘΒͳ͍ͷͰ ίϯςφຖʹϩʔυ͢ΔϞδϡʔϧΛม͑ΔͳͲ Χʔωϧͷ࣮ෳࡶʹͳΔ શͯΧʔωϧͷػೳͱ࣮ͯ͠͞Ε͍ͯΔͷͰ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 11 / 53
ࠓͷ༰ ίϯςφͷ֓ཁ Linux ʹ͓͚ΔίϯςφͷΈ Namespace σϞ Cgroup σϞ ωοτϫʔΫؔ࿈ػೳ (͕࣌ؒ͋Ε)
ίϯςφͰ͑Δ໘ന͍ػೳ (͕࣌ؒ͋Ε) ·ͱΊ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 12 / 53
Linuxʹ͓͚Δίϯςφͷ Έ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 13 / 53
(ͨ·ʹݟ͔͚Δ)ίϯςφͷྺ࢙͔Βݟͨ Linuxίϯςφʹର͢Δޡղ 1979 ʹ chroot(2) γεςϜίʔϧ͕ Version 7 Unix ʹɺ
1983 ʹ 4.2BSD ʹಋೖ͞ΕΔ 2000 ʹ FreeBSD jail ͕ FreeBSD 4.0 ʹಋೖ ʰDocker? ͦΜͳΜ jail Ͱͣͬͱલ͔ΒͰ͖ͯΔʱ(Docker Γ্͕͖ͬͯͨ࣌ͷΦοαϯͷ) ˠ ʷؒҧ͍ 2005 ʹ Solaris Containers ొ 2008 ʹ Linux ʹ Cgroup ͕ಋೖ ʰ͜ΕͰ Linux Ͱ͍ͭʹίϯςφ͕ՄೳʹͳΓ·ͨ͠ʱ ˠʷؒҧ͍ 2014 Docker 1.0 ϦϦʔε (LXC 1.0 ϦϦʔε) ʰCgroup ͷొͰ Linux Ͱίϯςφ͕Մೳʹʯ͕ؒҧ͍ͳཧ༝ ͜ͷޙΘ͔Γ·͢ :-) Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 14 / 53
Linuxʹ͓͚ΔίϯςφΧʔωϧʹʰίϯ ςφʱͱ͍͏୯Ұͷػೳ͕࣮͞Ε࣮ͯݱ͠ ͍ͯΔΘ͚Ͱ͋Γ·ͤΜ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 15 /
53
Linux ͰίϯςφΛ࣮ݱ͢ΔͨΊͷػೳ Linux Χʔωϧʹؚ·ΕΔ৭ʑͳػೳΛΈ߹Θͤͯίϯςφ ڥΛ࡞͢ΔɻͦΕͧΕͷػೳίϯςφઐ༻ͷػೳͱ͍͏Θ͚ Ͱͳ͍ɻ ϓϩηεΛάϧʔϓԽͯ͠ଞͷάϧʔϓͱִ OS Ϧιʔεͷִ ˠ
Namespace (໊લۭؒ) άϧʔϓԽͨ͠ϓϩηεʹର͢ΔϦιʔε੍ݶ ϗετͷཧϦιʔεʹର͢Δ੍ݶ ˠ Cgroup (control group) Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 16 / 53
LinuxͰίϯςφΛ࣮ݱ͢ΔͨΊͷػೳ ͦͷଞ ωοτϫʔΫ (veth, macvlan ͳͲ) έʔύϏϦςΟ chroot (pivot root)
bind mount Checkpoint/Restore (CRIU) ͳͲͳͲ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 17 / 53
Linuxͷίϯςφ࣮ྫ Docker (libcontainer) Docker தͷίϯςφΛѻ͏ͨΊͷϥΠϒϥϦ͕ libcontainerɻΞϓϦ έʔγϣϯίϯςφͷ࣮ߦʹಛԽɻ LXC/LXD Ubuntu Λத৺ʹ։ൃɻओʹγεςϜίϯςφΛ࣮ߦ͢Δ͜ͱΛલఏʹ࡞
ΒΕ͍ͯΔ͕ɺΞϓϦέʔγϣϯίϯςφͷ࣮ߦՄೳɻඇಛݖίϯςφ ͕࣮ߦͰ͖Δɻ OpenVZ Linux ͷίϯςφ࣮ͱͯ͠ݹ͔͘Β͋Δ࣮ͷͻͱͭɻ2000 ͝Ζ ͔ΒɻΧʔωϧʹύονΛద༻͢ΔɻΧʔωϧʹ࣮͞Ε͍ͯΔίϯςφ ؔ࿈ػೳ OpenVZ ༝དྷͷػೳ͕ଟ͋ΔɻOpenVZ Λϕʔεʹͨ͠ ༻൛ Virtuozzo ͕ଘࡏ͢Δɻ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 18 / 53
Linuxͷίϯςφ࣮ྫ rkt CoreOS ͕ࣾ։ൃ͢ΔΞϓϦέʔγϣϯίϯςφͷϥϯλΠϜɻ systemd ͝ଘ Linux ͚ͷ࠷ۙओྲྀͱͳͬͨ init ࣮ͷͻͱͭɻίϯςφΛѻ͏
ίϚϯυΈแ͍ͯ͠Δ MINCS γΣϧεΫϦϓτͰॻ͔Εͨίϯςφ࣮ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 19 / 53
ࠓͷ༰ ίϯςφͷ֓ཁ Linux ʹ͓͚ΔίϯςφͷΈ Namespace σϞ Cgroup σϞ ωοτϫʔΫؔ࿈ػೳ (͕࣌ؒ͋Ε)
ίϯςφͰ͑Δ໘ന͍ػೳ (͕࣌ؒ͋Ε) ·ͱΊ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 20 / 53
Linuxʹ͓͚ΔίϯςφͷΈ Namespace Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 21 / 53
Namespace(໊લۭؒ) ִ͍ͨ͠ OS Ϧιʔε͝ͱʹ Namespace ͕४උ͞ΕΔ Ұ෦ͷ Namespace ͚ͩ༻ִͯ͠ڥΛ࡞Δ͜ͱ͕Ͱ͖Δ Ճ౻ହจ
(lxc-jp) KOF 2015 2015-11-06 22 / 53
Namespace ͷछྨ (1) Mount Namespace: 2.4.19 ϓϩηε͔Βݟ͍͑ͯΔϚϯτͷू߹ɼૢ࡞Λ͢Δɽ Namespace ͷ mount,
umount ଞͷ Namespace ʹӨ ڹ͠ͳ͍ (ࢀߟ) Ϛϯτ໊લۭؒΛద༻͢Δ (IBM developerWorks) UTS Namespace: 2.6.19 ϗετ໊ͳͲɼuname(2) ͕ฦ͢ͷू߹Λɽ setdomainname(2), sethostname(2) Ͱ Namespace ͷ ͷΈมߋͰ͖Δ PID Namespace: 2.6.24 PID ۭؒͷɽ৽͍͠ PID Namespace Ͱ PID 1 ͔Β࢝ ·Δ PID ׂ͕ΓͯΒΕΔɽ͔Βࢠͷ PID Namespace ݟ͑Δ (ͷۭؒͷ PID Λ࣋ͭ) ͕ɼࢠ͔Βݟ͑ͳ͍ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 23 / 53
Namespace ͷछྨ (2) IPC Namespace: 2.6.19 SysV IPC ΦϒδΣΫτɼPOSIX ϝοηʔδΩϡʔͷִ
User Namespace: 2.6.23 ˜ 3.8 ಠཱͨ͠ UID/GID ۭؒͱ֎෦ۭؒͷϚοϐϯά (ྫ͑ɼִ ۭؒͰ uid/gid 0/0ɼ֎෦Ͱ 1000/1000 ͱ͔Մೳʹ ͳΔ) Network Namespace: 2.6.26 ωοτϫʔΫϦιʔεͷִɽωοτϫʔΫσόΠεɼΞυϨ εɼϧʔςΟϯάςʔϒϧɼιέοτɼϑΟϧλϦϯά Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 24 / 53
Namespace ͷૢ࡞ (γεςϜίʔϧ) clone(2) Ͱ৽͍͠ϓϩηε Λੜ unshare(2) Ͱ৽͍͠ϓϩηεΛੜͤͣʹ࣮ߦίϯςΩετ Λ੍ޚ͢Δ setns(2)
ͰϓϩηεΛطଘ ͷ Namespace ʹؔ࿈͚Δ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 25 / 53
NamespaceσϞ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 26 / 53
ࠓͷ༰ ίϯςφͷ֓ཁ Linux ʹ͓͚ΔίϯςφͷΈ Namespace σϞ Cgroup σϞ ωοτϫʔΫؔ࿈ػೳ (͕࣌ؒ͋Ε)
ίϯςφͰ͑Δ໘ന͍ػೳ (͕࣌ؒ͋Ε) ·ͱΊ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 27 / 53
Linuxʹ͓͚ΔίϯςφͷΈ Cgroup Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 28 / 53
Cgroupͱ ϓϩηεΛάϧʔϓԽ͠ɺάϧʔϓʹରͯ͠Ϧιʔε੍ݶΛߦ͏ɻ ίϯςφઐ༻ͷΈͰͳ͍ɻ Cgroup ͷಛ ػೳ͝ͱʹαϒγεςϜʹ͔ΕΔ cgroupfs ΛϚϯτͯ͠σΟϨΫτϦͰάϧʔϓΛද͢ ϓϩηεΛάϧʔϓͷ tasks
ϑΝΠϧʹՃ͢Δͱؔ࿈͢Δ λεΫ͕εϨου୯ҐͰάϧʔϓʹՃ͞ΕΔ ෳ֊ߏɻվߏ͝ͱʹҟͳΔπϦʔΛ࡞Ͱ͖Δɻͨ ͩ͠ɺҰͭͷαϒγεςϜ͕ॴଐͰ͖ΔπϦʔҰͭ πϦʔͷͲͷϨϕϧͷάϧʔϓʹλεΫ͕ॴଐͰ͖Δ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 29 / 53
Cgroupͷ֊ߏ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 30 / 53
CgroupͷαϒγεςϜ cpu: 2.6.24 CFS(Completely Fair Scheduler) bandwidth controlɽ୯Ґ ࣌ؒͷάϧʔϓͷλεΫ͕࣮ߦͰ͖Δ߹ܭ࣌ؒΛ੍ݶ͢Δ (3.2
Ͱ࣮) ૬ରɽάϧʔϓؒͷ CPU ࣌ؒͷׂͷׂ߹Λࢦఆ͢Δɽ ྫ͑ GroupA=100,GroupB=50 ͱ͢Δͱ A:B=2:1 cpuacct: 2.6.24 άϧʔϓͷ CPU ϦιʔεͷϨϙʔτ (CPU ࣌ؒ) cpuset: 2.6.24 ׂΓͯΔ CPU, ϝϞϦϊʔυͷׂ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 31 / 53
CgroupͷαϒγεςϜ device: 2.6.26 σόΠεͷΞΫηεڐՄɼ੍ݶͷࢦఆ freezer: 2.6.28 άϧʔϓͷϓϩηεΛશͯҰ࣌ఀࢭ͢Δ memory: 2.6.29 ϝϞϦϦιʔεͷ੍ݶ
(ϢʔβϝϞϦɼΧʔωϧϝϞϦ) blkio (Block IO): I/O weight controller(2.6.33 Ҏ߱) άϧʔϓͷ༏ઌΛࢦఆ ͢Δ I/O throttling(2.6.37 Ҏ߱) άϧʔϓͷϓϩηεͷσόΠ εʹର͢Δૢ࡞ͷ߹ܭͷࢦఆ (ࢀߟ)Linux2.6.37 ͷ৽ػೳ “I/O throttling” Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 32 / 53
CgroupͷαϒγεςϜ hugetlb: 3.6 cgroup ͔Βͷ hugetlb ͷ༻ perf event: 2.6.39
άϧʔϓ୯ҐͰ perf πʔϧͰϞχλϦϯά (ύϑΥʔϚϯε ղੳ) net cls: 2.6.29 ύέοτʹࣝผࢠΛ͚ͭɼτϥϑΟοΫίϯτϩʔϧ (tc) ͱ netfilter(3.14 Ҏ߱) ͰίϯτϩʔϧՄೳʹ Linux 3.14 Ͱ net cls cgroup ʹՃ͞Εͨ netfilter ରԠ net prio: 3.3 άϧʔϓؒͰͷωοτϫʔΫͷ༏ઌΛΠϯλʔϑΣʔεຖʹ ࢦఆ͢Δ Linux 3.3 ͷ৽ػೳ Network priority cgroup Linux 3.3 ͷ৽ػೳ Network priority cgroup (2) Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 33 / 53
CgroupͷαϒγεςϜ pids: 4.3 fork() clone() ͰىಈͰ͖ΔϓϩηεΛ੍ݶ͢Δ Linux 4.3 ͷ
Process Number Controller (1) Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 34 / 53
Cgroupͷ͍ํ Cgroup ίϯςφͱؔͳ͘༻Մೳ # mount -t tmpfs cgroup_root
/sys/fs/cgroup # mkdir /sys/fs/cgroup/memory # mount -t cgroup -o memory cgroup /sys/fs/cgroup/memory (ϝϞϦαϒγεςϜͷ Ϛϯτ) # mkdir /sys/fs/cgroup/memory/test01 ("test01" ͱ͍͏άϧʔϓͷ࡞) # echo $$ > /sys/fs/cgroup/memory/test01/tasks (ϓϩηεΛάϧʔϓʹొ) # cat /sys/fs/cgroup/memory/test01/tasks (άϧʔϓͷϓϩηεͷ֬ೝ) 2824 2837 # echo 30M > /sys/fs/cgroup/memory/test01/memory.limit_in_bytes (άϧʔϓʹରͯ͠ϝϞϦ্ݶ 30M ͱ͍͏੍ݶΛઃఆ) # cat /sys/fs/cgroup/memory/test01/memory.limit_in_bytes (੍ݶͷ֬ೝ) 31457280 # cat /sys/fs/cgroup/memory/test01/memory.usage_in_bytes (ݱࡏͷ༻ྔͷ֬ೝ) 565248 Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 35 / 53
cgroupσϞ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 36 / 53
ࠓͷ༰ ίϯςφͷ֓ཁ Linux ʹ͓͚ΔίϯςφͷΈ Namespace σϞ Cgroup σϞ ωοτϫʔΫؔ࿈ػೳ (͕࣌ؒ͋Ε)
ίϯςφͰ͑Δ໘ന͍ػೳ (͕࣌ؒ͋Ε) ·ͱΊ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 37 / 53
Linuxʹ͓͚ΔίϯςφͷΈ ωοτϫʔΫػೳ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 38 / 53
ίϯςφͰ͏ωοτϫʔΫػೳ ʙ veth OpenVZ/Virtuozzo ༝དྷͷػೳ ରͱͳΔΠϯλʔϑΣʔεΛੜ͠ɼΠϯλʔϑΣʔεؒͰ ௨৴Λߦ͏ (Layer2 ͷτϯωϧ) ରͷยํΛϗετଆͷϒϦοδʹɼยํΛίϯςφʹଓ
Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 39 / 53
ίϯςφͰ͏ωοτϫʔΫػೳ ʙ macvlan ཧΠϯλʔϑΣʔεʹผͷ MAC ΞυϨε͕͍ͨԾత ͳ৽͍͠ΠϯλʔϑΣʔεΛ࡞ɽ͜ͷΠϯλʔϑΣʔεΛ ίϯςφʹׂ Ճ౻ହจ (lxc-jp)
KOF 2015 2015-11-06 40 / 53
ࠓͷ༰ ίϯςφͷ֓ཁ Linux ʹ͓͚ΔίϯςφͷΈ Namespace σϞ Cgroup σϞ ωοτϫʔΫؔ࿈ػೳ (͕࣌ؒ͋Ε)
ίϯςφͰ͑Δ໘ന͍ػೳ (͕࣌ؒ͋Ε) ·ͱΊ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 41 / 53
LinuxΧʔωϧͷίϯςφͰ͑Δ໘ന͍ ػೳ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 42 / 53
CRIU(1) http://criu.org/ OpenVZ ϓϩδΣΫτͷ Checkpoint/Restore ࣮ ΞϓϦέʔγϣϯͷ͋Δ࣌ͷঢ়ଶΛอଘ͠ɺ࠶։Ͱ͖Δ Χʔωϧ 3.11 Ҏ߱Ͱ༻Մೳ
Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 43 / 53
CRIU(2) $ sudo criu dump -D checkpoint -t
1234 (PID:1234 ͷϓϩηεͷใΛμϯϓͯ͠ checkpoint σΟϨΫτϦʹอଘ) $ ls ./checkpoint cgroup.img fdinfo-17.img inventory.img pages-15.img core-170.img fdinfo-18.img ipcns-msg-9.img pages-16.img core-176.img fdinfo-2.img ipcns-sem-9.img pages-17.img core-1.img fdinfo-3.img ipcns-shm-9.img pages-1.img core-260.img fdinfo-4.img ipcns-var-9.img pages-2.img core-261.img fdinfo-5.img iptables-8.img pages-3.img : (snip) $ sudo criu restore -D checkpoint -d (checkpoint σΟϨΫτϦͷμϯϓΠϝʔδΛ ͬͯϦετΞ) (ॲཧͷུ֓Λॻ͍͚ͨͩͳͷͰ࣮ࡍ৭ʑΦϓγϣϯΛࢦఆͨ͠Γ͢Δඞཁ͕͋Γ·͢) Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 44 / 53
overlayfs Union Filesystem (aufs ͱҰॹ) ෳͷσΟϨΫτϦΛಁաతʹॏͶ͋ΘͤͯͻͱͭʹݟͤΒ ΕΔ ίϯςφͱؔͳ͍ 3.18 kernel
ͰϚʔδ ίϯςφͷΫϩʔϯΛ࡞͢Δͱ͖ͷϑΝΠϧγεςϜͱ͠ ͯ LXC ͔Βར༻Ͱ͖Δ Ubuntu/Plamo ͩͱඇಛݖίϯςφͷΫϩʔϯʹ͑Δ Docker Ͱར༻Ͱ͖Δ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 45 / 53
overlayfs࣮ߦྫ # mkdir lower upper overlay work #
ls -F lower/ overlay/ upper/ work/ # touch lower/lower # touch upper/upper # mount -n -t overlay \ > -o lowerdir=lower,upperdir=upper,workdir=work \ > overlay overlay # ls overlay/ lower upper # touch overlay/test # ls overlay/ lower test upper # ls upper/ test upper Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 46 / 53
overlayfsσϞ 1 lower, upper, work, overlay σΟϨΫτϦ࡞ 2 lower, upper
ʹϑΝΠϧ࡞ 3 overlayfs Ϛϯτ 4 Ϛϯτͨ͠σΟϨΫτϦ (overlay) ʹ lower, upper ʹଘࡏ ͢ΔϑΝΠϧ͕྆ํݟ͍͑ͯΔͷΛ֬ೝ 5 Ϛϯτͨ͠σΟϨΫτϦ (overlay) ͰϑΝΠϧ࡞ 6 ࡞ͨ͠ϑΝΠϧ͕ upper ʹͰ͖͍ͯΔ͜ͱΛ֬ೝ 7 ΞϯϚϯτͨ͋͠ͱͷ֤σΟϨΫτϦΛ֬ೝ https://asciinema.org/a/24151 Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 47 / 53
·ͱΊ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 48 / 53
·ͱΊ ίϯςφͷ֓ཁ Linux ʹ͓͚ΔίϯςφͷΈ ίϯςφΧʔωϧʹ࣮͞Ε͍ͯΔ৭ʑͳػೳͷΈ߹Θͤ Ͱ࣮ݱ͞Ε͍ͯΔ Namespace OS Ϧιʔεͷִ Cgroup
ϗετͷཧϦιʔεͷ੍ݶ ωοτϫʔΫؔ࿈ػೳ veth macvlan ίϯςφͰ͑Δ໘ന͍ػೳ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 49 / 53
lxc-jp LXC ʹݶΒͣίϯςφͷΛѻ͍ͬͯ·͢ɻ https://groups.google.com/d/forum/lxc-jp Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 50
/ 53
ίϯςφܕԾԽͷใަձ https://sites.google.com/site/containerstudy/ http://ct-study.connpass.com/ ίϯςφٕज़ʹؔ࿈͢ΔΛѻ͏ ίϯςφʹؔ࿈͢ΔΧʔωϧͷ࣮ʹ͍ͭͯ ֤छπʔϧΩοτͷհɼ࣮ʹ͍ͭͯ ίϯςφٕज़ΛͬͨπʔϧιϑτΣΞͷհ࣮ʹͭ ͍ͯ ίϯςφٕज़ͷ׆༻ɾӡ༻ࣄྫ ͦͷଞʮίϯςφʯͱ͍͏Ωʔϫʔυ͕গ͠Ͱೖ͍ͬͯΔٕ
ज़ʹ͍ͭͯ ͜Ε·Ͱେࡕͱ౦ژͰަޓʹ 8 ճ࣮ࢪɻ࣍ճԬͷ༧ఆɻ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 51 / 53
ڠྗऀืू ҎԼͷ༁Λߦ͍ͬͯ·͢ɻ͕࣌ؒ͋Δͱ͖͚ͩͰྑ͍ͷ ͰϨϏϡʔɺमਖ਼ɺվྑΛͯͩ͘͠͞Δํܴ͠·͢ɻ LXC ϚχϡΞϧ (man pages) linuxcontainers.org ίϯςϯπ Ճ౻ହจ
(lxc-jp) KOF 2015 2015-11-06 52 / 53
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ Ճ౻ହจ (lxc-jp) KOF 2015 2015-11-06 53 / 53