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

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

PHPカンファレンス福岡2016

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

F04982ad61107b5408ad139966596316?s=128

Ryo Tomidokoro

May 21, 2016
Tweet

Transcript

  1. dockerͰࣾ಺֎޲͚ͷ؀ڥΛ੔͑ͨ࿩  3ZP5PNJEPLPSP !IBOIBO PHPΧϯϑΝϨϯε෱Ԭ

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

    "CPVU.F
  3. "HFOEB  ෼ͰdockerΛ෮श ׆༻ྫɾߏ੒ྫ ௕ॴɾ୹ॴ docker࠾༻͢Δ ಋೖཧ༝

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

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

    EPDLFSެࣜΑΓҾ༻
  6. ෼ͰEPDLFSΛ෮श  Dockerfileͷத਎ ίϯςφΠϝʔδͷߏஙखॱ͸ େ·͔ʹ෼͚ΔͱҎԼͷ̏ͭ 1 ϕʔεΠϝʔδࢦఆ Πϝʔδߏங༻ͷίϚϯυ ࿐ग़͢Δportͱ࣮ߦίϚϯυ 2

    3
  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
  8. ෼ͰEPDLFSΛ෮श  ϕʔεΠϝʔδͷऔಘ FROM php:7.0-apache Maintainer hanhan1978 1 phpͷόʔδϣϯ7(Apache)Πϝʔδ ίϯςφͷ؅ཧऀ͸ࣗ෼ͷDocker

    ID
  9. ෼ͰEPDLFSΛ෮श  ϕʔεΠϝʔδ͸Ͳ͔͜Βʁ σϑΥϧτ͸ެࣜϨϙδτϦ privateϦϙδτϦ͸༗ྉ EPDLFSIVC EPDLFSSFHJTUSZ OSSͷdocker image ετΞ

    ࣗલͰ༻ҙ ઐ೚ͷΠϯϑϥ୲౰͕͍ͳ͍ձࣾͷ৔߹ ϝϯς΍ೝূ͕໘౗ͳͷͰ΍Ίͨํ͕ແ೉
  10. ෼ͰEPDLFSΛ෮श  Πϝʔδߏங༻ͷίϚϯυ RUN docker-php-ext-install -j$(nproc) mysql RUN a2enmod rewrite

    2 • ίϚϯυΛ࣮ߦ͢ΔΑ͏ͳΠϝʔδͰཏྻ • ϩʔΧϧʹ༻ҙͨ͠ϑΝΠϧΛΠϝʔδʹCOPYͱ͔΋Մ • ৄ͘͠͸ެࣜυΩϡϝϯτࢀর
  11. FYQPTFͨ͠ϙʔτ͸ɺίϯςφؒͰެ։ ෼ͰEPDLFSΛ෮श  ࿐ग़͢Δportͱ࣮ߦίϚϯυ EXPOSE 8080 CMD [“/usr/sbin/httpd”, “-D”, “FOREGROUND”]

    3 • dockerͷωοτϫʔΫ಺Ͱ8080൪Λެ։ • CMDͰࢦఆͨ͠ϑΥΞάϥ΢ϯυͷίϚϯυΛ࣮ߦ
  12. ෼ͰEPDLFSΛ෮श  ίϯςφΛϏϧυ $ docker build -t [Πϝʔδ໊] [Dockerfileͷ͋ΔPATH] docker-hubͷΠϝʔδ໋໊نଇʹै͍·͠ΐ͏

    [Ϣʔβ໊]/[Πϝʔδ໊] ྫ) hanhan1978/php7
  13. ෼ͰEPDLFSΛ෮श  ίϯςφΛ࣮ߦ $ docker run -d -p 8080:80 [Πϝʔδ໊]

    ίϯςφͰexpose͞Εͨ80൪portΛ ϗετOSͷ8080ʹඥ෇͚ جຊ͸ίϨ͚ͩʂ
  14. ෼ͰEPDLFSΛ෮श  γϯϓϧͳdockerߏ੒ਤ EPDLFSIVC ֤ίϯςφ͸EPDLFSIVC͔ΒϕʔεΠϝʔδΛQVMM %PDLFSpMFͷهड़ʹԊͬͯɺίϯςφΛCVJME

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

  16. ಋೖཧ༝  ձࣾͰ΍͍ͬͯΔۀ຿ w খʙதن໛ͷडୗ։ൃ w 6*σβΠϯϑϩϯτΤϯυ։ൃ͕ϝΠϯ w αʔϏε։ൃ΋༗Γ w

    4BB4Ͱେମ͏·͘΍ͬͯΔ
  17. ಋೖཧ༝  ๊͍͑ͯͨ໰୊఺ w ϚʔΫΞοϓ ੩త)5.- ͷ֬ೝ؀ڥ͕ແ͔ͬͨɻ w ࢼͯ͠Έ͍ͨ044Λࢼ͢؀ڥ͕ແ͍ɻ w

    #PUͱ͔Λৗறͤ͞Δ-BCతͳ؀ڥ͕ແ͍ɻ
  18. ಋೖཧ༝  ݕ౼ͨ͠αʔϏε ࣾ಺ʹैྔ՝ۚͷߴֹ੥ٻτϥ΢Ϛ͕͋ΔΒ͘͠ ࠜڧ͍ෆ৴ײ͕ɾɾɾ AWS or GCP Heroku OSSͰHeroku͓ࢼ͠Λఏڙ͍ͯ͠ͳ͍΋ͷ΋ଟ͔ͬͨ

    ࣗ༝౓͕௿͍ͷͰ͸ͱײͨ͡(ޙʑޙչ͕ͨ͠ɾɾɾ) SakuraͷVPS ఆֹͰ࢖͑Δ͠ɺ޷͖ͳΑ͏ʹ࢖͑ͦ͏ͩɾɾɾ
  19. ಋೖཧ༝  ఆֹ714 ϝϯςָ͕ ߴՄ༻ੑ Ϟμϯ ͱ͍͏Θ͚Ͱ

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

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

  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
  23. ׆༻ྫɾߏ੒ྫ  1. ੩తαΠτͷ֬ೝ؀ڥ DPOUBJOFS git pushͰCI΁௨஌ docker-compose build [container]

    ϑϩϯτΤϯυΤϯδχΞ͸ɺΫϥΠΞϯτ΁ͷαΠτߋ৽ͷڞ༗Λ ҙࣝ͠ͳͯ͘Α͘ͳͬͨɻ ͱʹ͔͘ૣ͘ίʔυΛॻ͍ͯɺ164)
  24. ׆༻ྫɾߏ੒ྫ  2. OSS͓ࢼ͠؀ڥ docker-compose up -d opengrok opengrok: image:

    itszero/opengrok volumes: - /hoge/fuga:/src ports: - “3001:8080" DPNQPTFZNMʹઃఆΛ௥Ճͯ͠UP͢Δ͚ͩ
  25. ׆༻ྫɾߏ੒ྫ  3. ։ൃ -> εςʔδ΁൓ө ։ൃ DPOUBJOFS DPOUBJOFS DPOUBJOFS

    DPOUBJOFS ʹEPDLFSGPSNBD CFUB ΋ग़ͨͷͰɺͦΕͰ΋0, εςʔδ ։ൃ࣌ͷߏ੒Ͱͦͷ··UPͰ͖Δʂॴཁ࣌ؒ෼
  26. "HFOEB  ௕ॴɾ୹ॴ ಋೖཧ༝ ׆༻ྫɾߏ੒ྫ docker࠾༻͢Δ ෼ͰdockerΛ෮श

  27. ௕ॴɾ୹ॴ  ྑ͔ͬͨ͜ͱ ϗετ͸গ਺ͳͷͰϝϯςָ͕ ΞϓϦͷ͓ࢼ͠ར༻͸ϚδͰָ ґଘؔ܎͸ίϯςφଆͰղܾ͞Ε͍ͯΔ gitlab, redmine => Έͳ͞·΋Πϯετʔϧ࣌ͷਏ͞ʹ͕֮͑͋Δ͔ͱɾɾɾ

    VMΛෳ਺্ཱ͍ͪ͛ͯͨ࣌ʹൺ΂Δͱஈҧ͍ => ೴͕֮͑ͯΒΕΔݸ਺ ੬ऑੑରԠ => ίϯςφ࠶Ϗϧυ & ϗεταʔόʹରԠͰOK
  28. ௕ॴɾ୹ॴ  ྑ͔ͬͨ͜ͱ dockerೲ඼ͱ͍͏ϦΫΤετ ސ٬ଆ͕dockerΠϯϑϥΛ͍࣋ͬͯͨ => docker؀ڥͳΜͰ͕͢ɾɾɾʹ༨༟ͰରԠ ͜ͷઌ૿͑ͯ͘Δͱ༧૝͞Ε·͢ ʘ(^o^)ʗ

  29. ௕ॴɾ୹ॴ  ѱ͔ͬͨ͜ͱ ਓࡐϘτϧωοΫ ੩తαΠτߏஙͷίϯςφ࡞੒ => ٸ͍Ͱ΋30෼ ϑϩϯτΤϯυΤϯδχΞͷΈͰ͸׬݁Ͱ͖ͳ͍ => ݁ہɺherokuΛ࢖͏͜ͱʹͨ͠

    docker-machineͷͭΒΈ VirtualBoxͰಈ࡞͢ΔdockerͳͷͰɺϗετϚγʔϯଆͱͷ௨৴ ΍ϑΝΠϧڞ༗ͳͲ͕໘౗ ɹ=> docker for mac, windows͕ٹੈओ͔΋
  30. ௕ॴɾ୹ॴ  ѱ͔ͬͨ͜ͱ disk༰ྔ VPSͱ͔݁ߏdisk༰ྔগͳ͍ܖ໿ͩͱਏ͘ͳΔ ΠϝʔδϨΠϠʔ͕δϫδϫͱѹഭ => 20ʙ30ఔ౓ͷίϯςφΠϝʔδͰ50G͘Β͍͸ݟͨ΄͏͕ྑ ͍͔΋ɻ

  31. ௕ॴɾ୹ॴ  ݸਓతͳײ૝ w %PDLFSpMFͬͯɺ͋Μ·Γے͕ΑΖ͘͠ࢥ͑ͳ͍ɻ΄΅TIFMM w EPDLFSGPSNBD XJOEPXT͸ظ଴Ͱ͖Δʂʂ w 044ͷ͓ࢼ͠༻్ͱͯ͠͸ɺ࠷ڧͷ؀ڥɹେ఍ͷ΋ͷ͸EPDLFS

    IVCʹ͋Δ w ੈͷதʹ͍͍͚ͭͯͯΔײ஍ຯͰ͕͢େࣄ
  32. "HFOEB  docker࠾༻͢Δ ಋೖཧ༝ ׆༻ྫɾߏ੒ྫ ௕ॴɾ୹ॴ ෼ͰdockerΛ෮श

  33. docker࠾༻͢Δʁ  ೦಄ʹ͓͍͓ͯ͘͜ͱ w EPDLFSͷݪཧΛཧղ͠ɺ؅ཧՄೳͳਓࡐΛਓ͸ଗ͍͑ͨɻ w શ෦ΛEPDLFSͰ΍ΕΔͱ͍͏ࢥߟఀࢭ͸/(Ϛωʔδυɾ αʔϏεͰ΋ແྉ࿮ͱ͔͋Δ͠ɺόοΫΤϯυΤϯδχΞෆཁ ͷιϦϡʔγϣϯΛୈҰʹߟ͑Δͷେࣄ w

    ίϯςφࣗମΛඞཁͱ͢ΔαʔϏε։ൃͰ͋Ε͹ɺEPDLFSΛ ࢖͏ͷ͸޻਺࡟ݮʹͳͬͯྑͦ͞͏ɻ
  34. docker࢖ͬͯΈΔʁ  ৭ʑݒ೦఺͋͛·͕ͨ͠ɾɾɾ ͳΜ͔ͩΜͩݴͬͯɺdockerָ͍ͬ͢͠ ͪΐͬͱ͘Β͍ᷖᮣͳײ͕͡ͳ͍ͱɺ৽نಋೖͳΜͯͰ͖ͳ͍YO

  35. ͓·͚  dockerͰPHP؀ڥ EPDLFSIVCʹ1)1ͷެࣜΠϝʔδ༗Γ w ʙͷOUTͱ[UT w QIQGQN BQBDIF DMJ

    w BMQJOFͱॻ͔Ε͍ͯΔͷ͸ܰྔΠϝʔδ
  36. ͓·͚  apacheͷ৔߹ Containers BQBDIF src w ެࣜΠϝʔδ͸QSFGPSLNPEQIQ w EPDVNFOU3PPUʹTSDΛಥͬࠐΉ͚ͩ

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

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