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