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