Slide 1

Slide 1 text

Docker ϋϯζΦϯ جૅฤ2 # גࣜձࣾΤΞʔΫϩʔθοτ ࣾ಺ษڧձ Vol.2 @takasp 2018೥8݄24೔

Slide 2

Slide 2 text

࿩͢͜ͱ • Dockerfile ͷॻ͖ํ • docker-compose ͷॻ͖ํ • Dockerfile ͱ docker-compose Λ
 ࢖ͬͨϋϯζΦϯ

Slide 3

Slide 3 text

Docker ͷ֓ཁ΍ίϚϯυ͸ લճࢿྉΛࢀর͍ͯͩ͘͠͞ 
 
 
 
 
 https://speakerdeck.com/takasp/docker-handson-basic-1

Slide 4

Slide 4 text

Dockerfile

Slide 5

Slide 5 text

Dockerfile ͱ͸ • ϕʔεͱͳΔΠϝʔδɺίϯςφ಺Ͱߦ͏ૢ࡞ɺ ؀ڥม਺ͳͲͷઃఆɺίϯςφ಺Ͱಈ࡞͢Δ
 ϓϩηεΛؚΜͩߏ੒৘ใΛఆٛ͢ΔϑΝΠϧɻ • docker image build ίϚϯυͰ 
 Dockerfile ΛݩʹΠϝʔδΛ࡞੒͢Δɻ

Slide 6

Slide 6 text

Dockerfile ͷ࡞੒ • FROM ໋ྩ • λά໊Λলུ͢Δͱ latest ͕࢖༻͞ΕΔɻ • ࣮ࡍʹར༻͢Δ࣌͸ɺͲͷΑ͏ͳόʔδϣϯ͕
 ಈ࡞͍ͯ͠Δ͔൑அͰ͖ͳ͍ͷͰɺlatest ͸࢖༻͠ͳ͍ɻ '30.Πϝʔδ໊<λά໊> ϕʔεΠϝʔδྫ '30.VCVOUV

Slide 7

Slide 7 text

Dockerfile Λ࡞੒ͯ͠
 Ϗϧυͯ͠ΈΑ͏

Slide 8

Slide 8 text

Dockerfile Λ࡞੒͠Α͏ • ೚ҙͷσΟϨΫτϦΛ࡞੒͠ɺ
 σΟϨΫτϦʹೖΓ·͢ɻ
 • ҎԼͷΑ͏ͳ Dockerfile Λ࡞੒͠·͢ɻ NLEJSEPDLFSTBNQMF
 DEEPDLFSTBNQMF

Slide 9

Slide 9 text

Dockerfile ΛϏϧυͯ͠ΈΑ͏ • sample:1.0 ͱ͍͏໊લͰࠓͷσΟϨΫτϦʹ
 ͋Δ Dockerfile ΛϏϧυ͠·͢ɻ • docker image ls ίϚϯυͰ֬ೝ͢Δͱ
 ϕʔεΠϝʔδͷ ubuntu:18.04 ͱ sample:1.0 ͷ Πϝʔδ͕Ͱ͖͍ͯΔ͜ͱ͕෼͔Δɻ EPDLFSJNBHFCVJMEUTBNQMF

Slide 10

Slide 10 text

Ϗϧυ

Slide 11

Slide 11 text

Dockerfile ͔ΒΠϝʔδ࡞੒ • docker image build ίϚϯυ • ҎԼͷΑ͏ͳ DockerfileΛ࡞੒ͯ͠Ϗϧυ͢Δɻ EPDLFSJNBHFCVJMEUΠϝʔδ໊<λά໊><%PDLFSpMFͷ৔ॴ> ϕʔεΠϝʔδͷઃఆ '30.VCVOUV

Slide 12

Slide 12 text

Dockerfile ͔ΒΠϝʔδ࡞੒ • /home/user/sample ʹ͋Δ Dockerfile Λ
 sample:1.0 ͱ͍͏໊લͰϏϧυ͢Δྫɻ EPDLFSJNBHFCVJMEίϚϯυͷ࣮ߦྫ EPDLFSJNBHFCVJMEUTBNQMFIPNFVTFSTBNQMF

Slide 13

Slide 13 text

ΠϝʔδͷϨΠϠʔߏ଄ • Dockerfile ͷΠϝʔδΛ࡞੒͢Δͱɺ
 ໋ྩ͝ͱʹΠϝʔδΛ࡞੒͢Δɻ • ࡞੒͞Εͨෳ਺ͷΠϝʔδ͸ϨΠϠʔߏ଄ʹͳΔɻ • ࡞੒ͨ͠Πϝʔδ͸ଞͷΠϝʔδͱ΋ڞ༗͢Δɻ
 ΠϝʔδΛੵΈॏͶͯσΟεΫޮ཰ΛߴΊ͍ͯΔɻ

Slide 14

Slide 14 text

ΠϝʔδͷϨΠϠʔߏ଄ྫ • ҎԼͷΑ͏ͳ Dockerfile Λ࡞੒ͯ͠
 ΠϝʔδΛ࡞੒ͨ͠৔߹ɻ

Slide 15

Slide 15 text

• ҎԼͷίϚϯυͰϏϧυ͢Δͱ໋ྩ͝ͱʹ
 Πϝʔδ͕ੜ੒͞Ε͍ͯΔ͜ͱ͕෼͔Δɻ EPDLFSJNBHFCVJMEUXFC ˡ૚໨ ˡ૚໨ ˡ૚໨ ˡ૚໨

Slide 16

Slide 16 text

