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
コンテナ開発入門 1回目/Introduction to Container Developm...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
muttan
October 24, 2018
Technology
220
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
コンテナ開発入門 1回目/Introduction to Container Development 1
muttan
October 24, 2018
More Decks by muttan
See All by muttan
さわやか待ち時間LINE botを作った話 / Sawayaka LINE bot
bath_poo_
0
130
ISUCONってなんだ / What is ISUCON
bath_poo_
0
400
Web技術の基本 8回目 / Introduction to Web technologies 8th class
bath_poo_
0
230
Web技術の基本 7回目 / Introduction to Web technologies 7th class
bath_poo_
0
220
Web技術の基本 6回目 / Introduction to Web technologies 6th class
bath_poo_
1
290
Web技術の基本 5回目 / Introduction to Web technologies 5th class
bath_poo_
0
180
Web技術の基本 4回目 / Introduction to Web technologies 4th class
bath_poo_
0
250
Web技術の基本 3回目 / Introduction to Web technologies 3rd class
bath_poo_
0
280
Web技術の基本 2回目 / Introduction to Web technologies 2nd class
bath_poo_
0
310
Other Decks in Technology
See All in Technology
30座EKS, 180次升級淬煉的EKS Upgrade Skill 的歷程
eric8230
0
160
技術的負債から考える、AI時代のエンジニアリング投資 — ビズリーチの技術的負債と向き合った経験から、変更し続けられるソフトウェアを考える/ technical-debt-con2026
visional_engineering_and_design
3
3k
20260912_スクラムにジェネラリストは必要か
ryugen04
0
420
銀行勘定系システムにおける開発プロセス刷新×AIによる環境モダナイゼーション / Development Process Transformation and AI-Driven Environment Modernization
muit
0
2.2k
負債のメタファと2026年 / Debt Metaphor in Agentic Engineering Age 202609 Edition
twada
PRO
6
2.8k
AI時代、データエンジニアが一番おもろい
genshun9
0
600
AIエージェントの自己改善をどう設計するか / How to Design Self-Improvement for AI Agents
22mi
23
15k
Omarchy Quattro の日本語設定周り
simosako
2
180
What the customer really needed
kawaguti
PRO
2
180
10Xに技術的負債をもたらした「2つの境界の歪み」その構造と解消への営み
10xinc
0
1.9k
空間オーディオで過去の 自分(ゴースト)と競うランニング 〜HealthKitのルートを足音に変える実装〜
nao_randd
0
220
アプリログインとWeb認証基盤をつなぐ ASWebAuthenticationSession 作法
shimastripe
1
320
Featured
See All Featured
Designing for Performance
lara
611
70k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
830
YesSQL, Process and Tooling at Scale
rocio
174
15k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Mobile First: as difficult as doing things right
swwweet
225
10k
Design in an AI World
tapps
1
320
How GitHub (no longer) Works
holman
316
150k
The agentic SEO stack - context over prompts
schlessera
0
940
Navigating Team Friction
lara
192
16k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
A designer walks into a library…
pauljervisheath
211
25k
Transcript
ίϯςφ։ൃೖ Keisuke Kamiya
ΠϯτϩμΫγϣϯ • ࠓճ͔ΒԿճ͔ʹ͚ͯίϯςφͱͦͷपลٕज़, ίϯ ςφΛͬͨ։ൃํ๏ʹֶ͍ͭͯͼ·͢ • ࢀߟॻ੶ Docker/Kubernetes ࣮ફίϯςφ։ൃೖ, ٕज़ධࣾ,
3,380ԁʴtax Ҿ༻ݩɿhttps://gihyo.jp/book/2018/978-4-297-10033-9
ΠϯτϩμΫγϣϯ • ඪ DockerԿΘ͔Βͳ͍…͔ΒDockerνϣοτϫΧϧ͙ Β͍·Ͱ͠Α͏ • औΓѻ͏༰ 1. ͳͥDockerΛ͏ͷ͔ 2.
DockerίϯςφΛͬͨΞϓϦέʔγϣϯͷ։ൃ 3. σϓϩΠӡ༻ ࠓͷ༰ಋೖฤͰ͢
ࠓճͷςʔϚ
Chapter 1 Dockerͷجૅ
࣍ 1. Dockerͱ 1.1.Dockerͷجૅ֓೦ 1.2.Dockerͷߟ͑ʹ৮ΕΔ 2. DockerΛར༻͢Δҙٛ 2.1.ڥࠩҟ͔Βͷ٫ 2.2.ΞϓϦέʔγϣϯߏཧͷ͢͠͞
࣍ 1. Dockerͱ 1.1.Dockerͷجૅ֓೦ 1.2.Dockerͷߟ͑ʹ৮ΕΔ 2. DockerΛར༻͢Δҙٛ 2.1.ڥࠩҟ͔Βͷ٫ 2.2.ΞϓϦέʔγϣϯߏཧͷ͢͠͞
Dockerͱ • Docker ίϯςφܕԾԽٕज़Λ࣮ݱ͢ΔͨΊͷৗறΞϓϦέʔ γϣϯͱ, ͦΕΛૢ࡞͢ΔCLI͔ΒͳΔϓϩμΫτ ‣ ࣮ߦ͞ΕΔίϯςφʢDockerίϯςφʣΛ͢Ε , ৗʹಉ͡ڥΛ࠶ݱՄೳ
→ ͦͦίϯςφͬͯͳΜͩ ݱஈ֊Ͱ, ͱΓ͋͑ͣίϯςφDockerʹΑͬͯ࡞ ͞ΕΔήετOSͱߟ͓͑ͯ͘ͱྑ͍
Dockerͱ • Dockerͷ͍͍ͱ͜Ζ 1. ैདྷͷԾڥߏஙΑΓ, ΑΓߴ/ܰྔͳڥΛ ؆୯ʹߏங͢Δ͜ͱ͕Ͱ͖Δ - ΞϓϦέʔγϣϯ։ൃڥΛྫʹղઆ 2.
ϙʔλϏϦςΟੑ - ຊ൪ڥͷσϓϩΠʹ͑͏Δ 1ͭ1ͭݟ͍͖ͯ·͢
Ϣʔεέʔε1 Ծڥͷߏங
Ծڥͷߏங • DockerΛ͏ͱศརͳϢʔεέʔεʢͦͷ1ʣ ‣ ܰྔͳԾڥͷߏங ‣ WebΞϓϦέʔγϣϯʹඞཁͳιϑτΣΞ(Apache nginxͳͲ)ΛϩʔΧϧʹߏங͢Δํ๏Λߟ͑Δ ‣ (ํ๏1)
VMηοτΞοϓ͔Βߦ͏ ‣ (ํ๏2) DockerΛ͏
Ծڥͷߏஙʢํ๏1ʣ • ຊ൪ڥͱಉ͡OSΛೖΕͨԾڥΛ༻ҙ͠, ύοέʔ δϚωʔδϟΛͬͯιϑτΣΞΛಋೖʢैདྷ๏ʣ ‣ ͔ͭͯΑΓ, ύοέʔδϚωʔδϟͷ͓͔͛Ͱڥߏ ஙʹ͔͔Δ࣌ؒେ෯ʹॖ͞Εͨ ‣
͜ΕΛࣗಈԽ͢ΔͷʹVirtualBox + Vagrantͱ͍͏ ํ๏͋Δ͕, VMͷηοτΞοϓʹͦΕͳΓʹ࣌ؒ ͕͔͔Δ
Ծڥͷߏஙʢํ๏2ʣ • DockerΛ༻͢Δ ‣ OSͱ࣮ߦʹඞཁͳίϚϯυΛهड़ͨ͠ϑΝΠϧ (Dockerfile)Λ༻ҙ͓͖ͯ͠, ίϚϯυΛ࣮ߦ - ϩʔΧϧڥʹDockerڥ͑͞ηοτΞοϓ͞Ε ͍ͯΕ,
ैདྷ๏ΑΓߴɾܰྔͳԾڥΛߏ ஙՄೳ
Ծڥͷߏஙʢํ๏2ʣ • ͳͥDocker͕͍͍ͯΔͷ͔ʁ ‣ ίϯςφࣗମ͕ඇৗʹܰྔ - VMΑΓΦʔόʔϔου͕গͳ͍ ‣ ىಈ/আ͕ඇৗʹߴ -
ڥͷ࡞/ഁյʹ͔͔Δ͕࣌ؒগͳ͍ͨΊ, ڥ࠶ ݱ͕खܰͰςετΛߦ͍͍͢
Ϣʔεέʔε2 ຊ൪ڥͷσϓϩΠ
ຊ൪ڥͷσϓϩΠ • DockerΛ͏ͱศརͳϢʔεέʔεʢͦͷ2ʣ ‣ ຊ൪ڥͷΞϓϦέʔγϣϯͷσϓϩΠ ‣ ͳͥDocker͕ຊ൪ڥͷσϓϩΠʹద͍ͯ͠Δ͔ʁ ‣ ϩʔΧϧͰ࣮ߦ͍ͯ͠Δίϯςφ, ผͷDockerڥ
ʹ͍࣋ͬͯͬͯಉ༷ʹಈ࡞͢Δ ‣ ڥࠩҟΛDocker͕ٵऩ͍ͯ͠Δ ‣ ৄ͘͠ޙͰղઆ͠·͢
࣍ 1. Dockerͱ 1.1.Dockerͷجૅ֓೦ 1.2.Dockerͷߟ͑ʹ৮ΕΔ 2. DockerΛར༻͢Δҙٛ 2.1.ڥࠩҟ͔Βͷ٫ 2.2.ΞϓϦέʔγϣϯߏཧͷ͢͠͞
ίϯςφܕԾԽͱ
Dockerͷجૅ֓೦ • Dockerͱʢ࠶ܝʣ ίϯςφܕԾԽٕज़Λ࣮ݱ͢ΔͨΊͷৗறΞϓϦέʔ γϣϯͱ, ͦΕΛૢ࡞͢ΔCLI͔ΒͳΔϓϩμΫτ ‣ ࣮ߦ͞ΕΔίϯςφʢDockerίϯςφʣΛ͢Ε , ৗʹಉ͡ڥΛ࠶ݱՄೳ
→ ͦͦίϯςφͬͯͳΜͩ ! ͦͦԾԽͬͯͳΜͩ ·ͣͳͥԾԽ͢Δͷ͔͔Βߟ͑ͯΈ·͠ΐ͏
ԾԽٕज़ • ͦͦͳͥԾԽٕज़Λಋೖ͢Δͷ͔ ‣ ίετύϑΥʔϚϯεͷ্ → Ϧιʔε༻ͷ্ɾӡ༻ͷ୯७Խ ‣ ڥͷִ →
࣮ߦ͢ΔڥΛִ͢Δ • ༷ʑͳཧ༝͕͋Δ͕, DockerΛϩʔΧϧͰ͏߹, ࣗ ͷڥΛԚͣ͞ʹ(ίϯςφ͚ͩͰดͨ͡)ڥͱ͠ ͯ༻͢Δ͜ͱ͕ଟ͍
ԾԽٕज़ • Ծڥͷྨ ‣ ϋΠύʔόΠβܕ(XenͳͲ) ϋΠύʔόΠβͱݴΘΕΔιϑτΣΞΛ༻͍ͯ, ϚγϯશମΛԾ Խ͢Δ(ڱٛ) ‣ ϗετOSܕ(VirtualBox,
VMWareͳͲ) ԾԽΞϓϦέʔγϣϯΛϗετOS্ʹΠϯετʔϧ͠, ͦͷ্Ͱ ϋʔυΣΞͷಈ͖ΛγϛϡϨʔτ ‣ ίϯςφܕ(DockerͳͲ) ϗετOS্ʹίϯςφϥϯλΠϜ͕ଘࡏ͠, ͦͷ্Ͱίϯςφ͕Ք ಇ. ϗετOSͱΧʔωϧΛڞ༗͍ͯ͠Δ
ԾԽٕज़ ௨ৗͷγεςϜ ϋΠύʔόΠβܕ ϗετOSܕ ίϯςφܕ(Docker) ϗετ04 8JOEPXTͳͲ "QQ "QQ "QQ
ϗετ04 8JOEPXTͳͲ "QQ "QQ "QQ ԾԽιϑτ ήετ04 ήετ04 ϋΠύʔόΠβ "QQ ήετ04 "QQ ήετ04 "QQ ήετ04 ϗετ04 8JOEPXTͳͲ ίϯςφ ίϯςφ "QQ %PDLFS ɿԾԽྖҬ
ίϯςφܕԾԽ • ίϯςφܕԾԽ ‣ OSϨϕϧԾԽ(Operating-system-level virtualization)ͱݺΕΔ ‣ ίϯςφܕԾԽ, ԾԽιϑτΣΞͳ͠ʹOSͷ ϦιʔεΛִ͠,
ԾతͳOS(ίϯςφ)Λ࡞Γग़͢ - ίϯςφΛ࡞Γग़͢Φʔόʔϔου, ଞͷԾԽ ιϑτΣΞʹൺΔͱগͳ͍
ίϯςφܕԾԽ • ίϯςφܕԾԽҎલ͔Βଘࡏ ‣ LXC(Linux Containers) - Dockerొલ͔Βଘࡏ͍ͯ͠Δ - ϦιʔεΛִ͠,
ίϯςφΛΒͤΔ • Docker͔ͭͯLXCΛ༻͍ͯͨ͠ ‣ ݱࡏrunCͱ͍͏ϥϯλΠϜΛ༻͠ԾԽΛ࣮ݱ
ίϯςφܕԾԽ LXC ϗετ04 8JOEPXTͳͲ -9$ Docker ϗετ04 8JOEPXTͳͲ %PDLFS LFSOFM
ίϯςφ ίϯςφ ίϯςφ ίϯςφ ίϯςφ ίϯςφ LFSOFM SVO$ • DockerͷίϯςφܕԾԽٕज़ͷਪҠ ‣ ͔ͭͯLXCܦ༝ͰίϯςφΛ࣮ߦ ‣ ݱࡏ, cgourps, namespaceΛୟ͘libcontainer ܦ༝Ͱ࣮ߦ
ΞϓϦέʔγϣϯʹϑΥʔΧεͨ͠Docker
ΞϓϦέʔγϣϯʹϑΥʔΧε • LXCϗετܕԾԽΑΓύϑΥʔϚϯεͰ༗ར • ҰํͰ, ෳͨ͠ΞϓϦέʔγϣϯΛผͷLXC͕Մಈ͠ ͍ͯΔϗετͰ࣮ߦ͢Δͱ͖ʹ, ఆͱҟͳΔಈ࡞Λ͢ Δ͜ͱ͕͋Δ ‣
LXCϗετͷઃఆͷࠩҟ͕ݪҼ ‣ σϓϩΠͨ͠ΞϓϦέʔγϣϯ͕ϩʔΧϧͱຊ൪ ڥͰҟͳΔ͜ͱʹ
ΞϓϦέʔγϣϯʹϑΥʔΧε • DockerΞϓϦέʔγϣϯͷσϓϩΠΛத৺ʹߟ͑Δ ‣ ҎԼͷΑ͏ͳಛ͕͋Δ - ϗετʹࠨӈ͞Εͳ͍࣮ߦڥ - ίʔυʹΑΔίϯςφߏͷཧ -
Πϝʔδͷόʔδϣϯཧ - DockerϨδετϦ - ϨΠϠʔʹΑΔΠϝʔδͷอଘ
ΞϓϦέʔγϣϯʹϑΥʔΧε • DockerͰ, ΞϓϦέʔγϣϯΛίʔυͰཧ͢Δ ‣ DSL(Dockerfile)ʹΑΔཧ - ίʔυͰߏΛཧͰ͖Δ(Infrastructure as code)
- ߏΛόʔδϣϯཧ͢Δ͜ͱ͕Ͱ͖Δ • ΞϓϦέʔγϣϯ͚ͩͰͳ͘, ࣮ߦڥ(os)ಉ࣌ʹσ ϓϩΠ ‣ ࣮ߦڥ͝ͱ͢Δ͜ͱͰґଘؔΛղফ DSL : domain-specific language
࣍ 1. Dockerͱ 1.1.Dockerͷجૅ֓೦ 1.2.Dockerͷߟ͑ʹ৮ΕΔ 2. DockerΛར༻͢Δҙٛ 2.1.ڥࠩҟ͔Βͷ٫ 2.2.ΞϓϦέʔγϣϯߏཧͷ͢͠͞
Dockerͷߟ͑ํʹ;ΕΔ • ࣮ࡍʹDockerΛͬͯΈΔ ‣ DockerfileΛॻ͍ͯΈΔ͜ͱͰงғؾΛ௫Ή ‣ ͲͷΑ͏ʹಈ࡞͍ͯ͠Δͷ͔Πϝʔδ͢Δ • ࠓճ؆୯ͳγΣϧεΫϦϓτΛ࣮ߦ͢Δ͚ͩͷΠϝʔ δΛ࡞࣮͠ߦ
Dockerͷߟ͑ํʹ;ΕΔ • ·࣮ͣߦ͢ΔγΣϧεΫϦϓτΛॻ͘ ‣ ࠓճ, ඪ४ग़ྗʹ”Hello, world”Λग़ྗ͢Δ ‣ “helloworld”ͱ͍͏ϑΝΠϧ໊Ͱอଘ 1
#!/bin/sh 2 3 echo "Hello, world";
Dockerͷߟ͑ํʹ;ΕΔ • DockerfileΛ࡞͢Δ ‣ ༻͢ΔosΠϝʔδ, Πϯετʔϧ͕ඞཁͳύο έʔδ, ίϐʔ͢ΔϑΝΠϧͳͲΛهड़ ‣ γΣϧεΫϦϓτͱಉ͡֊ʹҎԼͷ༰
Λ”Dockerfile”ͱ͍͏໊લͰอଘ FROM ubuntu:16.04 COPY helloworld /usr/local/bin RUN chmod +x /usr/local/bin/helloworld CMD ["helloworld"]
Dockerͷߟ͑ํʹ;ΕΔ FROM ubuntu:16.04 COPY helloworld /usr/local/bin RUN chmod +x /usr/local/bin/helloworld
CMD ["helloworld"] %PDLFSΠϝʔδ 04 Λࢦఆ ࠓճVCVOUVͷΛ༻ ϑΝΠϧΛίϐʔ γΣϧίϚϯυΛ࣮ߦ ίϯςφͱ࣮ͯ͠ߦ͢Δલʹ ࣮ߦ͍ͨ͠ίϚϯυΛهड़ • DockerϑΝΠϧͷߏ
Dockerͷߟ͑ํʹ;ΕΔ • ࣮ߦ ·ͣίϯςφΛϏϧυ͢Δ 1 $ docker image build -t
helloworld:latest . 2 Sending build context to Docker daemon 3.072kB 3 Step 1/4 : FROM ubuntu:16.04 4 ---> 5e8b97a2a082 5 Step 2/4 : COPY helloworld /usr/local/bin 6 ---> f21bf7b10524 7 Step 3/4 : RUN chmod +x /usr/local/bin/helloworld 8 ---> Running in 915c2aeac8fa 9 Removing intermediate container 915c2aeac8fa 10 ---> 879dda6427e0 11 Step 4/4 : CMD ["helloworld"] 12 ---> Running in fa5dee022556 13 Removing intermediate container fa5dee022556 14 ---> 6b9e6c2ffc9e 15 Successfully built 6b9e6c2ffc9e 16 Successfully tagged helloworld:latest docker image build -t helloworld:latest . ϐϦΦυΕʹҙ ͏·͘Ͱ͖͍ͯͦ͏ʁ ࣮ߦ݁Ռ
Dockerͷߟ͑ํʹ;ΕΔ • ࣮ߦ ίϯςφΛΒͤΔ docker container run helloworld:latest 1 $
docker container run helloworld:latest 2 Hello, world ࣮ߦ݁Ռ l)FMMP XPSMEz͕ग़ྗ͞Ε͍ͯΔ ࣮ߦʹඞཁͳϑΝΠϧΞϓϦέʔγϣϯΛDockerΠϝʔδʹಉ࣮ࠝͯ͠ߦ͢Δ.
࣍ 1. Dockerͱ 1.1.Dockerͷجૅ֓೦ 1.2.Dockerͷߟ͑ʹ৮ΕΔ 2. DockerΛར༻͢Δҙٛ 2.1.ڥࠩҟ͔Βͷ٫ 2.2.ΞϓϦέʔγϣϯߏཧͷ͢͠͞
DockerΛར༻͢Δҙٛ • ͔ͭͯͷ։ൃελΠϧ͔ΒDockerΛ༻͍ͨ։ൃελΠϧ ʹγϑτ͢Δཧ༝ͱͳΜͩΖ͏͔ʁ ‣ ෆมͳ࣮ߦڥ(Immutable Infrastructure)ʹΑΔႈ ੑͷ֬อ ‣ ࣮ߦڥߏங,
ߏͷίʔυԽ(Infrastructure as Code) ‣ ϙʔλϏϦςΟ ‣ ΞϓϦέʔγϣϯϛυϧΣΞͷߏཧͷ༰қ͞
࣍ 1. Dockerͱ 1.1.Dockerͷجૅ֓೦ 1.2.Dockerͷߟ͑ʹ৮ΕΔ 2. DockerΛར༻͢Δҙٛ 2.1.ڥࠩҟ͔Βͷ٫ 2.2.ΞϓϦέʔγϣϯߏཧͷ͢͠͞
ڥࠩҟ͔Βͷ٫ • σϓϩΠઌͷαʔό͕ෳଘࡏ ‣ ͯ͢ͷαʔό͕ಉ͡ઃఆͰ͋ΔͱݶΒͳ͍ - σϓϩΠઌͷαʔόʹΑͬͯڍಈ͕มΘΔՄೳੑ → ݪҼɿՄมతͳΠϯϑϥΛڐ༰͍ͯ͠ΔͨΊ ΞϓϦέʔγϣϯαʔόA
ΞϓϦέʔγϣϯαʔόB ΞϓϦέʔγϣϯαʔόC C͚ͩઃఆ࿙Ε͕͋ͬͨ…
ڥࠩҟ͔Βͷ٫ • ΞϓϦέʔγϣϯৗʹԿ͔ʹґଘ͍ͯ͠Δ ‣ OS, CPU, ϝϞϦ, ݴޠϥϯλΠϜ, ϥΠϒϥϦ… •
͜ͷґଘΛͳΔ͘Լ͛Δ͜ͱͰ͜ͷΛղܾ • ղܾํ๏ ‣ Infrastructure as CodeʢΠϯϑϥͷߏཧʣ ‣ Immutable InfrastructureʢෆมͳΠϯϑϥʣ
Infrastructure as Code • Infrastructure as Code(IaC, Πϯϑϥͷߏཧ) ‣ ΠϯϑϥΛίʔυϕʔεͰཧ͠Α͏ͱ͍͏ߟ͑
• ҎԼͷ༰ΛίʔυͰهड़ ‣ ͲͷΑ͏ͳαʔόߏʹ͢Δ͔ ‣ ͲͷύοέʔδΛΠϯετʔϧ͢Δͷ͔ • ਓ͕खಈͰߦ͏ͷͰͳ͘, ChefAnsibleͱ͍ͬͨ πʔϧΛͬͯࣗಈԽΛߦ͏
Infrastructure as Code • ͨͩ͠, IaCສೳͰͳ͍ ‣ ྫ͑, ͋Δπʔϧͷstable൛Λಋೖ͍ͨ͠ͱ͖ʹ, λ
ΠϛϯάʹΑͬͯಋೖ͞ΕΔόʔδϣϯ͕ҟͳΔ - ͜ΕΛ͚͞Δʹ, ႈੑ͕อূ͞ΕΔίʔυΛॻ ͘ඞཁ͕͋Δ - ႈੑ
Infrastructure as Code • ႈੑͱ •
ײతͳཧղͱͯ͠, ಉ͡ૢ࡞ΛԿߦͬͯಉ͡ঢ়ଶͰ͋Δ ͜ͱ • ෳճࣗಈԽεΫϦϓτΛ࣮ߦͯ͠, ৗʹαʔόͷঢ়ଶ͕ಉ͡ Ͱ͋Δ߹, ႈੑ͕อͨΕ͍ͯΔͱߟ͑ΒΕΔ ႈੑͱʮԿಉ͡ૢ࡞Λͨ͠ͱͯ͠ಉ݁͡ՌΛಘΒΕΔʯͱ͍͏ͷ Ͱ͢ɻྫ͑ʮabcͱ͍͏ϢʔβʔΛࢦఆͷଐੑͰ࡞ͤΑʯͱ͍͏ʮϓϩ άϥϜʯΛ͋ͬͨͱ͠·͢ɻ͜ͷʮϓϩάϥϜʯΛԿճ࣮ߦͨ͠ͱͯ͠ɺ ʮabcʯͱ͍͏Ϣʔβʔ͕ࢦఆͷଐੑͰ࡞͞Ε͍ͯΔͱ͍͏݁ՌʹมΘΓ ͳ͍ͱ͍͏ࣄͰ͢ɻͭ·ΓઌͷྫͰݴ͑ɺύοέʔδ͕Πϯετʔϧࡁ ΈͳΒʮԿ͠ͳ͍ʯͷ͕·͍͠ಈ͖ʹͳΓ·͢ɻ Ҿ༻ɿhttp://www.intellilink.co.jp/article/column/devops02.html
Infrastructure as Code • ChefAnsibleͰႈੑΛอͬͨΠϯϑϥΛߏ͢Δ ͜ͱՄೳ ‣ ࣮ࡍ࣮࣍ୈͳͱ͜Ζ͕͋Γ, શʹอূ͞Εͯ ͍Δͱ͍͏Θ͚Ͱͳ͍
‣ ৗʹႈੑ͕อূ͞Ε͍ͯΔίʔυΛॻ͖ଓ͚Δͷ ӡ༻্େ͖ͳෛ୲ͱͳΓಘΔ - ͦ͜ͰImmutable Infrastructure͕ొ
Immutable Infrastructure • Immutable Infrastructure(ෆมͳΠϯϑϥ) ͋Δ࣌ͷαʔόͷঢ়ଶΛอଘ͓͖ͯ͠, ͍ͭͰෳ ΛՄೳʹ͓ͯ͘͠ ‣ ਖ਼͘͠ಈ࡞͍ͯ͠Δঢ়ଶΛอଘ͓͚ͯ͠,
ෳͨ͠ αʔόಉ༷ʹಈ࡞͢Δ͜ͱ͕อূ͞ΕΔ ‣ αʔόͷมߋ, طଘͷαʔόʹखΛՃ͑ΔͷͰͳ ͯ͘৽͍͠Πϝʔδͱͯ͠อଘ͢Δ
IaCͱImmutable Infrastructure • Docker, IaCͱImmutable InfrastructureΛίετ͔ ͭ؆୯ʹ࣮ݱ͢Δ͜ͱ͕Մೳ ‣ DockerfileʹΑͬͯߏΛཧ(IaC) ‣
OS෦ͷଟ͘ΛϗετOSͱڞ༗͍ͯ͠ΔͨΊ, ىಈ ͕ඇৗʹߴͳͨΊ, ৽͘͠ΠϯϑϥߏΛ࡞Γ͢ Immutable Infrastructureͱ૬ੑ͕ྑ͍
DockerͷϙʔλϏϦςΟ • ௨ৗ, ࡞ͨ͠ΞϓϦέʔγϣϯΛผͰ༻ҙͨ͠αʔό (Πϯϑϥ)্ʹల։͢Δ͜ͱͰαʔϏεΛӡ༻ ‣ ΞϓϦέʔγϣϯͱΠϯϑϥ͕શʹ ‣ αʔό෦ͷઃఆͷࠩҟͳͲ͕ੜ·ΕΔՄೳੑ •
Dockerίϯςφʹ, OS(Πϯϑϥ)ͱΞϓϦέʔγϣϯ ΛηοτͰϏϧυՄೳ ‣ Ϗϧυͨ͠Πϝʔδৗʹಉ͡ͳͷͰ, Docker͕Πϯε τʔϧ͞Ε͍ͯΔϚγϯͰ͋Εಉ͡ڥΛ࠶ݱՄೳ
࣍ 1. Dockerͱ 1.1.Dockerͷجૅ֓೦ 1.2.Dockerͷߟ͑ʹ৮ΕΔ 2. DockerΛར༻͢Δҙٛ 2.1.ڥࠩҟ͔Βͷ٫ 2.2.ΞϓϦέʔγϣϯߏཧͷ͢͠͞ 2.3.ຊ൪ڥͰͷDocker
2.4.৽͍͠։ൃελΠϧ
ΞϓϦέʔγϣϯߏཧͷ͢͠͞ • ҰఆͷنͷWebΞϓϦέʔγϣϯʹͳΔͱ, ෳͷ αʔϏε͕ڠௐͯ͠ಈ࡞͢Δ ‣ WebαʔόDBαʔό, ΩϟογϡαʔόͳͲ • DockerͰ͜ͷγεςϜΛ࠶ݱ͍ͨ͠
‣ σϓϩΠ༰қʹͳ͕ͬͨ, ࣮ߦॱίϯςφಉ࢜ͷ ґଘؔͱ͍͕ͬͨ͋Δ - Docker ComposeΛͬͯղܾ
ΞϓϦέʔγϣϯߏཧͷ͢͠͞ • Docker Compose ෳͷίϯςφΛ͏DockerΞϓϦέʔγϣϯΛఆ ٛɾ࣮ߦ͢ΔͨΊͷπʔϧ ‣ yamlܗࣜͰΞϓϦέʔγϣϯΛఆٛ 1 version:
"3" 2 services: 3 web: 4 image: gihyodocker/web 5 ports: 6 - "3000:3000" 7 environment: 8 REDIS_TARGET: redis 9 depends_on: 10 - redis 11 12 redis: 13 image: "redis:alpine"
ΞϓϦέʔγϣϯߏཧͷ͢͠͞ 1 version: "3" 2 services: 3 web: 4 image:
gihyodocker/web 5 ports: 6 - "3000:3000" 7 environment: 8 REDIS_TARGET: redis 9 depends_on: 10 - redis 11 12 redis: 13 image: "redis:alpine" ←༻͢ΔDockerΠϝʔδ ←ϙʔτϑΥϫʔσΟϯά ←ڥม ←ґଘؔ (webͷલʹredisΛىಈ) ←KVSͷىಈ
ΞϓϦέʔγϣϯߏཧͷ͢͠͞ • ࣮ࡍ, ͜ͷߏΛෳ༻ҙ͢Δ͜ͱ͋Δ ‣ ෛՙରࡦͰεέʔϧΞτ͢Δ߹ͳͲ LoadBalancer αʔό (Dockerϊʔυ) ←docker-compose.ymlΛద༻
←docker-compose.ymlΛద༻ ←docker-compose.ymlΛద༻ ͨͩ͠, Docker Compose୯ମ, 1ͭͷαʔόͰͷ༻Λఆ →ෳ͑ΔΑ͏ʹ͍ͨ͠
ΞϓϦέʔγϣϯߏཧͷ͢͠͞ • Docker Swarm ୯Ұͷαʔό͚ͩͰͳ͘, ෳͷαʔόΛ·͍ͨͰཧ Ͱ͖ΔΑ͏ʹͨ͠ͷ ‣ Docker ComposeͰͷෳͷίϯςφͷཧ
‣ ίϯςφͷ૿ݮ(εέʔϦϯά) ‣ ϩʔϦϯάΞοϓσʔτ etc…
ΞϓϦέʔγϣϯߏཧͷ͢͠͞ • ίϯςφΦʔέετϨʔγϣϯ ෳͷϊʔυΛލ͍ͩίϯςφͷཧΛߦ͏͜ͱ • ίϯςφΦʔέετϨʔγϣϯπʔϧ ΦʔέετϨʔγϣϯΛ࣮ݱ͢ΔͨΊͷπʔϧ ‣ Docker Swarm
‣ Kubernetes ͳͲ https://github.com/docker/swarm https://github.com/kubernetes/kubernetes/tree/master/logo
࣍ 1. Dockerͱ 1.1.Dockerͷجૅ֓೦ 1.2.Dockerͷߟ͑ʹ৮ΕΔ 2. DockerΛར༻͢Δҙٛ 2.1.ڥࠩҟ͔Βͷ٫ 2.2.ΞϓϦέʔγϣϯߏཧͷ͢͠͞