Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Docker ハンズオン 基礎編2 / Docker Handson Basic 2
Search
takasp
August 24, 2018
120
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
78
Git中級者になるためのrebase入門 / Introduction to rebase to become an intermediate Git user
takasp
0
84
GitHubで始めるdotfiles管理 / Getting started with GitHub for dotfiles management
takasp
0
85
第三回 Datadog 共有会 / Datadog Sharing 3rd
takasp
0
130
第二回 Datadog 共有会 / Datadog Sharing 2nd
takasp
0
96
Datadog 共有会 / Datadog Sharing
takasp
1
79
Git ハンズオン Part 1 / Git Handson Part 1
takasp
0
90
Docker ハンズオン 基礎編1 / Docker Handson Basic 1
takasp
1
210
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
From π to Pie charts
rasagy
1
370
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Exploring anti-patterns in Rails
aemeredith
4
510
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
The Limits of Empathy - UXLibs8
cassininazir
1
670
Making the Leap to Tech Lead
cromwellryan
135
10k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Embracing the Ebb and Flow
colly
88
5.2k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
890
Why Our Code Smells
bkeepers
PRO
340
58k
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