• ໋ྩ͝ͱʹΠϝʔδ͕ੵΈॏͳΔɻ 4UFQ
 '30.໋ྩ 4UFQ
 '30.໋ྩ 4UFQ
 36/໋ྩ 4UFQ
 '30.໋ྩ 4UFQ
 36/໋ྩ 4UFQ
 $01:໋ྩ 4UFQ
 $.%໋ྩ 4UFQ
 '30.໋ྩ 4UFQ
 36/໋ྩ 4UFQ
 $01:໋ྩ

Slide 17

Slide 17 text

ίϚϯυɾϓϩηεͷ࣮ߦ

Slide 18

Slide 18 text

RUN ໋ྩ • ϕʔεΠϝʔδʹϛυϧ΢ΣΞͷΠϯετʔϧ ΍ઃఆɺ؀ڥߏஙͷίϚϯυΛ࣮ߦ͢ΔͳͲɺ ΞϓϦΛ࢖͏ͷʹඞཁͳίϚϯυΛ࣮ߦ͢Δ ͱ͖ʹ࢖༻͢Δɻ 36/໋ྩΛར༻ͨ͠OHJOYͷΠϯετʔϧྫ 36/BQUHFUJOTUBMMZOHJOY

Slide 19

Slide 19 text

CMD ໋ྩ • ࡞੒ͨ͠ΠϝʔδΛىಈ͢Δ࣌ʹ࣮ߦ͍ͨ͠ ίϚϯυΛ࣮ߦ͢Δͱ͖ʹ࢖༻͢Δɻ • Ұ͚ͭͩఆٛͰ͖Δɻෳ਺ࢦఆͨ͠৔߹͸ɺ ࠷ޙͷ CMD ͕༗ޮʹͳΔɻ • docker container run ίϚϯυ࣮ߦ࣌ʹ
 Ҿ਺Λ͞Βʹࢦఆ͢ΔͱҾ਺͕༏ઌ͞ΕΔɻ

Slide 20

Slide 20 text

CMD ໋ྩͷهड़ํࣜ • Exec ܗࣜ • Shell ܗࣜ • ENTRYPOINT ໋ྩͷύϥϝʔλʔͱͯ͠

Slide 21

Slide 21 text

CMD ໋ྩͷ Exec ܗࣜ • γΣϧΛհͣ͞௚઀࣮ߦ͢Δɻ
 ͕ͨͬͯ͠ $HOME ͷΑ͏ͳ؀ڥม਺ΛࢦఆͰ͖ͳ͍ɻ • JSON ഑ྻͰࢦఆ͢Δɻ • ผͷγΣϧΛ࢖͍͍ͨͱ͖͸ɺγΣϧͷύεΛࢦఆͯ͠ɺ ࣮ߦ͍ͨ͠ίϚϯυΛࢦఆ͢Δɻ • ެࣜͰ͸ CMD ໋ྩ͸ Exec ܗ͕ࣜ๬·͍͠ͱ͞Ε͍ͯΔɻ

Slide 22

Slide 22 text

CMD ໋ྩͷ Exec ܗࣜ OHJOYͷ$.%໋ྩͷ&YFDܗࣜͷྫ $.%<OHJOY H EBFNPOP⒎> &YFDܗࣜͰผͷγΣϧΛ࣮ߦ͢Δྫ $.%<CJOCBTI D OHJOY H EBFNPOP⒎>

Slide 23

Slide 23 text

CMD ໋ྩͷ Shell ܗࣜ • /bin/sh -c Λ࢖ͬͯίϚϯυΛ࣮ߦͨ͠ͱ͖ͱ ಉ͡ڍಈʹͳΔɻ • σϑΥϧτͷγΣϧΛมߋ͍ͨ͠ͱ͖͸ɺ SHELL ໋ྩΛ࢖͏ɻ OHJOYͷ$.%໋ྩͷ4IFMMܗࣜͷྫ $.%OHJOYH`EBFNPOP⒎`

Slide 24

Slide 24 text

ENTRYPOINT ໋ྩ • ENTRYPOINT ໋ྩ͸ඞ࣮ͣߦ͞ΕΔ͕ɺ
 ࣮ߦ࣌ʹίϚϯυҾ਺Λࢦఆ͍ͨ͠ͱ͖ʹ
 CMD ໋ྩͱ૊Έ߹Θͤͯ࢖༻͢Δɻ • ENTRYPOINT ໋ྩͰ࣮ߦ͍ͨ͠ίϚϯυɺ
 CMD ໋ྩͰσϑΥϧτͷҾ਺Λఆ͓͖ٛͯ͠ɺ
 docker container run ίϚϯυͰڍಈΛม͍͑ͨ৔߹ʹར༻͢Δɻ • Ұ͚ͭͩఆٛͰ͖Δɻ
 ෳ਺ࢦఆͨ͠৔߹͸ɺ࠷ޙͷ ENTRYPOINT ͕༗ޮʹͳΔɻ

Slide 25

Slide 25 text

ENTRYPOINT ໋ྩ • ENTRYPOINT ໋ྩͱ CMD ໋ྩΛ
 ૊Έ߹Θͤͯ Dockerfile Λ࡞੒ͨ͠ྫɻ

Slide 26

Slide 26 text

ENTRYPOINT ໋ྩ QJOHίϚϯυΛճXXXHPPHMFDPNʹ࣮ߦ͢Δ৔߹ EPDLFSDPOUBJOFSSVOTBNQMF QJOHίϚϯυΛճXXXZBIPPDPNʹ࣮ߦ͢Δ৔߹ EPDLFSDPOUBJOFSSVOTBNQMFXXXZBIPPDPN

