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
コンテナ開発入門 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
210
Web技術の基本 6回目 / Introduction to Web technologies 6th class
bath_poo_
1
290
Web技術の基本 5回目 / Introduction to Web technologies 5th class
bath_poo_
0
170
Web技術の基本 4回目 / Introduction to Web technologies 4th class
bath_poo_
0
250
Web技術の基本 3回目 / Introduction to Web technologies 3rd class
bath_poo_
0
270
Web技術の基本 2回目 / Introduction to Web technologies 2nd class
bath_poo_
0
300
Other Decks in Technology
See All in Technology
Beyond the Hype: Practical AI for Your Oracle Database with MCP
thatjeffsmith
1
260
その指示、Bobにしっかり伝わってる?初心者でも即実践できる プロンプト/コンテキスト設計のコツ
muehara
1
140
『止めない』を設計する — 制約の中で、事業の根幹を支える判断
hiroyaterui
0
190
いかに伝えるか 〜新卒エンジニアの教育のための、ライトノベル活用の一例
ikedon
1
190
データエンジニアリングワークショップ:Auto LoaderとSparkで学ぶデータパイプライン構築
databricksjapan
PRO
0
150
いま、生成AIにKaggleをどこまで 任せられるか — ROGIIコンペでの進め方とTips
k951286
3
1.4k
Webとヘルスデータ
yukukotani
0
170
ブラウザアプリの継続的パフォーマンスモニタリング (序) / Continuous Browser Application Performance Monitoring; Act 1
moznion
0
110
データエンジニアの困りごとをDevinと一緒に解消する
10xinc
2
820
[DroidKaigi 2026] Making UI specifications visible: Android UI development in the AI agent era supported by Compose Screenshot Testing and galleries
syarihu
0
570
Bet AI Day 2026丨バクラク Autopilot、業務システムの再設計
layerx
PRO
2
1.2k
AIエージェントの開発・提供におけるセキュリティリスクの論点と対策
flatt_security
1
570
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.7k
GitHub's CSS Performance
jonrohan
1033
470k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
310
Raft: Consensus for Rubyists
vanstee
141
7.7k
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Google's AI Overviews - The New Search
badams
0
1.6k
Practical Orchestrator
shlominoach
191
12k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
490
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.ΞϓϦέʔγϣϯߏཧͷ͢͠͞