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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
muttan
October 24, 2018
Technology
240
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
140
ISUCONってなんだ / What is ISUCON
bath_poo_
0
410
Web技術の基本 8回目 / Introduction to Web technologies 8th class
bath_poo_
0
250
Web技術の基本 7回目 / Introduction to Web technologies 7th class
bath_poo_
0
230
Web技術の基本 6回目 / Introduction to Web technologies 6th class
bath_poo_
1
300
Web技術の基本 5回目 / Introduction to Web technologies 5th class
bath_poo_
0
180
Web技術の基本 4回目 / Introduction to Web technologies 4th class
bath_poo_
0
260
Web技術の基本 3回目 / Introduction to Web technologies 3rd class
bath_poo_
0
280
Web技術の基本 2回目 / Introduction to Web technologies 2nd class
bath_poo_
0
320
Other Decks in Technology
See All in Technology
JAWSUG TOHOKU 青森支部 「LoGoチャット」のAWS移行で 乗り越えたこと
taketakekaho
0
350
AI時代のPRレビューにどう向き合うか?
kairim0
1
250
Claude の新機能を、 出た日に触って社内に届けるまで
rfdnxbro
1
190
触りたくないデータに、どう触るか AI時代のRBACアクセスガバナンス
ivry_presentationmaterials
0
290
SharedWorkerを使ったキャッシュでネイティブアプリに負けないユーザー体験を目指す
kakehashi
PRO
1
110
CTO Night|NotionのAIエージェントとFDE
kzkhykw1991
0
260
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
3
1.1k
スキマバイトという雇用形態は存在しないので、雇用期間1日のアルバイト契約を事業者とワーカーが結ぶ手続きを支えるのがタイミーなんです
akitoshiga
0
210
大型犬好きによるPugの紹介
yamanoku
1
160
20261017福岡devIO 「AIは"良いダッシュボード"を作れるか?
jtakeda
0
200
アウトプット初心者、半年間のふりかえり
4o1sobblue
0
450
Temporal 最高!でも改めて「日付」について調べたら人類の負債すぎる件
riyaamemiya
0
200
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Code Reviewing Like a Champion
maltzj
529
40k
The Cult of Friendly URLs
andyhume
79
7k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Being A Developer After 40
akosma
92
590k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
480
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
570
How Software Deployment tools have changed in the past 20 years
geshan
2
35k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
360
Intergalactic Javascript Robots from Outer Space
tanoku
273
28k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
59k
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.ΞϓϦέʔγϣϯߏཧͷ͢͠͞