Slide 27

Slide 27 text

؀ڥɾωοτϫʔΫͷઃఆ

Slide 28

Slide 28 text

ENV ໋ྩ • ؀ڥม਺Λઃఆ͍ͨ͠ͱ͖ʹ ENV ໋ྩΛ
 ࢖༻͢Δɻ &/7໋ྩͷྫ &/7)045IPTU &/7/".&EPDLFSNPCZ &/7500-,VCFSOFUFT"QBDIF.FTPT%PDLFS4XBSN &/71035QPSU &/7 PS &/7

Slide 29

Slide 29 text

WORKDIR ໋ྩ • ࡞ۀ༻σΟϨΫτϦΛࢦఆ͢Δɻ • ΋͠ࢦఆͨ͠σΟϨΫτϦ͕ଘࡏ͠ͳ͚Ε͹࡞੒͢Δɻ • cd ίϚϯυ͸࢖༻͠ͳ͍ɻ
 
803,%*3໋ྩͷྫ 803,%*3pSTU 803,%*3TFDPOE 803,%*3<࡞ۀσΟϨΫτϦͷύε>

Slide 30

Slide 30 text

USER ໋ྩ • RUN ໋ྩ΍ CMD ໋ྩΛ࣮ߦ͢ΔϢʔβʔΛࢦఆ͢Δɻ • USER ໋ྩͰࢦఆ͢ΔϢʔβʔ͸͋Β͔͡Ί RUN ໋ྩͰ
 ࡞੒͞Ε͍ͯΔඞཁ͕͋Δɻ • ϕʔεΠϝʔδͷσϑΥϧτ͸ root ϢʔβʔͰ͋Δ͜ͱ͕ଟ͘ɺ
 ϓϩηεͷ࣮ߦʹ root ݖݶ͕ඞཁͰͳ͍৔߹͸ɺ
 USER Λ੾Γସ͑ͨํ͕ྑ͍ɻ 64&3<Ϣʔβʔ໊6*%>

Slide 31

Slide 31 text

EXPOSE ໋ྩ • ެ։͢Δϙʔτ൪߸Λࢦఆ͢Δͱ͖ʹ
 ࢖༻͢Δɻ • ίϯςφ͕ listen ͢ΔϙʔτΛ஌ΒͤΔɻ &9104&໋ྩͷྫ &9104& &9104&<ϙʔτ൪߸>

Slide 32

Slide 32 text

ϑΝΠϧͷઃఆ

Slide 33

Slide 33 text

ADD ໋ྩ • ϗετ্ͷϑΝΠϧ΍σΟϨΫτϦΛ௥Ճ͢Δ
 ͱ͖ʹ࢖༻͢Δɻ • tar.gz ͳͲͷѹॖϑΝΠϧΛల։͢Δػೳ΋࣋ͭɻ
 "%%<ϗετ04ͷϑΝΠϧύε><ΠϝʔδͷϑΝΠϧύε> "%%໋ྩͷྫ "%%JOEFYIUNMEJS

Slide 34

Slide 34 text

COPY ໋ྩ • ADD ໋ྩͱࣅ͍ͯΔ͕ɺCOPY ໋ྩ͸
 ίϐʔ͢Δػೳ͚ͩ࣋ͭɻ • ίϐʔ͢Δॲཧ͚͕ͩ໌ࣔతͰ͋Δͱ͖ʹ
 ࢖༻͢Δɻ $01:<ϗετ04ͷϑΝΠϧύε><ΠϝʔδͷϑΝΠϧύε>

Slide 35

Slide 35 text

VOLUME ໋ྩ • ϘϦϡʔϜΛׂΓ౰ͯΔͱ͖ʹ࢖༻͢Δɻ • ࢦఆ໊ͨ͠લͷϚ΢ϯτϙΠϯτΛ࡞੒͠ɺ ϗετ OS ΍ͦͷଞͷίϯςφ͔Β֎෦ʹ
 Ϛ΢ϯτ͢Δɻ 70-6.&<Ϛ΢ϯτϙΠϯτ>

Slide 36

Slide 36 text

Dockerfile ͷ
 ϕετϓϥΫςΟεΛҰ෦঺հ

Slide 37

Slide 37 text

ϨΠϠʔ਺Λ࠷খݶʹอͭ • RUNɺADDɺCOPY ໋ྩ͸ϨΠϠʔΛ࡞੒͠ɺ
 ϏϧυͷαΠζΛ૿΍͢ͷͰ
 ՄೳͳݶΓҰͭʹ·ͱΊΔΑ͏ʹ͢Δɻ • v17.05 ͔ΒϚϧνεςʔδϏϧυʹ
 ରԠ͍ͯ͠ΔͷͰɺར༻Λݕ౼͢Δɻ

Slide 38

Slide 38 text

