Slide 1

Slide 1 text

͓લͷ%PDLFSΠϝʔδ͸ ·ͩॏ͍ 2016/02/05 JAWS-UG ίϯςφࢧ෦ #4 @stormcat24 ʙମࢷ๱཰1έλͷDockerΠϝʔδΛ໨ࢦͯ͠ʙ

Slide 2

Slide 2 text

‣ @stormcat24 ‣ Akinori Yamada ‣ CyberAgent, Inc ‣ Technical Engineer ‣ DevOps ‣ http://stormcat.hatenablog.com ‣ AmebaFRESH!

Slide 3

Slide 3 text

"NFCB'3&4)

Slide 4

Slide 4 text

ौ୩ఆ఺Χϝϥͱ͔

Slide 5

Slide 5 text

ण࢘԰ϥΠϒͱ͔

Slide 6

Slide 6 text

AmebaFRESH! is Full Dockernized Service! by EC2 Container Service

Slide 7

Slide 7 text

ͦ͏͍΍લճ΋஻Γ·ͨ͠ https://speakerdeck.com/stormcat24/next-fresh-applications-with-amazon-ecs

Slide 8

Slide 8 text

લճͷ࿩͸ɾɾɾ ‣ FRESH!ͷECS࢖ͬͨΞʔΩςΫνϟ ‣ Blue Green Deploymentͱ͔ ‣ docker-machineͰͷϩʔΧϧ։ൃ ‣ DockerΠϝʔδͷݮྔ ‣ ͦͷଞDevOpsͱ͔

Slide 9

Slide 9 text

ࠓ೔͸ݮྔͷ࿩͚ͩ͠·͢

Slide 10

Slide 10 text

ಥવͰ͕͢

Slide 11

Slide 11 text

