PHPカンファレンス福岡2018前夜祭リジェクトコン
ίϯςφΛงғؾͰಈ͔͞ͳ͍1)1ΧϯϑΝϨϯεԬલࡇϦδΣΫτίϯ*OOPWBUPS+BQBO*ODॴ྄&OHJOFFS
View Slide
ͬͦ͘͞Ͱ͕͢
ίϯςφΛงғؾͰͬͯ·ͤΜ͔ʁ
DockerΛͬͨ։ൃίϯςφͷৄࡉΒͳͯ͘ग़དྷΔ
ڥߏஙdocker-compose.yml
docker-compose up -d։ൃڥߏங͕Ұॠ…
docker-compose downࠔͬͨΒ্ཱͪ͛͠docker-compose up -d
͜ͷ··ͰΞϗʹͳΔʂຊΛಡΜͰίϯςφʹೖͩ
ίϯςφԾԽɺαʔόʔԾԽͰͳ͍ɻΑ͋͘Δίϯςφೖॻͷಋೖ෦
ผʹαʔόʔԾԽͷ͜ͱʹৄ͘͠ͳΓ͍ͨΘ͚Ͱͳ͍ͷ͕ͩ…
ίϯςφͱΧʔωϧͷఏڙ͢ΔػೳʹΑ࣮ͬͯߦڥ͕͞ΕͨͦΕͧΕͷϢʔβۭؒͷ͜ͱͰ͋Δɻ-> ͜͏͍͏આ໌͚ͩͩͱϐϯͱ͜ͳ͍Α͋͘Δίϯςφೖॻͷಋೖ෦
݁ہɺίϯςφ͕Α͔͘Βͳ͍
ਅ໘ͳશһ͕ৄࡉΛ͠Βͳͯ͘ଟ͍͍நతʹѻ͑ΔͳΒͦΕ͍͍
ͰɺࢲΓ͍ͨͲ͏ͳ͍ͬͯΔͷ͔ཧղ͍ͨ͠
ͦ͜ͰࣗͳΓʹௐͨ
chroot 1979 ~unshare 2.14~nsenter 2.6.24~cgroups 2.6.24~ԶௐʹΑΔίϯςφͷਖ਼ମ※LinuxͷίϚϯυͰ͢ɻ
Ҏ্Ͱ͢…ͱ͍͏ͷڐ͞Εͳ͍ͱࢥ͏ͷͰɻྫΛަ͑ͯɺͳΔ͘ฏқʹઆ໌͠·͢ɻ
ྫ͑ɺ `alpine linux` ίϯςφtarͷதʢൈਮ)
ͯ͞ɺ͜Ε͕Ͳ͏ͬͯಈ͘ͷ͔ʁ
chroot͍͖ͳΓίϯςφ
ͨͩ͠ɺ͜Ε͚ͩͩͱ͕ෆे↑ϗετͷϓϩηεΛpkillͰ͖ͪΌ͏
unsharenamespaceΛ࡞ͯ͠ɺϓϩηεΛ
cgroups/sys/fs/cgroupԼͰઃఆΛݟΕΔϓϩηεάϧʔϓͷϦιʔεར༻Λִɾ੍ݶ
unshare͞ΕͨϓϩηεʹೖΕΔ`name space enter``docker exec` ͱ͔ʹΘΕ͍ͯΔͱࢥ͏nsenter
ίϯςφΛ࣮ݱ͢Δ4ίϚϯυجຊ chrootϓϩηεΛ unshare ͰϦιʔεΛ cgroup Ͱnsenter Ͱͨ͠ϓϩηεʹ৵ೖ
جຊ chrootLinux͔ΒɺLinuxͰ࣮ߦՄೳͳϑΝΠϧΛ࣮ߦ
྆ํLinux͔ͩΒ࣮ߦͰ͖ΔLinuxΧʔωϧͷABIApplication Binary Interfaceݫ֨ͳޙํޓੑ
Ұݟ alpinelinux ͕ԾOSͷΑ͏ʹݟ͑Δ࣮ଶϓϩηε࣮ߦ
ɹchrootdocker࣮ߦ࣌ʹɺඞͣίϚϯυΛࢦఆdocker run -it alpine:latest shͦ͏͍͏͜ͱͩͬͨͷ͔…
ίϯςφग़ͨͯͷ͜Ζୡਓ͕͓ͨͪͬ͠Όͬͯ·ͨ͠ɻʮίϯςφͬͯ chrootͩΑͶʯͱΑ͏͘…ҙຯΛཧղͰ͖·ͨ͠
͔͠͠ɺผͷ͕༙͍ٙͯ͘Δ
Docker For Mac ʁDocker For Windows ?MacɺWindowsLinux͡Όͳ͍ͳΜͰ Dockerಈ͘ͷʁ
Docker for MacWindowsͷ߹ಉ༷LinuxKitͱ͍͏ίϯςφ༻Linux্Ͱಈ࡞
ྫ͑ MacͷClangͰHelloWorldͷ࣮ߦϑΝΠϧΛ࡞Linuxίϯςφ্Ͱ࣮ߦ-> ಈ͔ͳ͍ɻLinux͡Όͳ͍͔Βɻ
UbuntuͰHelloWorldͷ࣮ߦϑΝΠϧΛ࡞DockerͰ࣮ߦ-> ಈ͘
Linux -> Linuxͷ࣮ߦՄೳϑΝΠϧ -> ಈ͘Linux -> OSXͷ࣮ߦՄೳϑΝΠϧ -> ಈ͔ͳ͍ཧ۶୯७
LXCͱ͔LibContainerͱ͔runCͱ͔Containerdͱ͔৭ʑมΘ͍ͬͯͬͯΔ͕جຊมΘΒͳ͍ɻ
͜͜·ͰΛཧղ͢ΕDockerͰಈ࡞͢ΔWindowsίϯςφ͕ແ͍ཧ༝OSXίϯςφ͕ແ͍ཧ༝શʹ͔Γ·͢ΑͶʁ
ίϯςφLinux ͔Β Linuxͷ࣮ߦՄೳϑΝΠϧΛಈ͔ٕ͢ज़͔ͩΒ
͕࣌ؒ༨ͬͯͨΒDEMO
Ҏ্ɺ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