RUN ໋ྩ͸·ͱΊΔ • ϨΠϠʔΛ૿΍͞ͳ͍ͨΊʹ RUN ໋ྩΛ·ͱΊΔɻ • ෳ਺ͷҾ਺Λӳ਺ࣈͰฒ΂ସ͑Δͱྑ͍ɻ • վߦ \ ΛೖΕΔͱՄಡੑ͕ߴ͘ɺอक͠΍͍͢ɻ
 
 
 
 36/໋ྩΛ·ͱΊͨྫ
 36/BQUHFUVQEBUFBQUHFUJOTUBMMZa C[Sa DWTa HJUa NFSDVSJBMa TVCWFSTJPO

Slide 39

Slide 39 text

ϏϧυΩϟογϡΛ༗ޮ׆༻͢Δ • ΠϝʔδΛϏϧυ͢Δࡍʹ࠶ར༻Ͱ͖ΔΠϝʔδͷΩϟογϡ͕ଘࡏ͢Δ͔
 ֬ೝ͢Δɻ • جຊϧʔϧ • ਌Πϝʔδ͔Β೿ੜͨ͠ࢠΠϝʔδͱൺֱ͠ɺಉ໋͡ྩɺίϚϯυ͕
 ࢖༻͞Ε͍ͯΔ͔ൺֱ͢Δɻ • ADD ͱ COPY ໋ྩ͸ɺϑΝΠϧ͝ͱʹνΣοΫαϜ͕ܭࢉ͞Εɺ
 ΩϟογϡͷνΣοΫαϜΛൺֱ͢Δɻ • ίϯςφ಺ͷϑΝΠϧΛνΣοΫ͠ͳ͍ͷͰɺ
 ྫ͑͹ɺRUN apt-get -y update ίϚϯυͷΈ͕࣮ߦ͞Εͨ৔߹͸ɺ
 ίϚϯυจࣈྻࣗମΛൺֱ͢ΔͷͰɺΩϟογϡΛར༻ͯ͠͠·͏ɻ

Slide 40

Slide 40 text

ϏϧυΩϟογϡͷ༗ޮ׆༻ྫ • ѱ͍ྫ͸ɺҰͭͰ΋ϩʔΧϧͷϑΝΠϧʹมߋ͕͋Δ࣌఺Ͱɺ
 ιʔεͷίϐʔʢCOPY ໋ྩʣͱ npm installʢRUN ໋ྩʣ͕࣮ߦ͞ΕΔɻ • ྑ͍ྫ͸ɺpackage.json ΛઌʹίϐʔʢCOPY ໋ྩʣͯ͠
 npm install ʢRUN ໋ྩʣΛ͢Δ͜ͱͰɺpackage.json ʹมߋ͕ͳ͍ݶΓɺ
 npm installʢRUN ໋ྩʣͷ࠶࣮ߦ͸ͤͣɺιʔεͷίϐʔʢCOPY ໋ྩʣͷΈ
 ࣮ߦ͢Δɻ
 
 
 
 
 ྑ͍%PDLFSpMFͷྫ
 '30.OPEF 803,%*3TSD $01:QBDLBHFKTPOTSDQBDLBHFKTPO
 36/OQNJOTUBMM $01:TSD ѱ͍%PDLFSpMFͷྫ
 '30.OPEF 803,%*3TSD $01:TSD
 36/OQNJOTUBMM

Slide 41

Slide 41 text

FROM ໋ྩ • ެࣜϦϙδτϦΛϕʔεΠϝʔδͱͯ͠࢖༻͢Δɻ • alpine ͳͲখ͍͞Πϝʔδͷ࢖༻Λݕ౼͢Δɻ • ubuntu:latest ͱ alpine:latest ͷൺֱɻ


Slide 42

Slide 42 text

ͦͷଞ • RUN ໋ྩ࣮ߦ࣌ͷ࠷ॳʹ set -eux Λ෇༩͢Δɻ • -e ͸Τϥʔ࣌ʹଈ࠲ʹऴྃ͠ɺ࣮ߦ಺༰͕දࣔ͞ΕΔɻ • -x ͸࣮ߦͨ͠ίϚϯυΛඪ४ग़ྗʹදࣔ͢Δɻ • -u ͸ະఆٛͷม਺͕ࢀর͞Εͨͱ͖ʹऴྃ͢Δɻ • ෆඞཁͳύοέʔδ͸Πϯετʔϧ͠ͳ͍ɻ • ෳࡶ͞ɺґଘؔ܎ɺϑΝΠϧαΠζɺϏϧυ࣌ؒΛݮΒͨ͢Ίɻ • .dockerignore ϑΝΠϧΛར༻͢Δɻ • Ϗϧυ࣌ʹෆඞཁͳϑΝΠϧΛআ֎͢Δɻ

Slide 43

Slide 43 text

Dockerfile ϋϯζΦϯ

Slide 44

Slide 44 text

Node.js Ͱ Dockerfile Λ ࡞੒͠Α͏

Slide 45

Slide 45 text

package.json Λ࡞੒͢Δ • ೚ҙͷσΟϨΫτϦΛ࡞੒͠ɺσΟϨΫτϦʹ
 ೖΓ·͢ɻ • σΟϨΫτϦ಺Ͱӈهͷ
 package.jsonΛ࡞੒͠·͢ɻ
 
 NLEJSOPEFKTEPDLFS
 DEOPEFKTEPDLFS \ OBNFEPDLFSOPEFKTIFMMP  WFSTJPO  EFTDSJQUJPO  BVUIPS  MJDFOTF*4$  EFQFOEFODJFT\ FYQSFTT ^ ^

Slide 46

Slide 46 text

index.js Λ࡞੒͢Δ • ӈهͷ
 index.js Λ
 ࡞੒͠·͢ɻ VTFTUSJDU DPOTUFYQSFTTSFRVJSF FYQSFTT  $POTUBOUT DPOTU1035 DPOTU)045 "QQ DPOTUBQQFYQSFTT  BQQHFU   SFR SFT \ SFTTFOE )FMMPXPSMEaO  ^  BQQMJTUFO 1035 )045  DPOTPMFMPH A3VOOJOHPOIUUQ\)045^\1035^A 

Slide 47

Slide 47 text

