Linux コンテナの内部を知って ワンランク上のコンテナ遣いを目指そう / JTF2017
by
tenforward
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
Linux ίϯςφͷ෦Λͬͯ ϫϯϥϯΫ্ͷίϯςφݣ͍Λࢦͦ͏ July Tech Festa 2017 Ճ౻ହจ (@ten_forward) 2017-08-27
Slide 2
Slide 2 text
ࣗݾհ ࠓͷඪ ίϯςφͷ֓ཁ Linux ʹ͓͚Δίϯςφ ίϯςφͷϑΝΠϧγεςϜ Namespace(໊લۭؒ) cgroup ηΩϡϦςΟػೳ ͦͷଞͷػೳ ·ͱΊ 1/53
Slide 3
Slide 3 text
ࣗݾհ Ճ౻ହจ • http://www.ten-forward.ws/ • @ten_forward • http://gplus.to/tenforward • https://github.com/tenforward • http://tenforward.hatenablog.com/ (ٕज़ϒϩά) 2/53
Slide 4
Slide 4 text
ࣗݾհ (ࣄ) ϑΝʔεταʔόɹ։ൃ෦ɹॴଐ 3/53
Slide 5
Slide 5 text
ࣗݾհ (OSSɾίϯςφؔ࿈) • Plamo Linux ϝϯςφ • LXC ͰֶͿίϯςφೖɹʔܰྔԾԽڥΛ࣮ݱ͢Δٕज़ gihyo.jp Ͱ࿈ࡌ 4/53
Slide 6
Slide 6 text
ࣗݾհ (ίϯςφؔ࿈) • LXC/LXD ͷ։ൃʹগ͠ࢀՃ • man page ͷຊޠ༁ • ެࣜϖʔδ (linuxcontainers.org) ༁ • όάϑΟοΫεͳͲগ͚ͩ͠ίʔυʹߩݙ • LXD ຊޠϝοηʔδ • ίϯςφܕԾԽͷใަձओ࠻ 5/53
Slide 7
Slide 7 text
ࣗݾհ ࠓͷඪ ίϯςφͷ֓ཁ Linux ʹ͓͚Δίϯςφ ίϯςφͷϑΝΠϧγεςϜ Namespace(໊લۭؒ) cgroup ηΩϡϦςΟػೳ ͦͷଞͷػೳ ·ͱΊ 6/53
Slide 8
Slide 8 text
ࠓͷඪ • ίϯςφͷ֓ཁΛཧղ͢Δ • Linux ίϯςφڥΛߏங͢ΔࡍʹΑ͘ΘΕΔٕज़Λཧղ ͢Δ 7/53
Slide 9
Slide 9 text
ࠓͷൃද ࠓίϯςφͰΑ͘ΘΕΔػೳͷ͍͔ͭ͘ΛऔΓ্͛ɺ࣮ྫ σϞΛަ͑ͳ͕Βઆ໌͠·͢ɻίϯςφؔ࿈ػೳΛཏతʹΓͨ ͍߹ • LXC ͰֶͿίϯςφೖ ʵܰྔԾԽڥΛ࣮ݱ͢Δٕज़ (gihyo.jp) • speakerdeck ʹ͋Δࢲͷ OSC ͳͲͷൃදࢿྉ • ͦͷଞࢀߟࢿྉ (࠷ޙʹ͍͔ͭ͘հ͠·͢) ͳͲΛ͝ཡ͍ͩ͘͞ɻ 8/53
Slide 10
Slide 10 text
ࣗݾհ ࠓͷඪ ίϯςφͷ֓ཁ Linux ʹ͓͚Δίϯςφ ίϯςφͷϑΝΠϧγεςϜ Namespace(໊લۭؒ) cgroup ηΩϡϦςΟػೳ ͦͷଞͷػೳ ·ͱΊ 9/53
Slide 11
Slide 11 text
ίϯςφͱ ΧʔωϧͷػೳͰ • ִ͞ΕۭͨؒͰϓϩηεΛ࣮ߦ͢Δ • ʮԾڥʯͱ͍͏ΑΓʮִ͞Εͨڥʯͱߟ͑ͨํ͕ޡ ղ͕ͳ͍ • ִ͞Εͨಉۭؒ͡ͰϓϩηεΛͻͱ͚࣮ͭͩߦ͢Δ͜ͱɺ ෳ࣮ߦ͢Δ͜ͱͰ͖Δ • ϓϩηεʹରͯ͠Ϧιʔε੍ݶΛઃఆ͢Δ (ˡࠓܰ͘৮Ε ·͢) 10/53
Slide 12
Slide 12 text
ίϯςφͱ • ͭ·Γ୯ͳΔϓϩηε (or ୯ͳΔϓϩηεͷू߹) • ϓϩηεʹʮଐੑʯΛࢦఆ͢Δ • ྫ͑ʜ • ଞͷϓϩηε͔Βݟ͑ͳ͘͢Δ • ࣮ߦͰ͖Δૢ࡞ʹ੍ݶΛՃ͑Δ • ϓϩηεʹϦιʔε੍ݶΛద༻͢Δ • ͳͲͳͲʜ • ී௨ʹىಈͨ͠ͷͱνϣοτҧ͏ϓϩηε 11/53
Slide 13
Slide 13 text
ίϯςφͷϝϦοτɾσϝϦοτ ͭ·Γ • ίϯςφΛىಈ͢Δ ʹ ϓϩηεΛىಈ͢Δ • ىಈ͕ૣ͍ʢϓϩηεΛىಈ͢Δͷʹ͔͔Δ͚࣌ؒͩʣ • Χʔωϧϗετ্Ͱಈ͍͍ͯΔΧʔωϧͷΈ • ԾϚγϯ (VM) ͷΑ͏ʹҟͳΔ OS ͷγεςϜϓϩάϥ Ϝಈ͔ͤͳ͍ (ΤϛϡϨʔλΛಈ͔ͤͰ͖·͕͢) • ΧʔωϧʹؔΘΔૢ࡞Λίϯςφ͝ͱʹผʑʹߦ͑ͳ͍ 12/53
Slide 14
Slide 14 text
Linux Ҏ֎ʹ͓͚Δίϯςφ • ίϯςφ Linux ಠࣗͷٕज़Ͱ͋Γ·ͤΜ • Linux Ҏ֎Ͱίϯςφͷ࣮͋Γ·͢ͷͰ؆୯ʹհ͠ ͓͖ͯ·͢ • FreeBSD jail (ଞʹ VPS ͱ͍͏࣮͋Δ) • Solaris Zones • Windows (Windows Server ίϯςφɾHyper-V ίϯ ςφ) 13/53
Slide 15
Slide 15 text
ࣗݾհ ࠓͷඪ ίϯςφͷ֓ཁ Linux ʹ͓͚Δίϯςφ ίϯςφͷϑΝΠϧγεςϜ Namespace(໊લۭؒ) cgroup ηΩϡϦςΟػೳ ͦͷଞͷػೳ ·ͱΊ 14/53
Slide 16
Slide 16 text
Linux ʹ͓͚Δίϯςφ Linux Χʔωϧʹ୯Ұͷʮίϯςφʯͱ͍͏ػೳ͕͋ΔΘ͚Ͱ ͳ͍ • ৭ʑͳػೳΛΈ߹ΘͤͯʮίϯςφʯΛ࡞Δ • ˠ ࣗʹཉ͍͠ػೳΛΈ߹Θͤͯʮίϯςφʯ͕࡞ΕΔ • Docker LXC/LXD ͳͲͷίϯςφ࣮͕ࣗཉ͍͠ ༷ʑͳػೳΛΈ߹ΘͤͯίϯςφڥΛߏங͍ͯ͠Δ ͦΕͰɺίϯςφͰΑ͘ΘΕΔػೳΛհ͠ͳ͕Βίϯςφ͕ Ͱ͖Δ·ͰΛݟ͍͖ͯ·͠ΐ͏ 15/53
Slide 17
Slide 17 text
ࣗݾհ ࠓͷඪ ίϯςφͷ֓ཁ Linux ʹ͓͚Δίϯςφ ίϯςφͷϑΝΠϧγεςϜ Namespace(໊લۭؒ) cgroup ηΩϡϦςΟػೳ ͦͷଞͷػೳ ·ͱΊ 16/53
Slide 18
Slide 18 text
ίϯςφಠࣗͷϑΝΠϧγεςϜ ྫ͑ʜ • ΠϝʔδΛऔಘͯ͠ϗετ OS ͷϑΝΠϧγεςϜ্ʹల։ ͢Δ • Ͱίϯςφىಈޙऔಘͨ͠ΠϝʔδͷσΟϨΫτϦπϦʔ ͚͕ͩݟ͍͑ͯΔ ͜ΕΛͲͷΑ͏ʹ࣮ݱ͢Δͷ͔Λ͔࣍ΒΈ͍͖ͯ·͠ΐ͏ 17/53
Slide 19
Slide 19 text
chroot • ͬͱγϯϓϧʹίϯςφઐ༻ͷϑΝΠϧγεςϜ (σΟϨ ΫτϦπϦʔ) ΛݟͤΒΕΔ • ݟ্͔͚ͷϧʔτσΟϨΫτϦΛมߋ͢Δ • ͨͩ͠ɺchroot ͨ͠ڥ͔Βൈ͚ग़ͤΔ • chroot Ͱ͖ͳ͍Α͏ʹݖݶΛണୣ͢Δඞཁ͕͋Δ 18/53
Slide 20
Slide 20 text
chroot ͷσϞ • ΈͲ͜Ζ • ৽͘͠ /(root) ʹ͍ͨ͠σΟϨΫτϦʹҠಈͯ͠ chroot ί ϚϯυΛ࣮ߦ͢Δ͚ͩͷ؆୯͞ • Ͱ৽ͨͳ /(root) ͔Βൈ͚ग़ͤΔ 19/53
Slide 21
Slide 21 text
pivot_root • root ϑΝΠϧγεςϜΛऔΓସ͑Δ • ϑΝΠϧγεςϜࣗମΛऔΓସ͑ΔͷͰൈ͚ΒΕͳ͍ (ൈ͚Δ ͱ͍͏֓೦͕ͳ͍) • chroot ʹൺΔͱ੍ݶ͕ଟ͍ • Docker LXC pivot_root Λ༻ 20/53
Slide 22
Slide 22 text
pivot_root pivot_root ৽ͨʹ / (root) ͱ͍ͨ͠σΟϨΫτϦ (Ϛϯτ ϙΠϯτ) ͱίϚϯυ࣮ߦલ࣌ͷ / (root) ΛϚϯτ͢ΔσΟ ϨΫτϦ (৽ root ҎԼ) Λࢦఆ͢Δ pivot_root [৽͍͠ root] [Ҏલͷ root] (ྫ) pivot_root . old ͜ΕͰΧϨϯτσΟϨΫτϦ͕ / (root) ͱͳΓɺҎલͷ/͕./old ҎԼʹϚϯτ͞ΕΔ 21/53
Slide 23
Slide 23 text
bind Ϛϯτ • Ϛϯτ͍ͯ͠ΔπϦʔͷҰ෦ΛผͷॴʹϚϯτ͢Δػೳ • ϗετͱίϯςφͰσΟϨΫτϦϑΝΠϧΛڞ༗͢Δࡍʹ ͍·͢ 22/53
Slide 24
Slide 24 text
bind Ϛϯτ • ৽ͨͳ / (root) ʹมߋ͢ΔͨΊʹ pivot_root Λ͏ࡍ • ͋ΔσΟϨΫτϦҎԼʹίϯςφΠϝʔδΛల։ͯ͠ʮϑΝ ΠϧγεςϜʯͰͳ͍ͷͰ pivot_root Ͱ͖ͳ͍ • ίϯςφͷ / (root) ͱ͍ͨ͠σΟϨΫτϦΛ bind Ϛϯτ ͢Δͱɺͦ͜ϚϯτϙΠϯτʹͳΓɺϑΝΠϧγεςϜͬ Ά͘ͳΓ • ʮϑΝΠϧγεςϜʯͱɺϚϯτϙΠϯτʹϚϯτ͞Ε ΔϚϯτͷใͱؚ·ΕΔπϦʔ (=mount ߏମ) ˠͭ· Γ bind ϚϯτͰ͜ΕΛຬͨͤΔ • ͜ΕͰ pivot_root Ͱ͖·͢!! 23/53
Slide 25
Slide 25 text
ࣗݾհ ࠓͷඪ ίϯςφͷ֓ཁ Linux ʹ͓͚Δίϯςφ ίϯςφͷϑΝΠϧγεςϜ Namespace(໊લۭؒ) cgroup ηΩϡϦςΟػೳ ͦͷଞͷػೳ ·ͱΊ 24/53
Slide 26
Slide 26 text
Namespace • ίϯςφͷ OS Ϧιʔε͕ʜ • ଞͷίϯςφϗετ͔Β • ݟ͑ͨΓ • ૢ࡞Ͱ͖ͨΓ • ڞ௨ͩͬͨΓ • ͨ͠ΒࠔΓ·͢ΑͶ!! ͦΜͳͷʮִ͞Εۭͨؒʯ͡Όͳ͍!! • ͦΜͳͱ͖͏ͷ͕ “Namespace(໊લۭؒ)”!! • Namespace ୯ҰͷػೳͰͳ͘ɺϦιʔε͝ͱʹ Namespace ͕༻ҙ͞Ε·͢ • Linux ίϯςφͷཁͷػೳ 25/53
Slide 27
Slide 27 text
Namespace ͷઆ໌ͷલʹ • ͭ·Γ Namespace ͕ͦ͜ Linux ίϯςφͱݴͬͯա ݴͰͳ͍ • ͦΜͳʮLinux ίϯςφʯΛ࠷؆୯ʹ࡞Δʹ!! • Docker Λ͏ͷͰͳ͘ • LXC Λ͏ͷͰͳ͘ • unshare ίϚϯυ!!(util_linux ύοέʔδʹؚ·Ε·͢) • ޙड़ͷ Network Namespace ip netns ίϚϯυ͕ ศར • Ͱ Linux ʹ࣮͞Ε͍ͯΔ৭ʑͳ Namespace ػೳΛ Έ͍͖ͯ·͠ΐ͏ 26/53
Slide 28
Slide 28 text
৭ʑͳ Namespace Linux ʹҎԼͷΑ͏ͳ Namespace ͕࣮͞Ε͍ͯ·͢ • Mount Namespace • UTS Namespace • PID Namespace • IPC Namespace(ࠓ৮Ε·ͤΜ) • Network Namespace • User Namespace • cgroup Namespace(ࠓ৮Ε·ͤΜ) Ҏ্ͷ Namespace ͍ͣΕಠཱͯ͑͠·͢ 27/53
Slide 29
Slide 29 text
Mount Namespace • ίϯςφͷϚϯτɺϚϯτૢ࡞Λ • Namespace Ͱߦͬͨ mountɺumount ͕ଞͷ Namespace ʹӨڹΛ༩͑ͳ͍Α͏ʹ͢Δ • ͠ͳ͍Α͏ʹͰ͖Δ • ࠷ۙσϑΥϧτͰ͞Ε͍ͯͳ͍ (systemd ͕ͦͷΑ ͏ʹઃఆ͢ΔͨΊ) ͷͰɺ͢ΔΑ͏ʹઃఆ͠ͳ͚ΕͳΒ ͳ͍ • ͭ·ΓଞͷίϯςφͰߦͬͨϚϯτૢ࡞͕ݟ͑ͳ͍ 28/53
Slide 30
Slide 30 text
bind Ϛϯτɺpivot_rootɺmount namespace ͷσϞ • ݟͲ͜Ζ • bind Ϛϯτ͢Δ͜ͱͰ pivot_root ͕Ͱ͖ΔΑ͏ʹͳΔ • ίϯςφ༻ͷϑΝΠϧγεςϜ͚͕ͩݟ͑ΔΑ͏ʹͳΔ • Mount namespace ͷػೳʹΑΓίϯςφͷϚϯτͷ ू߹ͱϗετͷϚϯτͷू߹ಠཱ͍ͯ͠Δ 29/53
Slide 31
Slide 31 text
͜͜·ͰͰʜ • ίϯςφͷϑΝΠϧγεςϜִ͕͞Ε·ͨ͠ • ͔͠͠ɺଞͷ OS Ϧιʔεϗετଞͷίϯςφͱڞ༗ͨ͠ ·· • ϓϩηε • ϗετ໊υϝΠϯ໊ (UTS) • ωοτϫʔΫ • Ϣʔβ • ʜ • ࣍ʹଞͷϦιʔεΛִ͢Δ Namespace Λհ͍͖ͯ͠ ·͠ΐ͏ 30/53
Slide 32
Slide 32 text
UTS Namespace • ίϯςφ͝ͱʹҧ͏ϗετ໊͚͍ͭͨͰ͢ΑͶ? • ͦΜͳͱ͖ʹ͏ Namespace ͕ UTS Namespace • ίϯςφ͝ͱʹҟͳΔϗετ໊ɺυϝΠϯ໊Λ͚ͭΒΕ·͢ • uname(2) ͕ฦ͢Λ 31/53
Slide 33
Slide 33 text
PID Namespace • ίϯςφͰͲΜͳϓϩηεΛ࣮ߦ͍ͯ͠Δ͔ɺଞͷίϯςφ ͔Βݟ͑ͨΒΠϠͰ͢ΑͶ? • ίϯςφ͝ͱʹಠཱͯ͠ PID Λ͍࣋ͪͨ • ͦΜͳ࣌͏ Namespace ͕ PID Namespace • ͨͩ͠ɺϗετ ( Namespace) ͔Βίϯςφ (ࢠͷ Namespace) ͷϓϩηεݟ͑·͢ 32/53
Slide 34
Slide 34 text
UTS, PID Namespace ͷσϞ • ݟͲ͜Ζ • ίϯςφͰίϯςφͷϓϩηε͚͕ͩݟ͍͑ͯΔ • ίϯςφͰϗετ໊Λม͑ͯϗετͷϗετ໊มΘͬͯ ͍ͳ͍ 33/53
Slide 35
Slide 35 text
Network Namespace ωοτϫʔΫΠϯλʔϑΣʔεɺΞυϨεɺϧʔςΟϯάɺϑΟϧ λϦϯά͕ίϯςφ͝ͱʹಠཱͯ࣋ͯ͠·͢ɻ આ໌͠Α͏ͱࢥ͍·͕ͨ͠ʜ ͳΜͱ!! ͪ͜ΒΛͲ͏ͧ!!(ؙ͛) 34/53
Slide 36
Slide 36 text
User Namespace • ίϯςφͷ root Ϣʔβͱϗετͷ root Ϣʔβͱಉ͡͡Ό ةݥ!! • ͦΜͳͱ͖ʹ͏ͷ͕ User Namespace!! • ଞͷ Namespace root ݖݶ͕ඞཁͰ͕͢ɺ͜Ε͚ͩҰ ൠϢʔβͰ࡞Մೳ • ίϯςφͷ UID,GID Λɺϗετ্ͷ UID,GID ͱϚοϐ ϯά͠·͢ 35/53
Slide 37
Slide 37 text
User Namespace ͷσϞ • ݟͲ͜Ζ • ίϯςφͰ root ͕࣮ߦ͍ͯ͠Δϓϩηε͕ɺϗετ্Ͱ ҰൠϢʔβݖݶͰಈ͍͍ͯΔ • ίϯςφͰ root ݖݶͰ࡞ͨ͠ϑΝΠϧͷΦʔφʔ͕ϗε τ্ͰҰൠϢʔβʹͳ͍ͬͯΔ • User Namespace ҰൠϢʔβݖݶͰ࡞ΕΔɻଞͷ Namespace ࡞Εͳ͍ • User Namespace Ͱଞͷ Namespace ͕࡞ΕΔ 36/53
Slide 38
Slide 38 text
ࣗݾհ ࠓͷඪ ίϯςφͷ֓ཁ Linux ʹ͓͚Δίϯςφ ίϯςφͷϑΝΠϧγεςϜ Namespace(໊લۭؒ) cgroup ηΩϡϦςΟػೳ ͦͷଞͷػೳ ·ͱΊ 37/53
Slide 39
Slide 39 text
cgroup • ίϯςφ͝ͱʹཧϦιʔε (ϝϞϦɺCPUɺωοτϫʔΫଳ ҬͳͲ) Λ੍ݶ͍ͨ͠߹ʹ͏ • ੍ݶ͢ΔϦιʔε͝ͱʹػೳ͕ఏڙ͞ΕΔͷͰɺ੍ݶ͍ͨ͠ ͷ͚ͩ͑ྑ͍ • ίϯςφͰͳ͘ී௨ͷϓϩηεʹద༻Մೳɻ • ෳͷϓϩηεΛάϧʔϓԽͯ͠ద༻Ͱ͖Δ (ʹίϯςφ) • ৄ͘͠ࢀߟࢿྉΛࢀর!! 38/53
Slide 40
Slide 40 text
ࣗݾհ ࠓͷඪ ίϯςφͷ֓ཁ Linux ʹ͓͚Δίϯςφ ίϯςφͷϑΝΠϧγεςϜ Namespace(໊લۭؒ) cgroup ηΩϡϦςΟػೳ ͦͷଞͷػೳ ·ͱΊ 39/53
Slide 41
Slide 41 text
ηΩϡϦςΟػೳ • ίϯςφͱϗετ্Ͱಈ͘୯ͳΔϓϩηε • ίϯςφ্Ͱ࣮ߦ໋ͨ͠ྩ͕ϗετଞͷίϯςφʹӨڹΛ༩ ͑ΔՄೳੑ͕͋Δ ͦ͜Ͱ • ༷ʑͳಛݖɾ໋ྩͷҰ෦Λ੍ݶͨ͠Γ • ༷ʑͳಛݖɾ໋ྩͷҰ෦ͷΈΛίϯςφʹ༩͑ͨΓͯ͠ ϗετଞͷίϯςφʹӨڹ͕ٴͳ͍Α͏ʹ͢Δ 40/53
Slide 42
Slide 42 text
Capability • root ͕࣋ͭಛݖΛࡉׂ͔ͯ͘͠༗ޮɾແޮ͕ઃఆͰ͖Δ • ྫ͑ʜ • ίϯςφ͔Βউखʹ࣌ؒΛม͑ΒΕͨΒࠔΔ (ίϯςφͷ࣌ ܭϗετͱڞ௨Ͱ͢Ͷ) • ࣌ؒΛઃఆͰ͖Δݖݶ (CAP_SYS_TIME) Λແޮʹ • chroot Λൈ͚ΒΕͨΒࠔΔ • chroot Ͱ͖Δݖݶ (CAP_SYS_CHROOT) Λແޮʹ • ίϯςφϥϯλΠϜͰσϑΥϧτͰແޮʹ͢Δ Capability ͕ఆٛ͞Ε͍ͯͨΓ͢Δ • ৄ͘͠ man 7 capabilities Λࢀর 41/53
Slide 43
Slide 43 text
seccomp OS ͷػೳΛݺͼग़ͨ͢Ίʹ͏γεςϜίʔϧʹର͢ΔϑΟϧλ Ϧϯά • ಛఆͷγεςϜίʔϧΛڐՄͨ͠Γ • ಛఆͷγεςϜίʔϧΛېࢭͨ͠Γ • ίϯςφϥϯλΠϜͰσϑΥϧτͰڐՄ͢ΔγεςϜίʔϧ͕ ఆٛ͞Ε͍ͯͨΓ͢Δ • ৄ͘͠ man 2 seccomp Λࢀর 42/53
Slide 44
Slide 44 text
MAC Mandatory Access Control(ڧ੍ΞΫηε੍ޚ) • Ϧιʔεॴ༗ऀͷઃఆ͢Δݖݶ (DAC) ʹؔΘΒͣɺγεςϜ ཧऀ͕ૢ࡞ରͰ͋ΔϦιʔεʹΞΫηε੍ޚΛઃఆͰ͖Δ • AppArmor SELinux ͳͲ • ίϯςφઐ༻ʹԾԽ͞Εͳ͍ɺίϯςφ͔Βૢ࡞͞Εͯ ࠔΔϦιʔεͷ੍ݶΛઃఆ͢Δ • ͨͱ͑/proc /sys ҎԼͷϑΝΠϧͳͲ 43/53
Slide 45
Slide 45 text
ࣗݾհ ࠓͷඪ ίϯςφͷ֓ཁ Linux ʹ͓͚Δίϯςφ ίϯςφͷϑΝΠϧγεςϜ Namespace(໊લۭؒ) cgroup ηΩϡϦςΟػೳ ͦͷଞͷػೳ ·ͱΊ 44/53
Slide 46
Slide 46 text
ͦͷଞͷػೳ ͜Ε·Ͱʹհͨ͠Ҏ֎ʹ Linux Χʔωϧʹ࣮͞Ε͍ͯΔ ༷ʑͳػೳ͕ඞཁʹԠͯ͡ར༻͞Ε͍ͯΔ • ωοτϫʔΫ (ԾΠϯλʔϑΣʔεͳͲ) • ϑΝΠϧγεςϜ (overlayfs ͳͲ) • ϓϩηεͷνΣοΫϙΠϯτɾϦετΞ • ͳͲͳͲʜ 45/53
Slide 47
Slide 47 text
ࣗݾհ ࠓͷඪ ίϯςφͷ֓ཁ Linux ʹ͓͚Δίϯςφ ίϯςφͷϑΝΠϧγεςϜ Namespace(໊લۭؒ) cgroup ηΩϡϦςΟػೳ ͦͷଞͷػೳ ·ͱΊ 46/53
Slide 48
Slide 48 text
ࠓઆ໌ͨ͜͠ͱͷ·ͱΊ • ίϯςφͱ୯ͳΔϓϩηεɻ௨ৗͷىಈͱগ͠ҧ͏ଐੑΛ Ճ͑ͨϓϩηε • Linux ͰɺίϯςφΧʔωϧʹ࣮͞Ε͍ͯΔ৭ʑͳػ ೳΛΈ߹Θ࣮ͤͯݱ͍ͯ͠Δ • ίϯςφઐ༻ͷϑΝΠϧγεςϜΛݟͤΔͨΊʹ chroot pivot_root Λ͏ • ίϯςφΛ࣮ݱ͢ΔΩϞͱͳΔػೳ͕ “Namespace(໊લ ۭؒ)” • ίϯςφΛηΩϡΞʹ࣮ߦ͢ΔͨΊʹ༷ʑͳηΩϡϦςΟػೳ ͕ΘΕΔɻ“Capability”ɺ“seccomp”ɺ“MAC” 47/53
Slide 49
Slide 49 text
·ͱΊ • ੈͷதʹଘࡏ͢ΔίϯςφϥϯλΠϜͰίϯςφΛಈ࡞ͤ͞ ΔͨΊʹ৭ʑͳػೳΛ͍ɺσϑΥϧτͰྑ͍ײ͡Ͱίϯςφ ͕ಈ͘Α͏ʹௐ͞Ε͍ͯ·͢ • ͕͍ࣗͬͯΔίϯςφϥϯλΠϜͰͲͷΑ͏ͳػೳ͕ ΘΕ͍ͯΔͷ͔ɺͲͷΑ͏ͳػೳΛ͏͜ͱ͕Ͱ͖Δͷ͔Λཧ ղ͢ΕɺΑΓదʹίϯςφΛ͏͜ͱ͕Ͱ͖ΔͰ͠ΐ͏ • ࠷ۙͰɺཁ݅ʹ͋ͬͨඞཁͳػೳ͚ͩΛͬͯίϯςφΛ࡞ ΕΔϓϩμΫτ͋Γ·͢ (ࢀߟࢿྉࢀর) 48/53
Slide 50
Slide 50 text
தΛཧղͯ͠ޮՌతʹɺָ͘͠ɺ҆શʹίϯςφ Λ͍·͠ΐ͏ 49/53
Slide 51
Slide 51 text
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ 50/53
Slide 52
Slide 52 text
ࢀߟࢿྉ • ίϯςφશൠͷػೳΛཧղ͢ΔͨΊʹ • LXC ͰֶͿίϯςφೖ ʵܰྔԾԽڥΛ࣮ݱ͢Δٕज़ http://gihyo.jp/admin/serial/01/linux_containers • ࢲͷ͜Ε·Ͱͷߨԋࢿྉ https://speakerdeck.com/tenforward • ίϯςφΛʮकΔʯΈ͔ΒதΛཧղ͠Α͏!!1 (by @udzura ͞Μ) https://speakerdeck.com/udzura/how-to-be-a- container 51/53
Slide 53
Slide 53 text
ࢀߟࢿྉ • ίϯςφ͕Ͱ͖Δ·ͰͷॲཧΛ͏ͨΊʹ • MINCS (γΣϧͰॻ͔Εͨίϯςφ) (by @mhiramat ͞ Μ) https://github.com/mhiramat/mincs • MINCS Ͱ Linux ίϯςφΛ࡞Ζ͏ (MINCS ʹؔ͢Δൃද ࢿྉ) • ֶͭͬͯ͘Ϳ Linux ίϯςφͷཪଆ (by @hayajo ͞Μ) • Go Ͱ࡞Δ Linux ίϯςφ (by @hayajo ͞Μ) • ඞཁͳػೳ͚ͩΛͬͯίϯςφΛಈ͔ͨ͢Ίʹ • Haconiwa (mruby Ͱॻ͔Εͨίϯςφ࡞ͷͨΊͷ DSL) http://haconiwa.mruby.org/ 52/53
Slide 54
Slide 54 text
ࢀߟࢿྉ • ίϯςφؔ࿈ػೳͷ࣮ͳͲΛਂ͘Δʹ • Linux Namespaces (Namespace ͷΧʔωϧ෦ͷ࣮ ʹؔ͢Δࢿྉ)(by Masami Ichikawa ͞Μ) • cgroup ͋Ε͜Ε (cgroup ͷ෦ͷ͓)(by @hiro_kamezawa ͞Μ) • seccomp Λ mruby Ͱࢼ͢ (ϩʔϑΝΠه) • AppArmor ͱ Docker ͱͦͷଞίϯςφతϓϩηεʹ͍ͭ ͯௐͨ (ϩʔϑΝΠه) • ͦͷଞ • ʮίϯςφܕԾԽͷใަձʯ ͜Ε·Ͱͷൃදࢿྉಈը͕ެ։͞Ε͍ͯ·͢ 53/53