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
「最後に責任を取るのはチーム」— 人間のPRレビューを最小化してアップデートしたメンタルモデル
jnishime_dresscode
0
860
End-to-Endで考える信頼性 —LINEアプリにおけるクライアント開発×SRE連携の実践
maruloop
4
4.5k
関数型の考えを TypeScript に持ち込んで、テストしやすい純粋関数を増やす / Pure at the Core, Effects at the Edge: Bringing Functional Thinking into TypeScript
kaminashi
2
130
LLM/Agent評価:トップ営業の発言を「正解」にする 〜暗黙的正解による評価を営業資産に変える〜
takkuhiro
1
230
「ちゃんとやっている」は独りよがりだった ― 不安に寄り添うインシデント対応へ / Towards incident response that addresses anxieties
chmikata
1
5.8k
型は壁、Rustでもバグを直すな、表現できなくせよ
nwiizo
14
2.1k
知らん間に、回ってる
ming_ayami
0
710
AI時代のYAGNI:「爆速で無駄になった機能」からの学び / 20260720 Naoki Takahashi
shift_evolve
PRO
2
280
CDKで書くECSのベストプラクティス、 改めて考え直す2026 #cdkconf2026
makies
3
750
Foxgloveについて 実際にExtensionを開発して公開するまでの話 / About Foxglove: The Story of Developing and Releasing an Extension
ry0_ka
0
290
AI、CDK と協働する Full TypeScript アプリケーション開発 / Full TypeScript Application with AI and CDK
geekplus_tech
2
350
企業でAWS Organizationsを動かすための組織設計の考え方
nrinetcom
PRO
1
100
Featured
See All Featured
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
260
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
1k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
150
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
63
55k
Documentation Writing (for coders)
carmenintech
77
5.4k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
490
Test your architecture with Archunit
thirion
1
2.3k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.6k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
BBQ
matthewcrist
89
10k
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.ΞϓϦέʔγϣϯߏཧͷ͢͠͞