Dockerfile Λ࡞੒͢Δ • ӈهͷ
 Dockerfile Λ
 ࡞੒͠·͢ɻ '30.VCVOUV 803,%*3TSD /PEFKTͱOQNΛΠϯετʔϧ 36/BQUHFUVQEBUFBQUHFUJOTUBMMZa OPEFKTa OQN OQNJOTUBMM $01:QBDLBHFKTPOTSDQBDLBHFKTPO 36/OQNJOTUBMMQSPEVDUJPO ιʔεΛίϐʔ $01:TSD &9104& $.%<OPEF TSDJOEFYKT>

Slide 48

Slide 48 text

Ϗϧυ͢Δ • docker image build ίϚϯυͰ
 Ϗϧυ͠·͢ɻ • docker container run ίϚϯυͰىಈ͠·͢ɻ EPDLFSJNBHFCVJMEUVCVOUVOPEFIFMMP EPDLFSDPOUBJOFSSVOOBNFOPEFIFMMPa
 QEVCVOUVOPEFIFMMP

Slide 49

Slide 49 text

ϒϥ΢βͰ֬ೝ͢Δ • ϒϥ΢β͔Β http://localhost:49160/ ʹ
 ΞΫηεͯ͠τοϓը໘͕දࣔ͞ΕͨΒ
 ಈ࡞֬ೝ׬ྃͰ͢ɻ

Slide 50

Slide 50 text

index.js Λमਖ਼͢Δ • index.js ͷ Hello world Λ Hello docker ʹ
 ॻ͖׵͑·͢ɻ "QQ DPOTUBQQFYQSFTT  BQQHFU   SFR SFT \ SFTTFOE )FMMPEPDLFSaO XPSMEΛEPDLFSʹॻ͖׵͑Δɻ ^ 

Slide 51

Slide 51 text

࠶Ϗϧυ͢Δ • docker image build ίϚϯυͰ࠶Ϗϧυ͠·͢ɻ • ࠶Ϗϧυ͢Δͱมߋ͕ͳ͍෦෼͸Ωϟογϡ͕ར༻͞Εɺ
 มߋ͞Ε͍ͯΔ෦෼͸ΠϝʔδΛ࡞Γ௚͍ͯ͠Δɻ
 
 
 
 EPDLFSJNBHFCVJMEUVCVOUVOPEFIFMMP ˡΩϟογϡ࠶ར༻ ˡΩϟογϡ࠶ར༻ ˡΠϝʔδ࠶࡞੒

Slide 52

Slide 52 text

ίϯςφΛ৽͘͠ىಈ͢Δ • ҎલͷίϯςφΛఀࢭɺ࡟আ͠·͢ɻ • ৽͍͠ΠϝʔδͰίϯςφΛىಈ͠·͢ɻ EPDLFSDPOUBJOFSSVOOBNFOPEFIFMMPa
 QEVCVOUVOPEFIFMMP EPDLFSDPOUBJOFSTUPQOPEFIFMMP EPDLFSDPOUBJOFSSNOPEFIFMMP

Slide 53

Slide 53 text

ϒϥ΢βͰ֬ೝ͢Δ • ϒϥ΢β͔Β http://localhost:49160/ ʹ
 ΞΫηεͯ͠τοϓը໘͕දࣔ͞ΕͨΒ
 ಈ࡞֬ೝ׬ྃͰ͢ɻ

Slide 54

Slide 54 text

docker-compose

Slide 55

Slide 55 text

docker-compose ͱ͸ • ෳ਺ͷίϯςφΛ·ͱΊͯ؅ཧ͢Δπʔϧɻ • ϑΝΠϧʹίϯςφͷߏ੒৘ใΛఆٛ͢Δͱɺ
 ಉҰͷϗετ্Ͱෳ਺ͷίϯςφΛ؅ཧͰ͖Δɻ • docker ίϚϯυͰ࢖༻͍ͯͨ͠ΦϓγϣϯΛ ϑΝΠϧʹهड़͢Δɻ

Slide 56

Slide 56 text

docker-compose ϑΝΠϧͷ֓ཁ • YAML ܗࣜͰ؅ཧ͢Δɻ • ҎԼΛఆٛ͢Δɻ • αʔϏεʢservicesʣ • ωοτϫʔΫʢnetworksʣ • ϘϦϡʔϜʢvolumesʣ • ϑΝΠϧͷઌ಄ʹ version Λࢦఆ͢Δɻ

Slide 57

Slide 57 text

docker-compose ϑΝΠϧͷ֓ཁ όʔδϣϯΛࢦఆ WFSTJPO αʔϏεΛఆٛ TFSWJDFT XFC CVJME QPSUT  OFUXPSLT XFC dӈʹଓ͘d dࠨͷଓ͖d EC JNBHFQPTUHSFT WPMVNFT ECEBUBWBSMJCQPTUHSFTRMEBUB OFUXPSLT XFC ωοτϫʔΫΛఆٛ OFUXPSLT XFC ϘϦϡʔϜΛఆٛ WPMVNFT ECEBUB

Slide 58

Slide 58 text

Πϝʔδͷࢦఆʢimageʣ • ϕʔεΠϝʔδΛࢦఆ͢Δͱ͖͸ image Λ
 ࢖༻͢Δɻ • λά໊Λলུ͢Δͱ latest ͕࢖༻͞ΕΔ • ࣮ࡍʹར༻͢Δ࣌͸ɺͲͷΑ͏ͳόʔδϣϯ͕
 ಈ࡞͍ͯ͠Δ͔൑அͰ͖ͳ͍ͷͰɺ
 latest ͸࢖༻͠ͳ͍ɻ

