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
muttan
October 24, 2018
Technology
210
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
390
Web技術の基本 8回目 / Introduction to Web technologies 8th class
bath_poo_
0
220
Web技術の基本 7回目 / Introduction to Web technologies 7th class
bath_poo_
0
200
Web技術の基本 6回目 / Introduction to Web technologies 6th class
bath_poo_
1
290
Web技術の基本 5回目 / Introduction to Web technologies 5th class
bath_poo_
0
160
Web技術の基本 4回目 / Introduction to Web technologies 4th class
bath_poo_
0
240
Web技術の基本 3回目 / Introduction to Web technologies 3rd class
bath_poo_
0
270
Web技術の基本 2回目 / Introduction to Web technologies 2nd class
bath_poo_
0
290
Other Decks in Technology
See All in Technology
しくみを学んで使いこなそう GitHub Copilot app
torumakabe
2
280
見守りエージェントを作ってみた(ローカルLLM + Hermes Agent)
happysamurai294
0
110
LLMやAIエージェントをソフトウェアに組み込むプラクティス
shibuiwilliam
2
410
SRE本の知られざる名シーン / The Hidden Gems of Google SRE Book
nari_ex
1
420
ガバナンスの「ちょうどいい落とし所」を探れ!開発スピードを妨げない運用判断の勘所 / SRE NEXT 2026
genda
1
230
AmplifyHostingConstructからSSRフレームワークのためのホスティング設計を考察する/amplify-hosting-construct
fossamagna
1
200
CIで使うClaude
iwatatomoya
0
290
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.4k
タスクの複雑さでモデルを選ぶ ── Thompson Samplingで動かす“トークン/コスト最適化
satohy0323
0
550
Network Firewallやっていき!
news_it_enj
0
160
Empower GenAI with Agile - あなたのアジャイルが生成AIのバフになる仕組み
hageyahhoo
1
210
CSに"SLO"は要らない、経営層に"99.9%"は伝わらない - SREを全社に"翻訳"する3原則
cscengineer
PRO
1
4.9k
Featured
See All Featured
Being A Developer After 40
akosma
91
590k
Product Roadmaps are Hard
iamctodd
55
12k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Amusing Abliteration
ianozsvald
1
230
It's Worth the Effort
3n
188
29k
The Invisible Side of Design
smashingmag
301
52k
KATA
mclloyd
PRO
35
15k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
610
A Tale of Four Properties
chriscoyier
163
24k
Practical Orchestrator
shlominoach
191
11k
Test your architecture with Archunit
thirion
1
2.3k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
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.ΞϓϦέʔγϣϯߏཧͷ͢͠͞