໿(#ͷ%PDLFSΠϝʔδ QVMMʹԿඵ͔͔Δʁ

Slide 12

Slide 12 text

ଌఆ৚݅ ‣ EC2্ͷPrivate Docker Registry(V2)Λར༻ ‣ Registry͕ར༻͢ΔετϨʔδ͸S3 ‣ ಉҰϦʔδϣϯͷEC2͔ΒࢦఆͷΠϝʔδΛdocker pull͢Δ ‣ EC2ɺS3ڞʹap-northeast-1(Tokyo) ‣ EC2্ʹ͸ΠϝʔδͷϨΠϠʔΩϟογϡ͸ଘࡏ͠ ͳ͍΋ͷͱ͢Δ

Slide 13

Slide 13 text

"OTXFS໿ඵ ※ΠϝʔδʹΑͬͯࠩ͸΋ͪΖΜ͋Γ·͢

Slide 14

Slide 14 text

࣮͸͜Ε͸͔ͳΓ޷৚݅ ‣ EC2ͱRegistry, S3͸ಉҰϦʔδϣϯͳͷͰϨΠς ϯγ௿ ‣ DockerHubʹಉΠϝʔδΛஔ͍ͨ৔߹ɺ໿75ඵ͘ Β͍ͩͬͨ

Slide 15

Slide 15 text

ඵͳΒѱ͘ͳ͍ɾɾɾʁ

Slide 16

Slide 16 text

͍΍ɺݱ࣮͸ݫ͍͠

Slide 17

Slide 17 text

ίϯςφ̍ͭͰ͸੒ཱ͠ͳ͍

Slide 18

Slide 18 text

զʑ͸ଟ͘ͷίϯςφΛӡ༻͢Δɹ ‣ ༷ʑͳ໾ׂͷίϯϙʔωϯτͰγεςϜ͸੒ཱ ‣ ଞͷίϯςφͱڠௐͯ͠ಈ͘ ‣ td-agentͷग़൪΋ଟ͍ ‣ 1ͭͷϗετΛσϓϩΠ͢Δͷʹɺෳ਺ͷDockerί ϯςφΛpull͢Δඞཁ͕͋Δ

Slide 19

Slide 19 text

ίϯςφʹඵɺ஗͍

Slide 20

Slide 20 text

%PDLFSΠϝʔδ͕େ͖͍ͱ ‣ ΠϝʔδͷϏϧυɺCI࣌ؒ↑ ‣ Πϝʔδͷμ΢ϯϩʔυ࣌ؒ↑ ‣ ΠϝʔδͷΞοϓϩʔυ࣌ؒ↑ ‣ ੜ࢈ੑ↓ ‣ Twitter͢Δ࣌ؒ↑

Slide 21

Slide 21 text

ӡ༻ʹٴ΅͢Өڹ ‣ σϓϩΠ࣌ؒ↑ ‣ “ࣺͯΔΠϯϑϥӡ༻”ͷ৔߹ɺΠϝʔδͷϨΠϠʔ Ωϟογϡʹ͸͋·ΓཔΕͳ͍ʢϑϧμ΢ϯϩʔυ ͕ଟ͍ʣ ‣ EC2ͷAutoScalingͰ௥Ճ͞ΕͨΠϯελϯε͕ αʔϏεΠϯ͢Δ·Ͱͷ࣌ؒ↑

Slide 22

Slide 22 text

ॏ͍%PDLFSΠϝʔδ ྑ͍͜ͱແ͠

Slide 23

Slide 23 text

͚ܰΕ͹͍ܰ΄Ͳ Ձ஋͕͋Δ

Slide 24

Slide 24 text

ΑΖ͍͠ɺͰ͸ݮྔͩ

Slide 25

Slide 25 text

Πϝʔδݮྔϝιου ‣ ΠϝʔδͷϨΠϠʔ਺ΛݮΒ͢ ‣ ࢈ۀഇغ෺Λద੾ʹॲཧ͢Δ ‣ ϘϦϡʔϜϚ΢ϯτΛ׆༻͢Δ ‣ ͍ܰϕʔεΠϝʔδͷબఆ ‣ ϘτϧωοΫʢࢷ๱͕͍ͭͯΔՕॴʣΛಛఆ͢Δ ‣ ΞϓϦέʔγϣϯΛখ͘͢͞Δ

Slide 26

Slide 26 text

ϨΠϠʔ਺ΛݮΒ͢ ‣ DockerΠϝʔδ͸εςʔδຖʹϨΠϠʔΛੜ੒͢ ΔʢϨΠϠʔߏ଄ʣ ‣ ϨΠϠʔࣗ਎΋ΠϝʔδͳͷͰɺϨΠϠʔ਺ΛݮΒ ͤ͹αΠζ΋ݮΔ

Slide 27

Slide 27 text

36/ΛνΣʔϯ͢Δ 36/FDIPEFCIUUQQQBMBVODIQBEOFUOHJOYTUBCMFVCVOUVUSVTUZNBJOa FUDBQUTPVSDFTMJTUEOHJOYTUBCMFMJTUa BQULFZBEWLFZTFSWFSLFZTFSWFSVCVOUVDPNSFDWLFZT$&&$a BQUHFUVQEBUFZa BQUHFUJOTUBMMZOHJOYFYUSBTa BQUHFUJOTUBMMZPQFOTTMa BQUHFUJOTUBMMZHFPJQEBUBCBTFa

Slide 28

Slide 28 text

࢈ۀഇغ෺Λద੾ʹॲཧ͢Δ ‣ ࢈ۀഇغ෺ʹdocker build࣌ʹੜͨ͡ɺΞϓϦέʔ γϣϯ࣮ߦʹ͸ෆཁͳπʔϧ΍ϑΝΠϧ ‣ yum΍apt-getͷΰϛ ‣ Ϗϧυʹ࢖༻ͨ͠ιʔε ‣ gitͰ͢Β࢈ۀഇغ෺ ‣ ੒Ռ෺͚ͩ࢒͢͜ͱΛҙࣝ͢Δ

Slide 29

Slide 29 text

ϘϦϡʔϜϚ΢ϯτΛ׆༻͢Δ ‣ ϗετʹඞཁͳσΟϨΫτϦΛ഑ஔ͠ɺίϯςφʹ Ϛ΢ϯτ͢Δ͜ͱͰΠϝʔδͷαΠζΛ࡟ݮ͢Δ ‣ ࡟ݮςΫχοΫͱͯ͠͸༗ޮ ‣ ϗετʹґଘ͢ΔΑ͏ʹͳΔͨΊɺϙʔλϏϦςΟ ͸མͪΔ

Slide 30

Slide 30 text

%PDLFS)VC

Slide 31

Slide 31 text