Slide 59

Slide 59 text

Ϗϧυʢbuildʣ • ϩʔΧϧʹ Dockerfile Λ࡞੒ͯ͠ɺ
 ͦΕΛϕʔεΠϝʔδʹࢦఆ͢Δͱ͖͸
 build Λ࢖༻͢Δɻ EPDLFSDPNQPTFZNM͕ଘࡏ͢ΔσΟϨΫτϦʹ %PDLFSpMF͕ଘࡏ͢Δ৔߹
 TFSWJDFT XFC CVJME

Slide 60

Slide 60 text

ίϚϯυͷࢦఆʢcommandʣ • ίϯςφͰಈ͔͢ίϚϯυ͸ɺcommand Ͱ
 ࢦఆ͢Δɻ DPNNBOEʹCJOCBTIΛࢦఆ͢Δྫ
 DPNNBOECJOCBTI

Slide 61

Slide 61 text

ίϯςφؒ௨৴ʢportsɾexposeʣ • ίϯςφ͕ϗετ OS ʹϙʔτΛެ։͢Δ৔߹͸ portsɺ ࿈ܞ͢Δίϯςφʹ͚ͩϙʔτΛެ։͢Δ৔߹͸
 expose Ͱࢦఆ͢Δɻ 
 
 QPSUT <ϗετ04ͷϙʔτ൪߸ίϯςφͷϙʔτ൪߸> ࿈ܞ͢ΔίϯςφʹͷΈϙʔτΛެ։͢Δ৔߹͸ɺFYQPTFΛࢦఆ͢Δ FYQPTF <ίϯςφͷϙʔτ൪߸> QPSUTɾFYQPTFΛࢦఆ͢Δྫ QPSUT  FYQPTF 

Slide 62

Slide 62 text

ґଘؔ܎ͷఆٛʢdepends_onʣ • ෳ਺ͷίϯςφͷґଘؔ܎Λఆٛ͢Δͱ͖͸ɺ
 depends_on Λࢦఆ͢Δɻ • depends_on ͸ίϯςφͷ
 ։࢝ॱংΛఆٛ͢Δ͚ͩͰɺ
 ίϯςφ಺ͷΞϓϦ͕ىಈ͢Δ·Ͱ
 ଴੍ͭޚΛ͠ͳ͍ͷͰɺ
 ΞϓϦଆͰରԠ͢Δඞཁ͕͋Δɻ 
 ECʹґଘͨ͠XFCίϯςφΛ
 ఆٛ͢Δྫ TFSWJDFT XFC CVJME EFQFOET@PO EC EC JNBHFQPTUHSFT

Slide 63

Slide 63 text

؀ڥม਺ͷࢦఆʢenvironmentʣ • ίϯςφ಺ͷ؀ڥม਺Λࢦఆ͢Δͱ͖͸ɺ environment Λࢦఆ͢Δɻ • ϋογϡܗࣜ·ͨ͸഑ྻܗࣜͰࢦఆ͢Δɻ ϋογϡܗࣜ FOWJSPONFOU 3"$,@&/7EFWFMPQNFOU 4)08USVF ഑ྻܗࣜ FOWJSPONFOU ɹ3"$,@&/7EFWFMPQNFOU ɹ4)08USVF

Slide 64

Slide 64 text

؀ڥม਺ͷࢦఆʢenv_fileʣ • ϑΝΠϧʹ؀ڥม਺Λఆٛͯ͠ɺ
 ͦͷϑΝΠϧΛಡΈࠐΉ͜ͱ΋Ͱ͖Δɻ ఆٛͨ͠FOWpMF
 3"$,@&/7EFWFMPQNFOU 4)08USVF FOWpMFΛͷಡΈࠐΈ FOW@pMFFOWpMF ෳ਺ͷFOWpMFΛಡΈࠐΉ͜ͱ΋Ͱ͖Δ FOW@pMF DPNNPOFOW BQQTXFCFOW

Slide 65

Slide 65 text

ίϯςφ৘ใʢcontainer_nameʣ • ίϯςφʹ໊લΛ͚ͭΔͱ͖ʹ͸ɺcontainer_name Λ
 ࢦఆ͢Δɻ • σϑΥϧτͩͱ{σΟϨΫτϦ໊}_{αʔϏε໊}_{࿈൪}Ͱ
 ੜ੒͞ΕΔɻ • ίϯςφ໊͸ҰҙͳͷͰɺෳ਺ͷίϯςφʹεέʔϧ
 Ͱ͖ͳ͘ͳΔɻ
 ίϯςφ໊Λࢦఆ͢Δྫ DPOUBJOFS@OBNFXFC

Slide 66

Slide 66 text

σʔλ؅ཧʢvolumesʣ • ίϯςφʹϘϦϡʔϜΛϚ΢ϯτ͢Δ࣌͸ volumes Λࢦఆ͢Δɻ WPMVNFT ϘϦϡʔϜΛ࡞੒͢Δྫ WBSMJCNZTRM ϗετ04ͰϚ΢ϯτύεΛࢦఆ͢Δྫ ϗετ04ͷσΟϨΫτϦύείϯςφͷσΟϨΫτϦύε DBDIFUNQDBDIF ಡΈऔΓઐ༻ͰϚ΢ϯτ͢Δྫ dDPOpHTFUDDPOpHTSP

Slide 67

Slide 67 text

ෳ਺ίϯςφͷӡ༻

Slide 68

Slide 68 text

