Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Docker ハンズオン 基礎編2 / Docker Handson Basic 2
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
takasp
August 24, 2018
110
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Docker ハンズオン 基礎編2 / Docker Handson Basic 2
takasp
August 24, 2018
More Decks by takasp
See All by takasp
監視のための統計入門 / Introduction to Statistics for Monitoring
takasp
0
150
Google App Engineを始めよう / Getting Started with Google App Engine
takasp
0
69
Git中級者になるためのrebase入門 / Introduction to rebase to become an intermediate Git user
takasp
0
82
GitHubで始めるdotfiles管理 / Getting started with GitHub for dotfiles management
takasp
0
66
第三回 Datadog 共有会 / Datadog Sharing 3rd
takasp
0
120
第二回 Datadog 共有会 / Datadog Sharing 2nd
takasp
0
94
Datadog 共有会 / Datadog Sharing
takasp
1
75
Git ハンズオン Part 1 / Git Handson Part 1
takasp
0
82
Docker ハンズオン 基礎編1 / Docker Handson Basic 1
takasp
1
200
Featured
See All Featured
Building Adaptive Systems
keathley
44
3.1k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
270
How to make the Groovebox
asonas
2
2.2k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
600
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
320
So, you think you're a good person
axbom
PRO
2
2.1k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.6k
Leo the Paperboy
mayatellez
7
1.8k
Transcript
Docker ϋϯζΦϯ جૅฤ2 # גࣜձࣾΤΞʔΫϩʔθοτ ࣾษڧձ Vol.2 @takasp 20188݄24
͢͜ͱ • Dockerfile ͷॻ͖ํ • docker-compose ͷॻ͖ํ • Dockerfile ͱ
docker-compose Λ ͬͨϋϯζΦϯ
Docker ͷ֓ཁίϚϯυ લճࢿྉΛࢀর͍ͯͩ͘͠͞ https://speakerdeck.com/takasp/docker-handson-basic-1
Dockerfile
Dockerfile ͱ • ϕʔεͱͳΔΠϝʔδɺίϯςφͰߦ͏ૢ࡞ɺ ڥมͳͲͷઃఆɺίϯςφͰಈ࡞͢Δ ϓϩηεΛؚΜͩߏใΛఆٛ͢ΔϑΝΠϧɻ • docker image build
ίϚϯυͰ Dockerfile ΛݩʹΠϝʔδΛ࡞͢Δɻ
Dockerfile ͷ࡞ • FROM ໋ྩ • λά໊Λলུ͢Δͱ latest ͕༻͞ΕΔɻ •
࣮ࡍʹར༻͢Δ࣌ɺͲͷΑ͏ͳόʔδϣϯ͕ ಈ࡞͍ͯ͠Δ͔அͰ͖ͳ͍ͷͰɺlatest ༻͠ͳ͍ɻ '30.Πϝʔδ໊<λά໊> ϕʔεΠϝʔδྫ '30.VCVOUV
Dockerfile Λ࡞ͯ͠ Ϗϧυͯ͠ΈΑ͏
Dockerfile Λ࡞͠Α͏ • ҙͷσΟϨΫτϦΛ࡞͠ɺ σΟϨΫτϦʹೖΓ·͢ɻ • ҎԼͷΑ͏ͳ Dockerfile Λ࡞͠·͢ɻ NLEJSEPDLFSTBNQMF
DEEPDLFSTBNQMF
Dockerfile ΛϏϧυͯ͠ΈΑ͏ • sample:1.0 ͱ͍͏໊લͰࠓͷσΟϨΫτϦʹ ͋Δ Dockerfile ΛϏϧυ͠·͢ɻ • docker
image ls ίϚϯυͰ֬ೝ͢Δͱ ϕʔεΠϝʔδͷ ubuntu:18.04 ͱ sample:1.0 ͷ Πϝʔδ͕Ͱ͖͍ͯΔ͜ͱ͕͔Δɻ EPDLFSJNBHFCVJMEUTBNQMF
Ϗϧυ
Dockerfile ͔ΒΠϝʔδ࡞ • docker image build ίϚϯυ • ҎԼͷΑ͏ͳ DockerfileΛ࡞ͯ͠Ϗϧυ͢Δɻ
EPDLFSJNBHFCVJMEUΠϝʔδ໊<λά໊><%PDLFSpMFͷॴ> ϕʔεΠϝʔδͷઃఆ '30.VCVOUV
Dockerfile ͔ΒΠϝʔδ࡞ • /home/user/sample ʹ͋Δ Dockerfile Λ sample:1.0 ͱ͍͏໊લͰϏϧυ͢Δྫɻ EPDLFSJNBHFCVJMEίϚϯυͷ࣮ߦྫ
EPDLFSJNBHFCVJMEUTBNQMFIPNFVTFSTBNQMF
ΠϝʔδͷϨΠϠʔߏ • Dockerfile ͷΠϝʔδΛ࡞͢Δͱɺ ໋ྩ͝ͱʹΠϝʔδΛ࡞͢Δɻ • ࡞͞ΕͨෳͷΠϝʔδϨΠϠʔߏʹͳΔɻ • ࡞ͨ͠ΠϝʔδଞͷΠϝʔδͱڞ༗͢Δɻ ΠϝʔδΛੵΈॏͶͯσΟεΫޮΛߴΊ͍ͯΔɻ
ΠϝʔδͷϨΠϠʔߏྫ • ҎԼͷΑ͏ͳ Dockerfile Λ࡞ͯ͠ ΠϝʔδΛ࡞ͨ͠߹ɻ
• ҎԼͷίϚϯυͰϏϧυ͢Δͱ໋ྩ͝ͱʹ Πϝʔδ͕ੜ͞Ε͍ͯΔ͜ͱ͕͔Δɻ EPDLFSJNBHFCVJMEUXFC ˡ ˡ ˡ ˡ
• ໋ྩ͝ͱʹΠϝʔδ͕ੵΈॏͳΔɻ 4UFQ '30.໋ྩ 4UFQ '30.໋ྩ 4UFQ 36/໋ྩ 4UFQ '30.໋ྩ
4UFQ 36/໋ྩ 4UFQ $01:໋ྩ 4UFQ $.%໋ྩ 4UFQ '30.໋ྩ 4UFQ 36/໋ྩ 4UFQ $01:໋ྩ
ίϚϯυɾϓϩηεͷ࣮ߦ
RUN ໋ྩ • ϕʔεΠϝʔδʹϛυϧΣΞͷΠϯετʔϧ ઃఆɺڥߏஙͷίϚϯυΛ࣮ߦ͢ΔͳͲɺ ΞϓϦΛ͏ͷʹඞཁͳίϚϯυΛ࣮ߦ͢Δ ͱ͖ʹ༻͢Δɻ 36/໋ྩΛར༻ͨ͠OHJOYͷΠϯετʔϧྫ 36/BQUHFUJOTUBMMZOHJOY
CMD ໋ྩ • ࡞ͨ͠ΠϝʔδΛىಈ͢Δ࣌ʹ࣮ߦ͍ͨ͠ ίϚϯυΛ࣮ߦ͢Δͱ͖ʹ༻͢Δɻ • Ұ͚ͭͩఆٛͰ͖Δɻෳࢦఆͨ͠߹ɺ ࠷ޙͷ CMD ͕༗ޮʹͳΔɻ
• docker container run ίϚϯυ࣮ߦ࣌ʹ ҾΛ͞Βʹࢦఆ͢ΔͱҾ͕༏ઌ͞ΕΔɻ
CMD ໋ྩͷهड़ํࣜ • Exec ܗࣜ • Shell ܗࣜ • ENTRYPOINT
໋ྩͷύϥϝʔλʔͱͯ͠
CMD ໋ྩͷ Exec ܗࣜ • γΣϧΛհ࣮ͣ͞ߦ͢Δɻ ͕ͨͬͯ͠ $HOME ͷΑ͏ͳڥมΛࢦఆͰ͖ͳ͍ɻ •
JSON ྻͰࢦఆ͢Δɻ • ผͷγΣϧΛ͍͍ͨͱ͖ɺγΣϧͷύεΛࢦఆͯ͠ɺ ࣮ߦ͍ͨ͠ίϚϯυΛࢦఆ͢Δɻ • ެࣜͰ CMD ໋ྩ Exec ܗ͕ࣜ·͍͠ͱ͞Ε͍ͯΔɻ
CMD ໋ྩͷ Exec ܗࣜ OHJOYͷ$.%໋ྩͷ&YFDܗࣜͷྫ $.%<OHJOY H EBFNPOP⒎> &YFDܗࣜͰผͷγΣϧΛ࣮ߦ͢Δྫ $.%<CJOCBTI
D OHJOY H EBFNPOP⒎>
CMD ໋ྩͷ Shell ܗࣜ • /bin/sh -c ΛͬͯίϚϯυΛ࣮ߦͨ͠ͱ͖ͱ ಉ͡ڍಈʹͳΔɻ •
σϑΥϧτͷγΣϧΛมߋ͍ͨ͠ͱ͖ɺ SHELL ໋ྩΛ͏ɻ OHJOYͷ$.%໋ྩͷ4IFMMܗࣜͷྫ $.%OHJOYH`EBFNPOP⒎`
ENTRYPOINT ໋ྩ • ENTRYPOINT ໋ྩඞ࣮ͣߦ͞ΕΔ͕ɺ ࣮ߦ࣌ʹίϚϯυҾΛࢦఆ͍ͨ͠ͱ͖ʹ CMD ໋ྩͱΈ߹Θͤͯ༻͢Δɻ • ENTRYPOINT
໋ྩͰ࣮ߦ͍ͨ͠ίϚϯυɺ CMD ໋ྩͰσϑΥϧτͷҾΛఆ͓͖ٛͯ͠ɺ docker container run ίϚϯυͰڍಈΛม͍͑ͨ߹ʹར༻͢Δɻ • Ұ͚ͭͩఆٛͰ͖Δɻ ෳࢦఆͨ͠߹ɺ࠷ޙͷ ENTRYPOINT ͕༗ޮʹͳΔɻ
ENTRYPOINT ໋ྩ • ENTRYPOINT ໋ྩͱ CMD ໋ྩΛ Έ߹Θͤͯ Dockerfile Λ࡞ͨ͠ྫɻ
ENTRYPOINT ໋ྩ QJOHίϚϯυΛճXXXHPPHMFDPNʹ࣮ߦ͢Δ߹ EPDLFSDPOUBJOFSSVOTBNQMF QJOHίϚϯυΛճXXXZBIPPDPNʹ࣮ߦ͢Δ߹ EPDLFSDPOUBJOFSSVOTBNQMFXXXZBIPPDPN
ڥɾωοτϫʔΫͷઃఆ
ENV ໋ྩ • ڥมΛઃఆ͍ͨ͠ͱ͖ʹ ENV ໋ྩΛ ༻͢Δɻ &/7໋ྩͷྫ &/7)045IPTU &/7/".&EPDLFSNPCZ
&/7500-,VCFSOFUFT"QBDIF.FTPT%PDLFS4XBSN &/71035QPSU &/7<LFZ><WBMVF> PS &/7<LFZ><WBMVF>
WORKDIR ໋ྩ • ࡞ۀ༻σΟϨΫτϦΛࢦఆ͢Δɻ • ͠ࢦఆͨ͠σΟϨΫτϦ͕ଘࡏ͠ͳ͚Ε࡞͢Δɻ • cd ίϚϯυ༻͠ͳ͍ɻ 803,%*3໋ྩͷྫ
803,%*3pSTU 803,%*3TFDPOE 803,%*3<࡞ۀσΟϨΫτϦͷύε>
USER ໋ྩ • RUN ໋ྩ CMD ໋ྩΛ࣮ߦ͢ΔϢʔβʔΛࢦఆ͢Δɻ • USER ໋ྩͰࢦఆ͢ΔϢʔβʔ͋Β͔͡Ί
RUN ໋ྩͰ ࡞͞Ε͍ͯΔඞཁ͕͋Δɻ • ϕʔεΠϝʔδͷσϑΥϧτ root ϢʔβʔͰ͋Δ͜ͱ͕ଟ͘ɺ ϓϩηεͷ࣮ߦʹ root ݖݶ͕ඞཁͰͳ͍߹ɺ USER ΛΓସ͑ͨํ͕ྑ͍ɻ 64&3<Ϣʔβʔ໊6*%>
EXPOSE ໋ྩ • ެ։͢Δϙʔτ൪߸Λࢦఆ͢Δͱ͖ʹ ༻͢Δɻ • ίϯςφ͕ listen ͢ΔϙʔτΛΒͤΔɻ &9104&໋ྩͷྫ
&9104& &9104&<ϙʔτ൪߸>
ϑΝΠϧͷઃఆ
ADD ໋ྩ • ϗετ্ͷϑΝΠϧσΟϨΫτϦΛՃ͢Δ ͱ͖ʹ༻͢Δɻ • tar.gz ͳͲͷѹॖϑΝΠϧΛల։͢Δػೳ࣋ͭɻ "%%<ϗετ04ͷϑΝΠϧύε><ΠϝʔδͷϑΝΠϧύε> "%%໋ྩͷྫ
"%%JOEFYIUNMEJS
COPY ໋ྩ • ADD ໋ྩͱࣅ͍ͯΔ͕ɺCOPY ໋ྩ ίϐʔ͢Δػೳ͚ͩ࣋ͭɻ • ίϐʔ͢Δॲཧ͚͕ͩ໌ࣔతͰ͋Δͱ͖ʹ ༻͢Δɻ
$01:<ϗετ04ͷϑΝΠϧύε><ΠϝʔδͷϑΝΠϧύε>
VOLUME ໋ྩ • ϘϦϡʔϜΛׂΓͯΔͱ͖ʹ༻͢Δɻ • ࢦఆ໊ͨ͠લͷϚϯτϙΠϯτΛ࡞͠ɺ ϗετ OS ͦͷଞͷίϯςφ͔Β֎෦ʹ Ϛϯτ͢Δɻ
70-6.&<ϚϯτϙΠϯτ>
Dockerfile ͷ ϕετϓϥΫςΟεΛҰ෦հ
ϨΠϠʔΛ࠷খݶʹอͭ • RUNɺADDɺCOPY ໋ྩϨΠϠʔΛ࡞͠ɺ ϏϧυͷαΠζΛ૿͢ͷͰ ՄೳͳݶΓҰͭʹ·ͱΊΔΑ͏ʹ͢Δɻ • v17.05 ͔ΒϚϧνεςʔδϏϧυʹ ରԠ͍ͯ͠ΔͷͰɺར༻Λݕ౼͢Δɻ
RUN ໋ྩ·ͱΊΔ • ϨΠϠʔΛ૿͞ͳ͍ͨΊʹ RUN ໋ྩΛ·ͱΊΔɻ • ෳͷҾΛӳࣈͰฒସ͑Δͱྑ͍ɻ • վߦ
\ ΛೖΕΔͱՄಡੑ͕ߴ͘ɺอक͍͢͠ɻ 36/໋ྩΛ·ͱΊͨྫ 36/BQUHFUVQEBUFBQUHFUJOTUBMMZa C[Sa DWTa HJUa NFSDVSJBMa TVCWFSTJPO
ϏϧυΩϟογϡΛ༗ޮ׆༻͢Δ • ΠϝʔδΛϏϧυ͢Δࡍʹ࠶ར༻Ͱ͖ΔΠϝʔδͷΩϟογϡ͕ଘࡏ͢Δ͔ ֬ೝ͢Δɻ • جຊϧʔϧ • Πϝʔδ͔Βੜͨ͠ࢠΠϝʔδͱൺֱ͠ɺಉ໋͡ྩɺίϚϯυ͕ ༻͞Ε͍ͯΔ͔ൺֱ͢Δɻ •
ADD ͱ COPY ໋ྩɺϑΝΠϧ͝ͱʹνΣοΫαϜ͕ܭࢉ͞Εɺ ΩϟογϡͷνΣοΫαϜΛൺֱ͢Δɻ • ίϯςφͷϑΝΠϧΛνΣοΫ͠ͳ͍ͷͰɺ ྫ͑ɺRUN apt-get -y update ίϚϯυͷΈ͕࣮ߦ͞Εͨ߹ɺ ίϚϯυจࣈྻࣗମΛൺֱ͢ΔͷͰɺΩϟογϡΛར༻ͯ͠͠·͏ɻ
ϏϧυΩϟογϡͷ༗ޮ׆༻ྫ • ѱ͍ྫɺҰͭͰϩʔΧϧͷϑΝΠϧʹมߋ͕͋Δ࣌Ͱɺ ιʔεͷίϐʔʢ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
FROM ໋ྩ • ެࣜϦϙδτϦΛϕʔεΠϝʔδͱͯ͠༻͢Δɻ • alpine ͳͲখ͍͞Πϝʔδͷ༻Λݕ౼͢Δɻ • ubuntu:latest ͱ
alpine:latest ͷൺֱɻ
ͦͷଞ • RUN ໋ྩ࣮ߦ࣌ͷ࠷ॳʹ set -eux Λ༩͢Δɻ • -e Τϥʔ࣌ʹଈ࠲ʹऴྃ͠ɺ࣮ߦ༰͕දࣔ͞ΕΔɻ
• -x ࣮ߦͨ͠ίϚϯυΛඪ४ग़ྗʹදࣔ͢Δɻ • -u ະఆٛͷม͕ࢀর͞Εͨͱ͖ʹऴྃ͢Δɻ • ෆඞཁͳύοέʔδΠϯετʔϧ͠ͳ͍ɻ • ෳࡶ͞ɺґଘؔɺϑΝΠϧαΠζɺϏϧυ࣌ؒΛݮΒͨ͢Ίɻ • .dockerignore ϑΝΠϧΛར༻͢Δɻ • Ϗϧυ࣌ʹෆඞཁͳϑΝΠϧΛআ֎͢Δɻ
Dockerfile ϋϯζΦϯ
Node.js Ͱ Dockerfile Λ ࡞͠Α͏
package.json Λ࡞͢Δ • ҙͷσΟϨΫτϦΛ࡞͠ɺσΟϨΫτϦʹ ೖΓ·͢ɻ • σΟϨΫτϦͰӈهͷ package.jsonΛ࡞͠·͢ɻ NLEJSOPEFKTEPDLFS
DEOPEFKTEPDLFS \ OBNFEPDLFSOPEFKTIFMMP WFSTJPO EFTDSJQUJPO BVUIPS MJDFOTF*4$ EFQFOEFODJFT\ FYQSFTT ^ ^
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
Dockerfile Λ࡞͢Δ • ӈهͷ Dockerfile Λ ࡞͠·͢ɻ '30.VCVOUV 803,%*3TSD /PEFKTͱOQNΛΠϯετʔϧ
36/BQUHFUVQEBUFBQUHFUJOTUBMMZa OPEFKTa OQN OQNJOTUBMM $01:QBDLBHFKTPOTSDQBDLBHFKTPO 36/OQNJOTUBMMQSPEVDUJPO ιʔεΛίϐʔ $01:TSD &9104& $.%<OPEF TSDJOEFYKT>
Ϗϧυ͢Δ • docker image build ίϚϯυͰ Ϗϧυ͠·͢ɻ • docker container
run ίϚϯυͰىಈ͠·͢ɻ EPDLFSJNBHFCVJMEUVCVOUVOPEFIFMMP EPDLFSDPOUBJOFSSVOOBNFOPEFIFMMPa QEVCVOUVOPEFIFMMP
ϒϥβͰ֬ೝ͢Δ • ϒϥβ͔Β http://localhost:49160/ ʹ ΞΫηεͯ͠τοϓը໘͕දࣔ͞ΕͨΒ ಈ࡞֬ೝྃͰ͢ɻ
index.js Λमਖ਼͢Δ • index.js ͷ Hello world Λ Hello docker
ʹ ॻ͖͑·͢ɻ "QQ DPOTUBQQFYQSFTT BQQHFU SFR SFT \ SFTTFOE )FMMPEPDLFSaO XPSMEΛEPDLFSʹॻ͖͑Δɻ ^
࠶Ϗϧυ͢Δ • docker image build ίϚϯυͰ࠶Ϗϧυ͠·͢ɻ • ࠶Ϗϧυ͢Δͱมߋ͕ͳ͍෦Ωϟογϡ͕ར༻͞Εɺ มߋ͞Ε͍ͯΔ෦ΠϝʔδΛ࡞Γ͍ͯ͠Δɻ
EPDLFSJNBHFCVJMEUVCVOUVOPEFIFMMP ˡΩϟογϡ࠶ར༻ ˡΩϟογϡ࠶ར༻ ˡΠϝʔδ࠶࡞
ίϯςφΛ৽͘͠ىಈ͢Δ • ҎલͷίϯςφΛఀࢭɺআ͠·͢ɻ • ৽͍͠ΠϝʔδͰίϯςφΛىಈ͠·͢ɻ EPDLFSDPOUBJOFSSVOOBNFOPEFIFMMPa QEVCVOUVOPEFIFMMP EPDLFSDPOUBJOFSTUPQOPEFIFMMP EPDLFSDPOUBJOFSSNOPEFIFMMP
ϒϥβͰ֬ೝ͢Δ • ϒϥβ͔Β http://localhost:49160/ ʹ ΞΫηεͯ͠τοϓը໘͕දࣔ͞ΕͨΒ ಈ࡞֬ೝྃͰ͢ɻ
docker-compose
docker-compose ͱ • ෳͷίϯςφΛ·ͱΊͯཧ͢Δπʔϧɻ • ϑΝΠϧʹίϯςφͷߏใΛఆٛ͢Δͱɺ ಉҰͷϗετ্ͰෳͷίϯςφΛཧͰ͖Δɻ • docker ίϚϯυͰ༻͍ͯͨ͠ΦϓγϣϯΛ
ϑΝΠϧʹهड़͢Δɻ
docker-compose ϑΝΠϧͷ֓ཁ • YAML ܗࣜͰཧ͢Δɻ • ҎԼΛఆٛ͢Δɻ • αʔϏεʢservicesʣ •
ωοτϫʔΫʢnetworksʣ • ϘϦϡʔϜʢvolumesʣ • ϑΝΠϧͷઌ಄ʹ version Λࢦఆ͢Δɻ
docker-compose ϑΝΠϧͷ֓ཁ όʔδϣϯΛࢦఆ WFSTJPO αʔϏεΛఆٛ TFSWJDFT XFC CVJME QPSUT
OFUXPSLT XFC dӈʹଓ͘d dࠨͷଓ͖d EC JNBHFQPTUHSFT WPMVNFT ECEBUBWBSMJCQPTUHSFTRMEBUB OFUXPSLT XFC ωοτϫʔΫΛఆٛ OFUXPSLT XFC ϘϦϡʔϜΛఆٛ WPMVNFT ECEBUB
Πϝʔδͷࢦఆʢimageʣ • ϕʔεΠϝʔδΛࢦఆ͢Δͱ͖ image Λ ༻͢Δɻ • λά໊Λলུ͢Δͱ latest ͕༻͞ΕΔ
• ࣮ࡍʹར༻͢Δ࣌ɺͲͷΑ͏ͳόʔδϣϯ͕ ಈ࡞͍ͯ͠Δ͔அͰ͖ͳ͍ͷͰɺ latest ༻͠ͳ͍ɻ
Ϗϧυʢbuildʣ • ϩʔΧϧʹ Dockerfile Λ࡞ͯ͠ɺ ͦΕΛϕʔεΠϝʔδʹࢦఆ͢Δͱ͖ build Λ༻͢Δɻ EPDLFSDPNQPTFZNM͕ଘࡏ͢ΔσΟϨΫτϦʹ %PDLFSpMF͕ଘࡏ͢Δ߹
TFSWJDFT XFC CVJME
ίϚϯυͷࢦఆʢcommandʣ • ίϯςφͰಈ͔͢ίϚϯυɺcommand Ͱ ࢦఆ͢Δɻ DPNNBOEʹCJOCBTIΛࢦఆ͢Δྫ DPNNBOECJOCBTI
ίϯςφؒ௨৴ʢportsɾexposeʣ • ίϯςφ͕ϗετ OS ʹϙʔτΛެ։͢Δ߹ portsɺ ࿈ܞ͢Δίϯςφʹ͚ͩϙʔτΛެ։͢Δ߹ expose Ͱࢦఆ͢Δɻ
QPSUT <ϗετ04ͷϙʔτ൪߸ίϯςφͷϙʔτ൪߸> ࿈ܞ͢ΔίϯςφʹͷΈϙʔτΛެ։͢Δ߹ɺFYQPTFΛࢦఆ͢Δ FYQPTF <ίϯςφͷϙʔτ൪߸> QPSUTɾFYQPTFΛࢦఆ͢Δྫ QPSUT FYQPTF
ґଘؔͷఆٛʢdepends_onʣ • ෳͷίϯςφͷґଘؔΛఆٛ͢Δͱ͖ɺ depends_on Λࢦఆ͢Δɻ • depends_on ίϯςφͷ ։࢝ॱংΛఆٛ͢Δ͚ͩͰɺ ίϯςφͷΞϓϦ͕ىಈ͢Δ·Ͱ
੍ͭޚΛ͠ͳ͍ͷͰɺ ΞϓϦଆͰରԠ͢Δඞཁ͕͋Δɻ ECʹґଘͨ͠XFCίϯςφΛ ఆٛ͢Δྫ TFSWJDFT XFC CVJME EFQFOET@PO EC EC JNBHFQPTUHSFT
ڥมͷࢦఆʢenvironmentʣ • ίϯςφͷڥมΛࢦఆ͢Δͱ͖ɺ environment Λࢦఆ͢Δɻ • ϋογϡܗࣜ·ͨྻܗࣜͰࢦఆ͢Δɻ ϋογϡܗࣜ FOWJSPONFOU 3"$,@&/7EFWFMPQNFOU
4)08USVF ྻܗࣜ FOWJSPONFOU ɹ3"$,@&/7EFWFMPQNFOU ɹ4)08USVF
ڥมͷࢦఆʢenv_fileʣ • ϑΝΠϧʹڥมΛఆٛͯ͠ɺ ͦͷϑΝΠϧΛಡΈࠐΉ͜ͱͰ͖Δɻ ఆٛͨ͠FOWpMF 3"$,@&/7EFWFMPQNFOU 4)08USVF FOWpMFΛͷಡΈࠐΈ FOW@pMFFOWpMF ෳͷFOWpMFΛಡΈࠐΉ͜ͱͰ͖Δ
FOW@pMF DPNNPOFOW BQQTXFCFOW
ίϯςφใʢcontainer_nameʣ • ίϯςφʹ໊લΛ͚ͭΔͱ͖ʹɺcontainer_name Λ ࢦఆ͢Δɻ • σϑΥϧτͩͱ{σΟϨΫτϦ໊}_{αʔϏε໊}_{࿈൪}Ͱ ੜ͞ΕΔɻ • ίϯςφ໊ҰҙͳͷͰɺෳͷίϯςφʹεέʔϧ
Ͱ͖ͳ͘ͳΔɻ ίϯςφ໊Λࢦఆ͢Δྫ DPOUBJOFS@OBNFXFC
σʔλཧʢvolumesʣ • ίϯςφʹϘϦϡʔϜΛϚϯτ͢Δ࣌ volumes Λࢦఆ͢Δɻ WPMVNFT ϘϦϡʔϜΛ࡞͢Δྫ WBSMJCNZTRM ϗετ04ͰϚϯτύεΛࢦఆ͢Δྫ ϗετ04ͷσΟϨΫτϦύείϯςφͷσΟϨΫτϦύε
DBDIFUNQDBDIF ಡΈऔΓઐ༻ͰϚϯτ͢Δྫ dDPOpHTFUDDPOpHTSP
ෳίϯςφͷӡ༻
ίϯςφͷੜʢupʣ • ෳίϯςφͷੜɾىಈΛߦ͏ͱ͖ docker-compose up ίϚϯυΛ༻͢Δɻ • Πϝʔδ͕ଘࡏ͠ͳ͍߹Ϗϧυ͕͞Ε͍ͯͳ͍߹ ىಈ࣌ʹߦ͏ɻ EόοΫάϥϯυͰ࣮ߦ͢Δɻ
CVJME%PDLFSpMFΛϏϧυ͢Δɻ EPDLFSDPNQPTFVQ<Φϓγϣϯ><αʔϏε໊> όοΫάϥϯυͰىಈ͢Δྫ EPDLFSDPNQPTFVQE
ίϯςφͷ֬ೝʢpsʣ • ෳͷίϯςφͷҰཡΛදࣔ͢Δʹ docker-compose ps ίϚϯυΛ༻͢Δɻ • docker container ls
ͰදࣔͰ͖Δɻ ෳͷίϯςφΛදࣔ͢Δྫ EPDLFSDPNQPTFQT EPDLFSDPNQPTFQT<Φϓγϣϯ><αʔϏε໊>
ίϯςφͷ֬ೝʢlogsʣ • docker-compose Ͱཧ͢ΔίϯςφͷϩάΛ ֬ೝ͢Δʹɺdocker-compose logs ίϚϯυΛ ༻͢Δɻ • αʔϏε໊Λࢦఆ͢ΕαʔϏε໊ͷίϯςφ͚ͩදࣔͰ͖Δɻ
GGPMMPXϩάग़ྗΛଓ͚Δɻ UBJMϩάͷඌΛදࣔ͢Δɻ EPDLFSDPNQPTFMPHT<Φϓγϣϯ><αʔϏε໊> XFCαʔϏεͷίϯςφͷϩάΛදࣔ͢Δྫ EPDLFSDPNQPTFMPHTXFC
ίϚϯυ࣮ߦʢrunʣ • ҙͷίϚϯυΛ࣮ߦͯ͠ίϯςφΛىಈ͍ͨ͠ ͱ͖ʹ docker-compose run ίϚϯυΛ༻͢Δɻ EPDLFSDPNQPTFSVO<Φϓγϣϯ>αʔϏε໊<ίϚϯυ> EόοΫάϥϯυͰ࣮ߦ͢Δɻ
XFCαʔϏεʹCBTIΛ࣮ߦͯ͠ىಈ͢Δྫ EPDLFSDPNQPTFSVOXFCCBTI
ίϚϯυ࣮ߦʢexecʣ • docker container exec ͱಉɻ ىಈ͍ͯ͠ΔίϯςφʹίϚϯυΛ࣮ߦ͢Δɻ EPDLFSDPNQPTFFYFD<Φϓγϣϯ>αʔϏε໊<ίϚϯυ> EόοΫάϥϯυͰ࣮ߦ͢Δɻ JOEFYJOEFYεέʔϧ͍ͯ͠Δ߹ʹࢦఆ͢ΔɻσϑΥϧτɻ
XFCαʔϏεʹCBTIΛ࣮ߦͯ͠ىಈ͢Δྫ EPDLFSDPNQPTFFYFDXFCCBTI
ෳίϯςφͷىಈɺఀࢭɺ࠶ىಈ ʢstartɾstopɾrestartʣ • ͦΕͧΕɺෳͷίϯςφΛҰׅͰ ىಈɾఀࢭɺ࠶ىಈͰ͖Δɻ • ಛఆͷαʔϏε໊ΛҾʹ͢ͱ ͦͷίϯςφͷΈૢ࡞Ͱ͖Δɻ EPDLFSDPNQPTFTUBSUTUPQSFTUBSU<αʔϏε໊>
ෳίϯςφͷআʢrmʣ • ෳͷίϯςφΛআ͢Δͱ͖ɺ docker-compose rm ίϚϯυΛ༻͢Δɻ • ಛఆͷαʔϏε໊ΛҾʹ͢ͱͦͷίϯςφͷΈ আͰ͖Δɻ
EPDLFSDPNQPTFSN<αʔϏε໊> GGPSDF֬ೝͤͣআ͢Δɻ XFCαʔϏεͷίϯςφΛআ͢Δྫ EPDLFSDPNQPTFSNXFC
ෳϦιʔεͷҰׅআʢdownʣ • docker-compose up Ͱੜͨ͠ίϯςφΠϝʔδͳͲͷ ϦιʔεΛ·ͱΊͯআ͢Δͱ͖ʹ docker-comopse down ίϚϯυΛ༻͢Δɻ •
࣮ߦதͷίϯςφΛఀࢭ͠ɺΠϝʔδɺωοτϫʔΫɺ ϘϦϡʔϜΛআ͢Δɻ EPDLFSDPNQPTFEPXO<Φϓγϣϯ> SNJBMMશͯͷΠϝʔδΛআ ΠϝʔδؚΊશͯΛআ͢Δྫ EPDLFSDPNQPTFEPXOSNJBMM
docker-compose ϋϯζΦϯ
Python ͷ DjangoϑϨʔϜϫʔΫͰ docker-compose Λ࡞͠Α͏
Dockerfile Λ࡞͢Δ • ҙͷσΟϨΫτϦΛ࡞͠ɺσΟϨΫτϦʹ ೖΓ·͢ɻ • σΟϨΫτϦͰ ӈهͷ Dockerfile Λ
࡞͠·͢ɻ NLEJSEKBOHPEPDLFSDPNQPTF DEEKBOHPEPDLFSDPNQPTF '30.QZUIPO &/71:5)0/6/#6''&3&% 803,%*3DPEF $01:SFRVJSFNFOUTUYUDPEF 36/QJQJOTUBMMSSFRVJSFNFOUTUYU $01:DPEF
requirements.txt Λ࡞͢Δ • ҎԼͷ requirements.txt Λ࡞͠·͢ɻ %KBOHP QTZDPQH
docker-compose.yml • Լهͷ docker-compose.yml Λ࡞͠·͢ɻ WFSTJPO TFSWJDFT EC JNBHFQPTUHSFT XFC
CVJME DPNNBOEQZUIPONBOBHFQZSVOTFSWFS WPMVNFT DPEF QPSUT EFQFOET@PO EC
DjangoϓϩδΣΫτΛ࡞͢Δ • ҎԼͷ docker-compose run ίϚϯυͰ Django ϓϩδΣΫτΛ࡞͠·͢ɻ • ϑΝΠϧҰཡΛදࣔ͢Δͱ
Django ϓϩδΣΫτ͕ ੜ͞Ε͍ͯΔ͜ͱ͕͔Δɻ EPDLFSDPNQPTFSVOXFCa EKBOHPBENJOQZTUBSUQSPKFDUDPNQPTFFYBNQMF MTM
σʔλϕʔεʹଓ͢Δ • composeexample/settings.py ϑΝΠϧͷ DATABASES ͷઃఆΛҎԼͷΑ͏ʹมߋ͠·͢ɻ %"5"#"4&4\ EFGBVMU\ &/(*/&EKBOHPECCBDLFOETQPTUHSFTRM
/".&QPTUHSFT 64&3QPTUHSFT )045EC 1035 ^ ^
docker-compose Λىಈͯ͠ ϒϥβͰ֬ೝ͢Δ • docker-compose up ίϚϯυͰىಈ͠·͢ɻ • ϒϥβ͔Β http://localhost:8000/
ʹΞΫηεͯ͠ τοϓը໘͕දࣔ͞ΕͨΒಈ࡞֬ೝྃͰ͢ɻ EPDLFSDPNQPTFVQE
͍͞͝ʹ
Dockerfile Λॻ͘͜ͱͰ ඞཁͳϦιʔεΛఆٛͰ͖Δ
docker-compose Λ͑ ෳͷίϯςφΛѻ͑ɺ ίϚϯυγϯϓϧʹىಈͰ͖Δ
·ͱΊ
·ͱΊ • Dockerfile ͰඞཁͳϦιʔεΛఆٛͰ͖Δɻ • docker-compose ͰෳͷίϯςφΛ γϯϓϧͳίϚϯυͰѻ͑Δɻ • Dockerfile
ͷ࡞ํ๏Λֶͼɺ ࡞ɺϏϧυͯ͠ಈ͔ͯ͠Έͨɻ • docker-compose ͷ࡞ํ๏Λֶͼɺ ࡞ɺϏϧυͯ͠ಈ͔ͯ͠Έͨɻ
جૅฤ2 ͓ΘΓ
Appendix
ࢀߟจݙ • ϓϩάϥϚͷͨΊͷ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