%PDLFS)VC ‣ DockerΠϝʔδͷGitHubΈ͍ͨͳ΋Μ ‣ ཉ͍͠΋ͷ͸େ఍खʹೖΔ ‣ ༷ʑͳϓϩμΫτͷެࣜΠϝʔδ͕ଟ͘ϗετ͞Ε ͍ͯΔ ‣ ීஈԿؾͳ͘͢Δdocker pullͰ͸ɺ͔͜͜ΒΠϝʔ δΛμ΢ϯϩʔυ͢Δ

Slide 32

Slide 32 text

ΠϝʔδͷαΠζΛ֬ೝͰ͖Δ

Slide 33

Slide 33 text

ެࣜΠϝʔδΛ࢖͏΂͖͔ʁ ‣ όʔδϣϯ΋๛෋Ͱ඼࣭తʹ͸ܭࢉͰ͖Δ͕ɾɾɾ ‣ ΠϝʔδͷαΠζ͸ඞͣ͠΋࠷దԽ͞Ε͍ͯΔͱ͸ ݶΒͳ͍ͷͰαΠζ֬ೝॏཁ ‣ ϝδϟʔͲ͜Ζ͸ubuntu΍debianϕʔε͕ଟ͍ ‣ Dockerfileͷϊ΢ϋ΢͚ͩ௖͍ͯɺϕʔεΠϝʔδ ͚ͩม͑Δͷ΋બ୒ࢶ

Slide 34

Slide 34 text

TDSBUDI ‣ ͓ͦΒ͘ݱଘ࠷খͷDockerΠϝʔδ ‣ sh΋ls΋ͳ͍ ‣ ࣮͸amazon/amazon-ecs-agent(9MB)ͷϕʔε ‣ ඞཁͳ΋ͷ͸શ෦ηϧϑαʔϏε

Slide 35

Slide 35 text

#VTZCPY ‣ ௒ܰྔͰΠϝʔδ͸600KBʙ2MB ‣ ݩ͸૊ΈࠐΈܥLinuxͷσϑΝΫτͩͬͨ ‣ γΣϧ͸ash ‣ ѻ͍͸͔ͳΓ೉͍͠ʢதͰϏϧυ͠Α͏ͱࢥ͏ͳʣ ‣ goͷ࣮ߦϑΝΠϧΛCOPY͘Β͍͕ؔͷࢁ

Slide 36

Slide 36 text

"MQJOF-JOVY ‣ Πϝʔδ͸2MB ‣ ࣮͸Busyboxϕʔε ‣ APKͱ͍͏ύοέʔδ؅ཧγεςϜ͕͋ΔͷͰɺ BusyboxΑΓѻ͍΍͍͢

Slide 37

Slide 37 text

"1,Ͱ͕Μ͹ͬͯΔྫ 36/BQLVQEBUFBEEPQFOTTMEFWQDSFEFW[MJCEFWXHFUCVJMECBTFa NLEJSQUNQTSDa DEUNQTSDa XHFUIUUQOHJOYPSHEPXOMPBEOHJOYUBSH[a UBS[YWGOHJOYUBSH[UBSH[a DEUNQTSDOHJOYUBSH[a DPOpHVSFa XJUIIUUQ@TTM@NPEVMFa XJUIIUUQ@H[JQ@TUBUJD@NPEVMFa QSFpYFUDOHJOYa IUUQMPHQBUIWBSMPHOHJOYBDDFTTMPHa FSSPSMPHQBUIWBSMPHOHJOYFSSPSMPHa TCJOQBUIVTSMPDBMTCJOOHJOYa NBLFa NBLFJOTUBMMa BQLEFMCVJMECBTFa SNSGUNQTSDa SNSGWBSDBDIFBQL

Slide 38

Slide 38 text

"MQJOF೿ੜओཁΠϝʔδ ‣ anapsix/alpine-javaʢ໿50MBʣ ‣ cwt114/alpine-nodeʢ໿15MBʣ ‣ frolvlad/alpine-rubyʢ໿10MBʣ ‣ frolvlad/alpine-goʢ໿50MBʣ ‣ ಉ͡Α͏ͳͷΰϩΰϩస͕ͬͯΔ

Slide 39

Slide 39 text

ࠓͷͱ͜Ζͷ"MQJOFॴײ ‣ ཪͰຊ൪౤ೖͷػӡΛ࢕ͬͯΔʢλΠϛϯά࣍ୈʣ ‣ nginx͕150MB→20MB͘Β͍ ‣ ฏۉ80%͘Β͍ͷ࡟ݮ͕ظ଴Ͱ͖Δ ‣ Web/APIͷECS Taskʢίϯςφ4छʣͰ200- 300MB͘Β͍ɺ1෼͘Β͍Ͱpull+runͰ͖Δ