ίϯςφͷੜ੒ʢupʣ • ෳ਺ίϯςφͷੜ੒ɾىಈΛߦ͏ͱ͖͸
 docker-compose up ίϚϯυΛ࢖༻͢Δɻ • Πϝʔδ͕ଘࡏ͠ͳ͍৔߹΍Ϗϧυ͕͞Ε͍ͯͳ͍৔߹͸ ىಈ࣌ʹߦ͏ɻ
 EόοΫάϥ΢ϯυͰ࣮ߦ͢Δɻ CVJME%PDLFSpMFΛϏϧυ͢Δɻ EPDLFSDPNQPTFVQ<Φϓγϣϯ><αʔϏε໊> όοΫάϥ΢ϯυͰىಈ͢Δྫ EPDLFSDPNQPTFVQE

Slide 69

Slide 69 text

ίϯςφͷ֬ೝʢpsʣ • ෳ਺ͷίϯςφͷҰཡΛදࣔ͢Δʹ͸
 docker-compose ps ίϚϯυΛ࢖༻͢Δɻ • docker container ls Ͱ΋දࣔͰ͖Δɻ 
 
 
 
 ෳ਺ͷίϯςφΛදࣔ͢Δྫ EPDLFSDPNQPTFQT EPDLFSDPNQPTFQT<Φϓγϣϯ><αʔϏε໊>

Slide 70

Slide 70 text

ίϯςφͷ֬ೝʢlogsʣ • docker-compose Ͱ؅ཧ͢ΔίϯςφͷϩάΛ
 ֬ೝ͢Δʹ͸ɺdocker-compose logs ίϚϯυΛ
 ࢖༻͢Δɻ • αʔϏε໊Λࢦఆ͢Ε͹αʔϏε໊ͷίϯςφ͚ͩදࣔͰ͖Δɻ 
 GGPMMPXϩάग़ྗΛଓ͚Δɻ UBJMϩάͷ຤ඌΛදࣔ͢Δɻ EPDLFSDPNQPTFMPHT<Φϓγϣϯ><αʔϏε໊> XFCαʔϏεͷίϯςφͷϩάΛදࣔ͢Δྫ EPDLFSDPNQPTFMPHTXFC

Slide 71

Slide 71 text

ίϚϯυ࣮ߦʢrunʣ • ೚ҙͷίϚϯυΛ࣮ߦͯ͠ίϯςφΛىಈ͍ͨ͠
 ͱ͖ʹ docker-compose run ίϚϯυΛ࢖༻͢Δɻ 

 EPDLFSDPNQPTFSVO<Φϓγϣϯ>αʔϏε໊<ίϚϯυ> EόοΫάϥ΢ϯυͰ࣮ߦ͢Δɻ XFCαʔϏεʹCBTIΛ࣮ߦͯ͠ىಈ͢Δྫ EPDLFSDPNQPTFSVOXFCCBTI

Slide 72

Slide 72 text

ίϚϯυ࣮ߦʢexecʣ • docker container exec ͱಉ౳ɻ
 ىಈ͍ͯ͠ΔίϯςφʹίϚϯυΛ࣮ߦ͢Δɻ EPDLFSDPNQPTFFYFD<Φϓγϣϯ>αʔϏε໊<ίϚϯυ> EόοΫάϥ΢ϯυͰ࣮ߦ͢Δɻ JOEFYJOEFYεέʔϧ͍ͯ͠Δ৔߹ʹࢦఆ͢ΔɻσϑΥϧτ͸ɻ XFCαʔϏεʹCBTIΛ࣮ߦͯ͠ىಈ͢Δྫ EPDLFSDPNQPTFFYFDXFCCBTI

Slide 73

Slide 73 text

ෳ਺ίϯςφͷىಈɺఀࢭɺ࠶ىಈ
 ʢstartɾstopɾrestartʣ • ͦΕͧΕɺෳ਺ͷίϯςφΛҰׅͰ
 ىಈɾఀࢭɺ࠶ىಈͰ͖Δɻ • ಛఆͷαʔϏε໊ΛҾ਺ʹ౉͢ͱ
 ͦͷίϯςφͷΈૢ࡞Ͱ͖Δɻ EPDLFSDPNQPTFTUBSUTUPQSFTUBSU<αʔϏε໊>

Slide 74

Slide 74 text

ෳ਺ίϯςφͷ࡟আʢrmʣ • ෳ਺ͷίϯςφΛ࡟আ͢Δͱ͖͸ɺ
 docker-compose rm ίϚϯυΛ࢖༻͢Δɻ • ಛఆͷαʔϏε໊ΛҾ਺ʹ౉͢ͱͦͷίϯςφͷΈ
 ࡟আͰ͖Δɻ 
 EPDLFSDPNQPTFSN<αʔϏε໊> GGPSDF֬ೝͤͣ࡟আ͢Δɻ XFCαʔϏεͷίϯςφΛ࡟আ͢Δྫ EPDLFSDPNQPTFSNXFC

Slide 75

Slide 75 text

ෳ਺ϦιʔεͷҰׅ࡟আʢdownʣ • docker-compose up Ͱੜ੒ͨ͠ίϯςφ΍ΠϝʔδͳͲͷ
 ϦιʔεΛ·ͱΊͯ࡟আ͢Δͱ͖ʹ docker-comopse down
 ίϚϯυΛ࢖༻͢Δɻ • ࣮ߦதͷίϯςφΛఀࢭ͠ɺΠϝʔδɺωοτϫʔΫɺ
 ϘϦϡʔϜΛ࡟আ͢Δɻ 
 EPDLFSDPNQPTFEPXO<Φϓγϣϯ> SNJBMMશͯͷΠϝʔδΛ࡟আ ΠϝʔδؚΊશͯΛ࡟আ͢Δྫ EPDLFSDPNQPTFEPXOSNJBMM

