$30 off During Our Annual Pro Sale. View Details »

dockerで社内外の環境を整えた話

 dockerで社内外の環境を整えた話

PHPカンファレンス福岡2016

小規模な受託開発の会社で、開発・ステージング環境用途として
dockerを利用した際の経験談&まとめです。

Ryo Tomidokoro

May 21, 2016
Tweet

More Decks by Ryo Tomidokoro

Other Decks in Programming

Transcript

  1. dockerͰࣾ಺֎޲͚ͷ؀ڥΛ੔͑ͨ࿩

    3ZP5PNJEPLPSP !IBOIBO

    PHPΧϯϑΝϨϯε෱Ԭ

    View Slide


  2. @hanhan1978
    Twitter
    Ryo Tomidokoro
    Name
    Web App Engineer
    Job
    "CPVU.F

    View Slide

  3. "HFOEB

    ෼ͰdockerΛ෮श
    ׆༻ྫɾߏ੒ྫ
    ௕ॴɾ୹ॴ
    docker࠾༻͢Δ
    ಋೖཧ༝

    View Slide

  4. ෼ͰEPDLFSΛ෮श

    Docker Inc ͷιϑτ΢ΣΞ
    ܰྔͳίϯςφԾ૝Խ
    ϋΠύʔόΠβʔܕͰ͸ͳ͍ɻ
    ίϯςφ͸ϗετOS಺ͷִ཭͞Εͨ؀ڥͰಈ࡞
    ֤ίϯςφ͸ϗετOSͷࢿݯΛར༻͢Δ

    View Slide

  5. ෼ͰEPDLFSΛ෮श

    docker͸Կ͕خ͍͠ͷʁ
    ίϯςφΛߏஙɾ؅ཧ͢ΔͨΊͷΠϯλϑΣʔεΛఏڙ
    ߏங಺༰͸Dockerfileͱ͍͏ܗͰίʔυԽ
    dockerͷίϯςφͷϨΠϠʔߏ଄
    %PDLFSpMFͷίʔυͷߦߦ͕ϕʔεΠϝʔ
    δͷ্ʹ૚ͱͯ͠ੵΈॏͳ͍ͬͯ͘ɻ
    ϕʔεΠϝʔδ͔ΒͷϨΠϠʔશମΛؚΊͯɺ
    ίϯςφͷʮΠϝʔδʯͱݺͿɻ
    EPDLFSެࣜΑΓҾ༻

    View Slide

  6. ෼ͰEPDLFSΛ෮श

    Dockerfileͷத਎
    ίϯςφΠϝʔδͷߏஙखॱ͸
    େ·͔ʹ෼͚ΔͱҎԼͷ̏ͭ
    1 ϕʔεΠϝʔδࢦఆ
    Πϝʔδߏங༻ͷίϚϯυ
    ࿐ग़͢Δportͱ࣮ߦίϚϯυ
    2
    3

    View Slide

  7. ෼ͰEPDLFSΛ෮श

    Dockerfileͷ࣮ྫ
    FROM php:7.0-apache
    Maintainer hanhan1978
    RUN docker-php-ext-install -j$(nproc) mysql
    RUN a2enmod rewrite
    EXPOSE 8080
    CMD [“/usr/sbin/httpd”, “-D”, “FOREGROUND”]
    1
    2
    3

    View Slide

  8. ෼ͰEPDLFSΛ෮श

    ϕʔεΠϝʔδͷऔಘ
    FROM php:7.0-apache
    Maintainer hanhan1978
    1
    phpͷόʔδϣϯ7(Apache)Πϝʔδ
    ίϯςφͷ؅ཧऀ͸ࣗ෼ͷDocker ID

    View Slide

  9. ෼ͰEPDLFSΛ෮श

    ϕʔεΠϝʔδ͸Ͳ͔͜Βʁ
    σϑΥϧτ͸ެࣜϨϙδτϦ
    privateϦϙδτϦ͸༗ྉ
    EPDLFSIVC
    EPDLFSSFHJTUSZ
    OSSͷdocker image ετΞ
    ࣗલͰ༻ҙ
    ઐ೚ͷΠϯϑϥ୲౰͕͍ͳ͍ձࣾͷ৔߹
    ϝϯς΍ೝূ͕໘౗ͳͷͰ΍Ίͨํ͕ແ೉

    View Slide

  10. ෼ͰEPDLFSΛ෮श

    Πϝʔδߏங༻ͷίϚϯυ
    RUN docker-php-ext-install -j$(nproc) mysql
    RUN a2enmod rewrite
    2
    • ίϚϯυΛ࣮ߦ͢ΔΑ͏ͳΠϝʔδͰཏྻ
    • ϩʔΧϧʹ༻ҙͨ͠ϑΝΠϧΛΠϝʔδʹCOPYͱ͔΋Մ
    • ৄ͘͠͸ެࣜυΩϡϝϯτࢀর

    View Slide

  11. FYQPTFͨ͠ϙʔτ͸ɺίϯςφؒͰެ։
    ෼ͰEPDLFSΛ෮श

    ࿐ग़͢Δportͱ࣮ߦίϚϯυ
    EXPOSE 8080
    CMD [“/usr/sbin/httpd”, “-D”, “FOREGROUND”]
    3
    • dockerͷωοτϫʔΫ಺Ͱ8080൪Λެ։
    • CMDͰࢦఆͨ͠ϑΥΞάϥ΢ϯυͷίϚϯυΛ࣮ߦ

    View Slide

  12. ෼ͰEPDLFSΛ෮श

    ίϯςφΛϏϧυ
    $ docker build -t [Πϝʔδ໊] [Dockerfileͷ͋ΔPATH]
    docker-hubͷΠϝʔδ໋໊نଇʹै͍·͠ΐ͏
    [Ϣʔβ໊]/[Πϝʔδ໊]
    ྫ) hanhan1978/php7

    View Slide

  13. ෼ͰEPDLFSΛ෮श

    ίϯςφΛ࣮ߦ
    $ docker run -d -p 8080:80 [Πϝʔδ໊]
    ίϯςφͰexpose͞Εͨ80൪portΛ
    ϗετOSͷ8080ʹඥ෇͚
    جຊ͸ίϨ͚ͩʂ

    View Slide

  14. ෼ͰEPDLFSΛ෮श

    γϯϓϧͳdockerߏ੒ਤ
    EPDLFSIVC
    ֤ίϯςφ͸EPDLFSIVC͔ΒϕʔεΠϝʔδΛQVMM
    %PDLFSpMFͷهड़ʹԊͬͯɺίϯςφΛCVJME

    View Slide

  15. "HFOEB

    ಋೖཧ༝
    ׆༻ྫɾߏ੒ྫ
    ௕ॴɾ୹ॴ
    docker࠾༻͢Δ
    ෼ͰdockerΛ෮श

    View Slide

  16. ಋೖཧ༝

    ձࣾͰ΍͍ͬͯΔۀ຿
    w খʙதن໛ͷडୗ։ൃ
    w 6*σβΠϯϑϩϯτΤϯυ։ൃ͕ϝΠϯ
    w αʔϏε։ൃ΋༗Γ
    w 4BB4Ͱେମ͏·͘΍ͬͯΔ

    View Slide

  17. ಋೖཧ༝

    ๊͍͑ͯͨ໰୊఺
    w ϚʔΫΞοϓ ੩త)5.-
    ͷ֬ೝ؀ڥ͕ແ͔ͬͨɻ
    w ࢼͯ͠Έ͍ͨ044Λࢼ͢؀ڥ͕ແ͍ɻ
    w #PUͱ͔Λৗறͤ͞Δ-BCతͳ؀ڥ͕ແ͍ɻ

    View Slide

  18. ಋೖཧ༝

    ݕ౼ͨ͠αʔϏε
    ࣾ಺ʹैྔ՝ۚͷߴֹ੥ٻτϥ΢Ϛ͕͋ΔΒ͘͠
    ࠜڧ͍ෆ৴ײ͕ɾɾɾ
    AWS or GCP
    Heroku
    OSSͰHeroku͓ࢼ͠Λఏڙ͍ͯ͠ͳ͍΋ͷ΋ଟ͔ͬͨ
    ࣗ༝౓͕௿͍ͷͰ͸ͱײͨ͡(ޙʑޙչ͕ͨ͠ɾɾɾ)
    SakuraͷVPS
    ఆֹͰ࢖͑Δ͠ɺ޷͖ͳΑ͏ʹ࢖͑ͦ͏ͩɾɾɾ

    View Slide

  19. ಋೖཧ༝

    ఆֹ714
    ϝϯςָ͕
    ߴՄ༻ੑ
    Ϟμϯ
    ͱ͍͏Θ͚Ͱ

    View Slide

  20. "HFOEB

    ׆༻ྫɾߏ੒ྫ
    ಋೖཧ༝
    ௕ॴɾ୹ॴ
    docker࠾༻͢Δ
    ෼ͰdockerΛ෮श

    View Slide

  21. ׆༻ྫɾߏ੒ྫ

    Overview
    DPOUBJOFS
    DPOUBJOFS
    DPOUBJOFS
    DPOUBJOFS
    ୯ҰͷϗετͷΈར༻
    ίϯςφؒϦϯΫ΍portͷࢦఆ͸docker-compose
    kubernatis΋TXBSN΋ඞཁͳ͠ʂ

    View Slide

  22. ׆༻ྫɾߏ੒ྫ

    docker-compose
    ίϯςφ࣮ߦ࣌ͷઃఆ͸ZNMͰҰݩ؅ཧ
    mysql:
    image: mysql
    volumes:
    - /host/mysql:/var/lib/mysql
    restart: always
    gyazo:
    build: docker-files/gyazo
    environment:
    - SRC_PATH=/hoge/fuga
    restart: always

    View Slide

  23. ׆༻ྫɾߏ੒ྫ

    1. ੩తαΠτͷ֬ೝ؀ڥ
    DPOUBJOFS
    git pushͰCI΁௨஌
    docker-compose build [container]
    ϑϩϯτΤϯυΤϯδχΞ͸ɺΫϥΠΞϯτ΁ͷαΠτߋ৽ͷڞ༗Λ
    ҙࣝ͠ͳͯ͘Α͘ͳͬͨɻ
    ͱʹ͔͘ૣ͘ίʔυΛॻ͍ͯɺ164)

    View Slide

  24. ׆༻ྫɾߏ੒ྫ

    2. OSS͓ࢼ͠؀ڥ
    docker-compose up -d opengrok
    opengrok:
    image: itszero/opengrok
    volumes:
    - /hoge/fuga:/src
    ports:
    - “3001:8080"
    DPNQPTFZNMʹઃఆΛ௥Ճͯ͠UP͢Δ͚ͩ

    View Slide

  25. ׆༻ྫɾߏ੒ྫ

    3. ։ൃ -> εςʔδ΁൓ө
    ։ൃ
    DPOUBJOFS
    DPOUBJOFS
    DPOUBJOFS
    DPOUBJOFS
    ʹEPDLFSGPSNBD CFUB
    ΋ग़ͨͷͰɺͦΕͰ΋0,
    εςʔδ
    ։ൃ࣌ͷߏ੒Ͱͦͷ··UPͰ͖Δʂॴཁ࣌ؒ෼

    View Slide

  26. "HFOEB

    ௕ॴɾ୹ॴ
    ಋೖཧ༝
    ׆༻ྫɾߏ੒ྫ
    docker࠾༻͢Δ
    ෼ͰdockerΛ෮श

    View Slide

  27. ௕ॴɾ୹ॴ

    ྑ͔ͬͨ͜ͱ
    ϗετ͸গ਺ͳͷͰϝϯςָ͕
    ΞϓϦͷ͓ࢼ͠ར༻͸ϚδͰָ
    ґଘؔ܎͸ίϯςφଆͰղܾ͞Ε͍ͯΔ
    gitlab, redmine
    => Έͳ͞·΋Πϯετʔϧ࣌ͷਏ͞ʹ͕֮͑͋Δ͔ͱɾɾɾ
    VMΛෳ਺্ཱ͍ͪ͛ͯͨ࣌ʹൺ΂Δͱஈҧ͍
    => ೴͕֮͑ͯΒΕΔݸ਺
    ੬ऑੑରԠ
    => ίϯςφ࠶Ϗϧυ & ϗεταʔόʹରԠͰOK

    View Slide

  28. ௕ॴɾ୹ॴ

    ྑ͔ͬͨ͜ͱ
    dockerೲ඼ͱ͍͏ϦΫΤετ
    ސ٬ଆ͕dockerΠϯϑϥΛ͍࣋ͬͯͨ
    => docker؀ڥͳΜͰ͕͢ɾɾɾʹ༨༟ͰରԠ
    ͜ͷઌ૿͑ͯ͘Δͱ༧૝͞Ε·͢ ʘ(^o^)ʗ

    View Slide

  29. ௕ॴɾ୹ॴ

    ѱ͔ͬͨ͜ͱ
    ਓࡐϘτϧωοΫ
    ੩తαΠτߏஙͷίϯςφ࡞੒ => ٸ͍Ͱ΋30෼
    ϑϩϯτΤϯυΤϯδχΞͷΈͰ͸׬݁Ͱ͖ͳ͍
    => ݁ہɺherokuΛ࢖͏͜ͱʹͨ͠
    docker-machineͷͭΒΈ
    VirtualBoxͰಈ࡞͢ΔdockerͳͷͰɺϗετϚγʔϯଆͱͷ௨৴
    ΍ϑΝΠϧڞ༗ͳͲ͕໘౗
    ɹ=> docker for mac, windows͕ٹੈओ͔΋

    View Slide

  30. ௕ॴɾ୹ॴ

    ѱ͔ͬͨ͜ͱ
    disk༰ྔ
    VPSͱ͔݁ߏdisk༰ྔগͳ͍ܖ໿ͩͱਏ͘ͳΔ
    ΠϝʔδϨΠϠʔ͕δϫδϫͱѹഭ
    => 20ʙ30ఔ౓ͷίϯςφΠϝʔδͰ50G͘Β͍͸ݟͨ΄͏͕ྑ
    ͍͔΋ɻ

    View Slide

  31. ௕ॴɾ୹ॴ

    ݸਓతͳײ૝
    w %PDLFSpMFͬͯɺ͋Μ·Γے͕ΑΖ͘͠ࢥ͑ͳ͍ɻ΄΅TIFMM
    w EPDLFSGPSNBD XJOEPXT͸ظ଴Ͱ͖Δʂʂ
    w 044ͷ͓ࢼ͠༻్ͱͯ͠͸ɺ࠷ڧͷ؀ڥɹେ఍ͷ΋ͷ͸EPDLFS
    IVCʹ͋Δ
    w ੈͷதʹ͍͍͚ͭͯͯΔײ஍ຯͰ͕͢େࣄ

    View Slide

  32. "HFOEB

    docker࠾༻͢Δ
    ಋೖཧ༝
    ׆༻ྫɾߏ੒ྫ
    ௕ॴɾ୹ॴ
    ෼ͰdockerΛ෮श

    View Slide

  33. docker࠾༻͢Δʁ

    ೦಄ʹ͓͍͓ͯ͘͜ͱ
    w EPDLFSͷݪཧΛཧղ͠ɺ؅ཧՄೳͳਓࡐΛਓ͸ଗ͍͑ͨɻ
    w શ෦ΛEPDLFSͰ΍ΕΔͱ͍͏ࢥߟఀࢭ͸/(Ϛωʔδυɾ
    αʔϏεͰ΋ແྉ࿮ͱ͔͋Δ͠ɺόοΫΤϯυΤϯδχΞෆཁ
    ͷιϦϡʔγϣϯΛୈҰʹߟ͑Δͷେࣄ
    w ίϯςφࣗମΛඞཁͱ͢ΔαʔϏε։ൃͰ͋Ε͹ɺEPDLFSΛ
    ࢖͏ͷ͸޻਺࡟ݮʹͳͬͯྑͦ͞͏ɻ

    View Slide

  34. docker࢖ͬͯΈΔʁ

    ৭ʑݒ೦఺͋͛·͕ͨ͠ɾɾɾ
    ͳΜ͔ͩΜͩݴͬͯɺdockerָ͍ͬ͢͠
    ͪΐͬͱ͘Β͍ᷖᮣͳײ͕͡ͳ͍ͱɺ৽نಋೖͳΜͯͰ͖ͳ͍YO

    View Slide

  35. ͓·͚

    dockerͰPHP؀ڥ
    EPDLFSIVCʹ1)1ͷެࣜΠϝʔδ༗Γ
    w ʙͷOUTͱ[UT
    w QIQGQN BQBDIF DMJ
    w BMQJOFͱॻ͔Ε͍ͯΔͷ͸ܰྔΠϝʔδ

    View Slide

  36. ͓·͚

    apacheͷ৔߹
    Containers
    BQBDIF
    src
    w ެࣜΠϝʔδ͸QSFGPSLNPEQIQ
    w EPDVNFOU3PPUʹTSDΛಥͬࠐΉ͚ͩ

    View Slide

  37. ͓·͚

    php-fpmͷ৔߹
    Containers
    /HJOY
    src
    w /HJOY౳ͷ'BTU$(*ͷαʔόΛલஈʹઃஔ
    w QIQGQNͷ෦෼͸IIWNͱ͔ʹஔ׵Մೳ
    QIQGQN

    View Slide

  38. "OZ2VFTUJPO

    ಋೖཧ༝
    ׆༻ྫɾߏ੒ྫ
    ௕ॴɾ୹ॴ
    ෼ͰdockerΛ෮श
    docker࠾༻͢Δ

    View Slide