Slide 40

Slide 40 text

ܰ͞ͱͷτϨʔυΦϑ ‣ Dockerfile࡞Γ͕৬ਓܳʹͳΓ͕ͪ ‣ AlpineͷϦϙδτϦʹ͋Δύοέʔδͷόʔδϣϯ ͕ͦΕ΄Ͳ৽઱Ͱ͸ͳ͍ ‣ ࠷৽൛ͷϛυϧ΢ΣΞΛೖΕΔͷʹɺιʔείϯύ Πϧ͔Β࢝ΊͨΓ͢Δඞཁ͕͋Δ

Slide 41

Slide 41 text

*NBHF-BZFSJP ‣ https://imagelayers.io ‣ DockerΠϝʔδͷϨΠϠʔΛՄࢹԽͯ͘͠ΕΔ αʔϏε ‣ DockerHub࿈ܞ ‣ ଠ͍ՕॴΛҰൃͰ਍அͯ͘͠ΕΔ

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

%PDLFS)VCͱ࿈ܞͰ͖Δ

Slide 44

Slide 44 text

ͲͷϨΠϠʔʹ ࢷ๱͕͍ͭͯΔ͔ Ұ໨ྎવ

Slide 45

Slide 45 text

ಠࣗϨδετϦͰ࢖͑Δʁ ‣ GitHubͱDockerHubʹެ։͞ΕͯΔ ‣ centurylink/imagelayers-api ‣ centurylink/imagelayers-ui ‣ ϨδετϦΛࠩ͠ସ͑ΒΕΔ࢓૊Έʹͳͬͯͳ͍ ‣ Registry(V1)લఏͷ໛༷ ‣ forkͯͪ͠ΐͬͱؤுΕ͹ɾɾɾ

Slide 46

Slide 46 text

ΞϓϦέʔγϣϯΛখ͘͢͞Δ ‣ ίϯςφ࣌୅Ͱ͸αΠζͷখ͞͞΋໰ΘΕΔ ‣ Dockerܳਓʹ͸֤ݴޠͷϏϧυπʔϧͷ஌ࣝ΋໰ ΘΕΔ ‣ Node: npm ‣ Java/Scala: Maven, Gradle, sbt ‣ Go: godep, glide

Slide 47

Slide 47 text

ΞϓϦέʔγϣϯϨϕϧͰͷݮྔ ‣ ෆཁϞδϡʔϧͷ࡟আ ‣ ෆཁͳґଘϥΠϒϥϦͷ࡟আɺϥΠϒϥϦͷείʔ ϓͷݟ௚͠ ‣ ↑ͷͨΊͷϦϑΝΫλϦϯά ‣ ੩తϑΝΠϧ౳ɺ֎෦ʹग़ͤͦ͏ͳϦιʔεͷબผ

Slide 48

Slide 48 text

%PDLFS༗ࣝऀ͚ͩͰ͸੒ޭ͠ͳ͍ ‣ ίϯςφϕʔεͰӡ༻͢Δ͚ͩͰ͋Ε͹ɺDocker ༗ࣝऀ͚ͩͰͳΜͱ͔ͳΔ͕ɾɾɾ ‣ ReactͷαʔόαΠυϨϯμϦϯά౳ʑɺϑϩϯτ دΓͷྖҬͰͷཧղΛಘΔ͜ͱ͕ॏཁ ‣ ߴ͍ϨϕϧͰͷӡ༻ʹ͸ɺDocker༗ࣝऀʹٻΊΒ ΕΔٕज़ྖҬ͸࣮͸޿͍

Slide 49

Slide 49 text

·ͱΊ ‣ ॏ͗͢ΔΠϝʔδ͸ӡ༻ͷোนʹͳΔ ‣ ϙʔλϏϦςΟͱɺܰ͞Λ݉Ͷඋ͑ͯͦ͜ྑ͍ DockerΠϝʔδ ‣ ެࣜΠϝʔδա৴͢Δͳ ‣ Alpine(ɾ㱼ɾ)ŘŘŮ!! ‣ ΞϓϦͷστοΫε΋๨Εͣʹ

Slide 50

Slide 50 text

໨ࢦͤɺମࢷ๱཰έλ

Slide 51

Slide 51 text

Thank you.