Slide 76

Slide 76 text

docker-compose ϋϯζΦϯ

Slide 77

Slide 77 text

Python ͷ
 DjangoϑϨʔϜϫʔΫͰ
 docker-compose Λ࡞੒͠Α͏

Slide 78

Slide 78 text

Dockerfile Λ࡞੒͢Δ • ೚ҙͷσΟϨΫτϦΛ࡞੒͠ɺσΟϨΫτϦʹ
 ೖΓ·͢ɻ • σΟϨΫτϦ಺Ͱ
 ӈهͷ Dockerfile Λ
 ࡞੒͠·͢ɻ
 NLEJSEKBOHPEPDLFSDPNQPTF DEEKBOHPEPDLFSDPNQPTF '30.QZUIPO &/71:5)0/6/#6''&3&% 803,%*3DPEF $01:SFRVJSFNFOUTUYUDPEF 36/QJQJOTUBMMSSFRVJSFNFOUTUYU $01:DPEF

Slide 79

Slide 79 text

requirements.txt Λ࡞੒͢Δ • ҎԼͷ requirements.txt Λ࡞੒͠·͢ɻ %KBOHP QTZDPQH

Slide 80

Slide 80 text

docker-compose.yml • Լهͷ docker-compose.yml Λ࡞੒͠·͢ɻ WFSTJPO TFSWJDFT EC JNBHFQPTUHSFT XFC CVJME DPNNBOEQZUIPONBOBHFQZSVOTFSWFS WPMVNFT DPEF QPSUT  EFQFOET@PO EC

Slide 81

Slide 81 text

DjangoϓϩδΣΫτΛ࡞੒͢Δ • ҎԼͷ docker-compose run ίϚϯυͰ
 Django ϓϩδΣΫτΛ࡞੒͠·͢ɻ • ϑΝΠϧҰཡΛදࣔ͢Δͱ Django ϓϩδΣΫτ͕
 ੜ੒͞Ε͍ͯΔ͜ͱ͕෼͔Δɻ
 
 
 
 EPDLFSDPNQPTFSVOXFCa EKBOHPBENJOQZTUBSUQSPKFDUDPNQPTFFYBNQMF MTM

Slide 82

Slide 82 text

σʔλϕʔεʹ઀ଓ͢Δ • composeexample/settings.py ϑΝΠϧͷ
 DATABASES ͷઃఆΛҎԼͷΑ͏ʹมߋ͠·͢ɻ %"5"#"4&4\ EFGBVMU\ &/(*/&EKBOHPECCBDLFOETQPTUHSFTRM  /".&QPTUHSFT  64&3QPTUHSFT  )045EC  1035  ^ ^

Slide 83

Slide 83 text

docker-compose Λىಈͯ͠
 ϒϥ΢βͰ֬ೝ͢Δ • docker-compose up ίϚϯυͰىಈ͠·͢ɻ • ϒϥ΢β͔Β http://localhost:8000/ ʹΞΫηεͯ͠ τοϓը໘͕දࣔ͞ΕͨΒಈ࡞֬ೝ׬ྃͰ͢ɻ
 
 EPDLFSDPNQPTFVQE

Slide 84

Slide 84 text

͍͞͝ʹ

Slide 85

Slide 85 text

Dockerfile Λॻ͘͜ͱͰ
 ඞཁͳϦιʔεΛఆٛͰ͖Δ

Slide 86

Slide 86 text

docker-compose Λ࢖͑͹
 ෳ਺ͷίϯςφΛѻ͑ɺ
 ίϚϯυ΋γϯϓϧʹىಈͰ͖Δ

Slide 87

Slide 87 text

·ͱΊ

Slide 88

Slide 88 text

·ͱΊ • Dockerfile ͰඞཁͳϦιʔεΛఆٛͰ͖Δɻ • docker-compose Ͱෳ਺ͷίϯςφΛ
 γϯϓϧͳίϚϯυͰѻ͑Δɻ • Dockerfile ͷ࡞੒ํ๏Λֶͼɺ
 ࡞੒ɺϏϧυͯ͠ಈ͔ͯ͠Έͨɻ • docker-compose ͷ࡞੒ํ๏Λֶͼɺ
 ࡞੒ɺϏϧυͯ͠ಈ͔ͯ͠Έͨɻ

Slide 89

Slide 89 text

جૅฤ2 ͓ΘΓ

Slide 90

Slide 90 text

Appendix

Slide 91

Slide 91 text

ࢀߟจݙ • ϓϩάϥϚͷͨΊͷDockerڭՊॻ ୈ2൛ Πϯϑϥͷجૅ஌ࣝ&ίʔυʹΑΔ؀ڥߏஙͷࣗಈԽ • ίϯςφɾϕʔεɾΦʔέετϨʔγϣϯ Docker/KubernetesͰ࡞ΔΫϥ΢υ࣌୅ͷγεςϜج ൫ • https://docs.docker.com/ • https://qiita.com/pottava/items/452bf80e334bc1fee69a • https://qiita.com/dskshmz/items/c01f29f8398cc7f5c396 • https://qiita.com/yugui/items/517480f4383b893e092e • https://qiita.com/yugui/items/517480f4383b893e092e • https://nodejs.org/en/docs/guides/nodejs-docker-webapp/ • http://docs.docker.jp/engine/examples/nodejs_web_app.html