Upgrade to Pro — share decks privately, control downloads, hide ads and more …

コンテナを雰囲気で動かさない話

 コンテナを雰囲気で動かさない話

PHPカンファレンス福岡2018前夜祭リジェクトコン

Ryo Tomidokoro

June 15, 2018
Tweet

More Decks by Ryo Tomidokoro

Other Decks in Programming

Transcript

  1. ίϯςφΛงғؾͰಈ͔͞ͳ͍࿩
    1)1ΧϯϑΝϨϯε෱Ԭલ໷ࡇϦδΣΫτίϯ
    *OOPWBUPS+BQBO*OD
    ෋ॴ྄
    &OHJOFFS

    View Slide

  2. ͬͦ͘͞Ͱ͕͢

    View Slide

  3. ίϯςφΛงғؾͰ࢖ͬͯ·ͤΜ͔ʁ

    View Slide

  4. DockerΛ࢖ͬͨ։ൃ
    ίϯςφͷৄࡉ͸஌Βͳͯ͘΋ग़དྷΔ

    View Slide

  5. ؀ڥߏங
    docker-compose.yml

    View Slide

  6. docker-compose up -d
    ։ൃ؀ڥߏங͕Ұॠ…

    View Slide

  7. docker-compose down
    ࠔͬͨΒ্ཱͪ͛௚͠
    docker-compose up -d

    View Slide

  8. ͜ͷ··Ͱ͸ΞϗʹͳΔʂ
    ຊΛಡΜͰίϯςφʹೖ໳ͩ

    View Slide

  9. ίϯςφԾ૝Խ͸ɺαʔόʔԾ૝ԽͰ͸ͳ͍ɻ
    Α͋͘Δίϯςφೖ໳ॻͷಋೖ෦෼

    View Slide

  10. ผʹαʔόʔԾ૝Խͷ͜ͱʹৄ͘͠ͳΓ͍ͨΘ
    ͚Ͱ͸ͳ͍ͷ͕ͩ…

    View Slide

  11. ίϯςφͱ͸Χʔωϧͷఏڙ͢ΔػೳʹΑͬͯ
    ࣮ߦ؀ڥ͕෼཭͞ΕͨͦΕͧΕͷϢʔβۭؒͷ
    ͜ͱͰ͋Δɻ
    -> ͜͏͍͏આ໌͚ͩͩͱϐϯͱ͜ͳ͍
    Α͋͘Δίϯςφೖ໳ॻͷಋೖ෦෼

    View Slide

  12. ݁ہɺίϯςφ͕Α͘෼͔Βͳ͍

    View Slide

  13. ਅ໘໨ͳ࿩
    શһ͕ৄࡉΛ͠Βͳͯ͘΋ଟ෼͍͍
    ந৅తʹѻ͑ΔͳΒͦΕ΋͍͍

    View Slide

  14. Ͱ΋ɺࢲ͸஌Γ͍ͨ
    Ͳ͏ͳ͍ͬͯΔͷ͔ཧղ͍ͨ͠

    View Slide

  15. ͦ͜Ͱࣗ෼ͳΓʹௐ΂ͨ

    View Slide

  16. chroot 1979೥ ~
    unshare 2.14~
    nsenter 2.6.24~
    cgroups 2.6.24~
    Զௐ΂ʹΑΔίϯςφͷਖ਼ମ
    ※LinuxͷίϚϯυͰ͢ɻ

    View Slide

  17. Ҏ্Ͱ͢…
    ͱ͍͏ͷ͸ڐ͞Εͳ͍ͱࢥ͏ͷͰɻ
    ྫΛަ͑ͯɺͳΔ΂͘ฏқʹઆ໌͠·͢ɻ

    View Slide

  18. ྫ͑͹ɺ `alpine linux` ίϯςφ
    tarͷத਎ʢൈਮ)

    View Slide

  19. ͯ͞ɺ͜Ε͕Ͳ͏΍ͬͯಈ͘ͷ͔ʁ

    View Slide

  20. chroot
    ͍͖ͳΓίϯςφ׬੒

    View Slide

  21. ͨͩ͠ɺ͜Ε͚ͩͩͱ෼཭͕ෆे෼
    ↑ϗετͷϓϩηεΛpkillͰ͖ͪΌ͏

    View Slide

  22. unshare
    namespaceΛ࡞੒ͯ͠ɺϓϩηεΛ෼཭

    View Slide

  23. cgroups
    /sys/fs/cgroup഑ԼͰઃఆΛݟΕΔ
    ϓϩηεάϧʔϓͷϦιʔεར༻Λִ཭ɾ੍ݶ

    View Slide

  24. unshare͞ΕͨϓϩηεʹೖΕΔ
    `name space enter`
    `docker exec` ͱ͔ʹ࢖ΘΕ͍ͯΔͱࢥ͏
    nsenter

    View Slide

  25. ίϯςφΛ࣮ݱ͢Δ4ίϚϯυ
    جຊ͸ chroot
    ϓϩηεΛ unshare Ͱ෼཭
    ϦιʔεΛ cgroup Ͱ෼཭
    nsenter Ͱ෼཭ͨ͠ϓϩηεʹ৵ೖ

    View Slide

  26. جຊ͸ chroot
    Linux͔ΒɺLinuxͰ࣮ߦՄೳͳϑΝΠϧΛ࣮ߦ

    View Slide

  27. ྆ํLinux͔ͩΒ࣮ߦͰ͖Δ
    LinuxΧʔωϧͷABI
    Application Binary Interface
    ݫ֨ͳޙํޓ׵ੑ

    View Slide

  28. Ұݟ alpinelinux ͕Ծ૝OSͷΑ͏ʹݟ͑Δ
    ࣮ଶ͸ϓϩηε࣮ߦ

    View Slide

  29. ɹchroot΋docker΋
    ࣮ߦ࣌ʹɺඞͣίϚϯυΛࢦఆ
    docker run -it alpine:latest sh
    ͦ͏͍͏͜ͱͩͬͨͷ͔…

    View Slide

  30. ίϯςφग़ͨͯͷ͜Ζ
    ୡਓ͕͓ͨͪͬ͠Όͬͯ·ͨ͠ɻ
    ʮίϯςφͬͯ chrootͩΑͶʯͱ
    Α͏΍͘…ҙຯΛཧղͰ͖·ͨ͠

    View Slide

  31. ͔͠͠ɺผͷٙ໰͕༙͍ͯ͘Δ

    View Slide

  32. Docker For Mac ͸ʁ
    Docker For Windows ͸ ?
    Mac΋ɺWindows΋Linux͡Όͳ͍
    ͳΜͰ Dockerಈ͘ͷʁ

    View Slide

  33. Docker for Mac
    Windowsͷ৔߹΋ಉ༷
    LinuxKitͱ͍͏ίϯςφ༻Linux্Ͱಈ࡞

    View Slide

  34. ྫ͑͹ MacͷClangͰ
    HelloWorldͷ࣮ߦϑΝΠϧΛ࡞੒
    Linuxίϯςφ্Ͱ࣮ߦ
    -> ಈ͔ͳ͍ɻ
    Linux͡Όͳ͍͔Βɻ

    View Slide

  35. UbuntuͰ
    HelloWorldͷ࣮ߦϑΝΠϧΛ࡞੒
    DockerͰ࣮ߦ
    -> ಈ͘

    View Slide

  36. Linux -> Linuxͷ࣮ߦՄೳϑΝΠϧ -> ಈ͘
    Linux -> OSXͷ࣮ߦՄೳϑΝΠϧ -> ಈ͔ͳ͍
    ཧ۶͸୯७

    View Slide

  37. LXCͱ͔LibContainerͱ͔runCͱ͔
    Containerdͱ͔৭ʑมΘ͍ͬͯͬͯΔ͕
    جຊ͸มΘΒͳ͍ɻ

    View Slide

  38. ͜͜·ͰΛཧղ͢Ε͹
    DockerͰಈ࡞͢Δ
    Windowsίϯςφ͕ແ͍ཧ༝
    OSXίϯςφ͕ແ͍ཧ༝
    ׬શʹ෼͔Γ·͢ΑͶʁ

    View Slide

  39. ίϯςφ͸
    Linux ͔Β Linuxͷ࣮ߦՄೳϑΝΠϧΛಈ͔ٕ͢ज़͔ͩΒ

    View Slide

  40. ͕࣌ؒ༨ͬͯͨΒDEMO

    View Slide

  41. Ҏ্ɺ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ

    View Slide