Docker Rocks in Node.js, 2023 ãšãã£ã·ã§ã³
ããã«ã¡ã¯ã ãããããã芳客åå åã ã ã§ããã ãéå±ã«ãªããªãããã«ãããã§ãã ã ãããç§ã®ååã¯ãã¬ããã§ãã Dockerã§Node.jsè¬æŒãè¡ãã®ã¯ä»åã§3åç®ã§ãã ã ãããããã¯ãªãã¬ãã·ã¥ã§ãã ãããŠãç§ã¯ãã€ãã5æã®ã¹ã©ã€ããããããšæã£ãŠããŸãã 5 ã€ã®ã¹ã©ã€ãã倿ŽãããŸãã ãã®äžã®ãã¹ãŠãç°ãªããŸãã ãªããªããDockerã«ã¯æ°ãããã®ãããããããããã§ãã ããŒãã«ããã€ãã®å€æŽãå ããããŸããã ããã€ãã®ã³ãã³ããããã€ãã®å€æŽãå ããããŸããã
ã ãããäžç·ã«åéºãããã ãããå«ãã§ã»ããã ç¹°ãè¿ãã«ãªããŸããã芳客ã®åå ã§ãã ãããŠã質åã®æéããã£ã·ããšæ®ããŠããããšæããŸãã ã ã£ãŠã3æéã§è©±ããã§ãã? YouTubeã§Node.js for Dockerã®ã³ãŒã¹å šäœãæã£ãŠããŸããã 45 åã§ã¯ãããŸããã ãã®è¬æŒã§åãäžããªã質åãããå Žåã¯ãå幎ã«ããã®ãŒã£ãŠããã¹ãŠ YouTube ã§ãªã³ã©ã€ã³ã«ãªã£ãŠããããšã確èªããããšæããŸãã ãããŠããããèŠãŠããã®ç¹å®ã®è³ªåã«çããŠãã ããã ãªããªããç§ã¯æ°ãããã®ã远å ãç¶ããŠããŠãããããã¹ãŠããã«åããããšãã§ããªãããã§ãã
æ°çãšææ°
æ°ãããã®ãææ°ã®ãã®ã«çŠç¹ãåœãŠãŠãä»å¹Žã®æ°ãããã®ããã¹ãŠæã«å ¥ããããããã«ããããšæããŸãã ãããŠãããã§ã®ãã¶ã€ã³ã¯ã誰ã®ããã®ãã®ãªã®ããšããããšã§ãã å³ã ã€ãŸããããªãã¯ããã€ãã®ããŒããšDockerãç¥ã£ãŠããŠããããçŽ æŽãããããããšæã£ãŠããã®ã§ãã ãããŠãç§ã¯ã¢ããã€ã¶ãŒãšããŠå€ãã®ããŒã ãšä»äºãããŠããŸãã åãªãå®è£ è ã§ã¯ãªããç§ã¯åœŒãã®ãã®ãèŠãŠããããæ¹åããæ¹æ³ã«ã€ããŠã¢ããã€ã¹ããŠããŸãã ç©äºãåçåããããšã§ãããã·ã³ãã«ã«ãªããããå®å šã«ãªããŸãã ã ããã仿¥ã¯çŽ æŽããããœãŒã¹ã¢ãŒãã«è¡ããŸãã ãããŠãäž»ã«4ã€ã®ããšã説æããæåŸã«çç£ãã§ãã¯ãªã¹ãã玹ä»ããŸãã
ããã§ãNode ãã¡ã€ã«ãNode Dockerfile ã®ãã¹ã ãã©ã¯ãã£ã¹ããå§ããŸãã ããã¯ãã€ã³ã¿ãŒãããã§å ¥æã§ããåºæ¬ç㪠101 ã§ã¯ãããŸããã ããã¯ããã ãã§ã¯ãããŸããã ãããããããŒã¹ã€ã¡ãŒãžã«ã€ããŠå°ãã話ãããŸãããæ°ãããšããµã€ãã£ã³ã°ãªããšã«ã€ããŠè©±ãããã®ã§ããããããããçµ¶æã®è°·ããšãããããªãé£ããã§ããã 忥ããçã®æ¬çªç°å¢ããšã³ã¿ãŒãã©ã€ãºã°ã¬ãŒãã®ããŒãã€ã¡ãŒãžã«ç§»è¡ããã®ã¯ãæã£ããããé£ããããšã§ãã çããã®äžã«ã¯ãããªãã詊ãããã¹ãŠã®ããšã«ã€ããŠãçŽ æŽãããçµéšãçŽ æŽãããç©èªãæã£ãŠãã人ãããã§ãããã
ããŒãããã»ã¹ã®èµ·åãšã·ã£ããããŠã³ã«ã€ããŠèª¬æããŸãã ãã®ã»ãšãã©ã¯ãå®éã«ã¯ç§ãå幎ãåç §ããããšã«ãªãã§ãããããç§ã¯ããªãã«ãã¹ãŠã®æ žå¿ãäžããããã«ããã«ã€ã㊠15 åã»ã©ç¶ããã®ã§ãç§ãã¡ã¯ãã®åºæ¬ãã«ããŒããŸãã æ¬¡ã«ãç§ã¯ Compose ã倧奜ããªã®ã§ãæ°ãã Compose ã«ã€ããŠã話ãããŸãã ä»ã§ããKubernetesã§äžç·ã«ä»äºãããŠãããã¹ãŠã®ããŒã ããããããæŽŸæãªããŒã«ã䜿ã£ãŠããComposeã¯ãããŒã«ã«éçºã®æé©åãšéçºã»ããã¢ããã®ç°¡çŽ åã®ããã«äœåºŠãè¶³ãéãã§ãããå Žæã§ãã ç§ã¯æ ¹ã£ããã®éçšè ã§ãããéçºã¯ã§ããã ãã·ã³ãã«ã«ããããšæã£ãŠããŸããã? ã§ããããç§ãã¡ã¯çãæ¬çªç°å¢ãšãŸã£ããåãããã«èŠããããéåžžã«äœ¿ããããé«éãªéæ³ã®ãããªéçºã¹ã¿ãã¯ãšããçŸããã¢ã€ãã¢ãæãã§ããŸãã ããã¯é£ããã§ããã? ã§ããããCompose ã¯ããŒã«ã«ã§ãè¿ éã§ãã·ã³ãã«ãªã®ã§ãä»ã§ãæ°ã«å ¥ã£ãŠããŸãã ãã¡ã€ã«ã¯çè§£ãããããããæ°å¹Žã§å€ãã®æ°ããæŽæ°ããããç¹ã«æšå¹Žã®ç§ã®è¬æŒã 2019ã®è¬æŒãèŠãŠããªãå Žåã¯ãªãããã§ãã
ããã«ãŒãã¡ã€ã«
Dockerfileã¯ã人ã ãç¡åå¥ãªæ±ºå®ãäžãå§ããæåã®å Žæã§ãããã€ã³ã¿ãŒãããã¯å€ãã®ããšãééããåŸåããããããããã«Dockerfileã«é£ã³èŸŒã¿ãŸãããã å®éãç§ãããèšã£ãŠããã®ã¯ãã€ã³ã¿ãŒãããã§ãã® 101 ãèŠã人ã¯ããã ãããããšãããã®ã§ããã æãæããŸããã? éå» 10 幎éã®ãã¹ãŠã®ããã°æçš¿ã¯ããããNodeã®ããæ¹ã§ãã
誰ãã圌ããèŠããã®ã圌ãããã®ãã¡ã€ã«ã§ééã£ãŠãããšæãããšãå«ã¶ããšãã§ããŸãã? ããããã12ã®ããšãééã£ãŠããŸãã ãã¹ãŠã«ãããŠã³ããŒã ãããããããããã®äžçªäžã ã³ã㌠ã³ãã³ã㯠2 ã€ãããŸãããããã¯æè¡çã«ã¯æ£ããã§ãã ä»ã«ã¯ãä»ã«äœãèŠãŠããã人ã¯ããŸãã? ããŒã¹ã€ã¡ãŒãžã§ããã? ããã«ã¯ééããªãæ¹åã®äœå°ããããŸããã? ããã¯ãã¹ãŠã®Docker 101 äŸã§ãããããããã€ã³ã¿ãŒãããäžã®èª°ãã䜿çšãã¹ãã€ã¡ãŒãžã§ã¯ãããŸããã ç§ã¯æèŠãæã£ãŠããŸãã WORKDIRã¯å®éã«ã¯éå»3幎éã§ããã€ãã®å€æŽãå ããããŠãããWORKDIRã¯å®éã«ã¯æš©éãæ£ããå²ãåœãŠãŠããŸããããããŒãã€ã¡ãŒãžã¯ãã¹ãŠã®Dockerã€ã¡ãŒãžãšåæ§ã«ããã©ã«ãã§easyã¢ãŒãã§ãããæãå®å šãªãã¹ãã¢ãŒããæå³ããããã§ã¯ãªãããããŸã rootã䜿çšããŠããããšã«æ°ä»ãã§ãããã
2013å¹Žåœæã圌ãããããã®ç»åãäœã£ããšãã圌ãã¯åçŽåãšäœ¿ãããããæ±ããŠããŸããããç§ãã¡ã¯ãããšããªãããããã¹ãŠå€æŽãããã®ãã«ã€ããŠèª¬æããŸãããããå·æ°ããŠãããã忥ã ã£ããã©ãããŸãã? ããã¯å¿ ãããæ¬çªç°å¢ã®æºåãã§ããŠããããã§ã¯ãããŸãããã忥ã®ã€ã¡ãŒãžã§ãã Tier 1 ã§ãµããŒããããŠãããã«ããããã®ã§ãNodeland ã§ç¥ããªãã£ãæ¹ã®ããã«èª¬æãããšãNode ãããžã§ã¯ãã¯ãåºæ¬çã« Node çšã«ããŸããŸãªã³ã³ãã€ã«ãšããŸããŸãªãã©ãããã©ãŒã ããµããŒãããŠãããTier 1ãšã¯äœããšããéå±€ã©ã³ãã³ã°ããããããã¯æé«ã§ãã Tier 1ã®ãµããŒãå¥çŽãªã©ãååŸã§ããŸãã ãã£ã¢ 2 ã¯ãç§ãã¡ãæåãå°œããããšãæå³ããŸãã ããã»ã©éèŠã§ã¯ãããŸãããã詊ããŠã¿ããšãããå®éšçã¯ããŒã¿çã«ãªããŸãã ããŸãããå Žåãããã°ãããŸããããªãå ŽåããããŸãããäœãä¿èšŒããŸããã å¥åŠãªããšã«ããããã¯ç®èãªããšã«ãDockerã§ããæã Alpineã€ã¡ãŒãžãæšå¥šããŠããŸããã仿¥ã¯ããã«ã€ããŠè¯ãæå³ã§ã¯ãªãã話ãããŸãã ã¢ã«ãã€ã³ããã®ãããžã§ã¯ãã¯çŽ æŽããããããžã§ã¯ãã§ãã NodeãAlpineãããã³productionã¯ãå§ãããŸããã
ç§ã¯Nodeã§ 15 幎ãDockerã§ 10 幎åããŠããŸããããæçµçã«ã¯ãç§ãæºãã£ãŠãããã¹ãŠã®ãããžã§ã¯ãã§ãå€§èŠæš¡ãªNodeã®ããšãæ¬çªç°å¢ã§è¡ã£ãŠããå Žåãæçµçã«ã¯Alpineåºæã®åé¡ãçºçããäž»ã«Alpineã§ã³ã³ãã€ã«ãããæ¹æ³ã§ããMuslãåå ã§ãã ãŸããBusyBoxãåé¡ã«ãªãããšããããŸãã ã ããã仿¥ã¯ç§ãã¢ã«ãã€ã³ããå§ãããã®ãèŠãããšã¯ãããŸããããå¿é ããªãã§ãã ãããç§ã¯ããªãã®ããã«ããã«è¯ãæšå¥šäºé ãããããæã£ãŠããŸãã 1 ã€ã¯ãNode ã® Tier 1 ã§ãµããŒããããŠãããã«ãã«ããã€ã¡ãŒãžãå¿ èŠã§ãããAlpine ã¯å®éšçã«èšå®ãããŠããã€ã¡ãŒãžã§ãã
次ã¯ãç»åããã³çãããŸãã ãããã£ãŠãç»åã®ãã³çãã«ã€ããŠç¥ããªãã£ãå Žåã¯ããã°ããçµã¡ãŸãããã¿ã°ã¯åå©çšã§ããããããŸã£ããåãåºæ¬ç»åãååŸã§ããããšãä¿èšŒã§ããŸããã? ãã®å ŽåãNode 20ã䜿çšããŠããããããããã¬ãã«ã®ããŒãžã§ã³ã«åºå®ããŠããŸããããSHAããã·ã¥ããŠããŸãã ããŠãæè¡çã«ã¯ããã®ãããªã€ã¡ãŒãžãSHAããã·ã¥ããå ŽåãDockerã€ã¡ãŒãžã³ãã³ããå®è¡ããã ãã§ååŸã§ããããã·ã¥ãå ¥ãããšãå®éã«ã¯ãâãã€ãžã§ã¹ãã衚瀺ããªã©ã«ãªããŸãã ã³ãã³ããå¿ããŠããŸããŸãããããããã®ããã·ã¥ãååŸã§ããŸãã æè¡çã«ã¯ãã¿ã°ã¯ç¡èŠãããŸãããã¿ã°ã¯ããã¡ã€ã«ã«ãã³çãããå 容ã人éãç¥ãããã®ãã®ã§ãã ãã®ãããSHAããã·ã¥ãåºå®ãããšãã¿ã°ã¯ç¡èŠããããããäžäœäœããæ¥ãã®ããç¥ãããã®ããããããã©ãã«ãšããŠäœ¿çšããŠããŸãã
ã€ãŸããNode 20 bookworm ã¯ããããããŒã¹ã«ãªã£ãŠãã Debian ã®ããŒãžã§ã³ãã€ãŸãææ°ã® Debian ã§ãããæ¬¡ã« Slim ã§ããããšãæå³ããŸã â åžžã« Slim Images ã䜿çšããŠãã ããã ãŸããDocker Hubã®ãã¹ãŠã®ããã°ã©ãã³ã°èšèªã¯ãå ¬åŒã€ã¡ãŒãžãå ¥æã§ããå Žåã¯ãåžžã«Slimã䜿çšããŠãã ããã Debian ã® Slim 以å€ã®å€çš®ã¯æ±ºããŠæ¬²ãããããŸãããããã®çç±ã¯ããã«ãããã§ãããã érootãšããŠå®è¡ããŠããŸãã ããŠãéå»3幎éã§äœããå€ãã£ãã®ã§ãå ¬åŒã®ããŒãã€ã¡ãŒãžã«ããã©ã«ãã§çµã¿èŸŒãŸããŠãããŠãŒã¶ãŒããŒããããã«é 眮ã§ããããã«ãªããŸããã ãŠãŒã¶ãŒã¯æ¢ã«ååšããŸãã ç§ã¯ãããããã«çœ®ããŠãérootãšããŠå®è¡ããããšãã§ããŸãã ãããéµã§ãã å€ãã®Kubernetesã¯ã©ã¹ã¿ãç¹ã«æ¿åºãéèãªã©ã®åéã§ã¯ãã³ã³ãããrootãšããŠå®è¡ããããšã¯ã§ããŸããã ã ãããããªãã¯ãããããªããã°ãªããŸããã ãããŠãä»ãWORKDIRã®åã«ãããè¡ããšãå®éã«ã¯ä»å¹Žã®åãã«ããããã2ã3幎åã§ããããšãç¥ããŸããããWORKDIRãæŽæ°ããŠããã®äžã®ãŠãŒã¶ãŒã«åºã¥ããŠé©åãªæš©éãå²ãåœãŠãããã«ããŸããã
ãããã£ãŠãæåã«ãŠãŒã¶ãŒãé 眮ãããããérootã«ãããã®WORKDIRãäœæãããšãããŒããŠãŒã¶ãŒã«æš©éãé©åã«ä»äžããããããããããæåã§å²ãåœãŠãå¿ èŠã¯ãããŸããã ããããªããç§ã®ããŒãã³ãŒã¹ãåè¬ããŠãã人ãªããç§ãããªãã«èšã£ãŠããæ¹æ³ã¯ãMAKEDIRãšå ¥åããŠãããããã¹ãŠã®ããšãå®è¡ã³ãã³ãã§è¡ããªããã°ãªããªããšããããšã§ãã ãããããããããããå¿ èŠã¯ãããŸããã ãã®æ¹ãç°¡åã§ãã æ¬¡ã«ãã³ããŒããããŸãã ãã®ãããã«ãŒããŠãŒã¶ãŒã§ã¯ãªãéåžžã®ãŠãŒã¶ãŒãšããŠãé©åãªæš©éã§ã³ããŒããŠããŸãã ãã®ãããã³ããŒãè¡ããšãã¯ãã€ã§ãchownã䜿çšããå¿ èŠããããŸãã ãããŠãããã«è€æ°ã®ã¬ãã«ããããããã±ãŒãžãšæ®ãã®ãœãŒã¹ã³ãŒãã®å®éã®ã³ããŒããããŸãã
npmã®ci
ãããŠã次ã¯äœã§ãããã? ãnpm ciãããã£ãŠããŸãã ããã¯å®éã«ã¯æ£ãããããŸããããªããªãç§ã¯ä»æ¥ãç§ãã¡ãnpm ciãã3åããŸãã¯2å倿Žãããããšãç¥ã£ãããã§ãã ä»åã§3åç®ã®æŒåºã§ãã ãããã£ãŠãä»åŸã®ã¹ã©ã€ãã§ã¯ãæè¡çã«ã¯ãnpm ci omit devããæãŸããããšãããããŸãã dev ãããã·ã¥ã§çç¥ããŸãã ã¹ã©ã€ãã«è¡šç€ºããããã®ãªããžããªã«ããããŸãã ã芧ã«ãªã£ãŠããªãæ¹ã®ããã«ãã¹ã©ã€ãã®æåŸã«ããäžåºŠçœ®ããŠãããŸãã ããããã¹ãŠã®ãã®ãå«ããªããžããªå šäœãããšãã°Dockerãã¡ã€ã«ãããããã®ãªããžããªãæ¯å¹ŽæŽæ°ãç¶ããŠããŸãã ãããã£ãŠãããããã¹ãŠã®ã¡ã¢ããã詳现ã«ååŸã§ããŸãã æ¬åœã«æ å ±ã®å¢å Žã§ãã
ãããã£ãŠãéçºã®äŸåé¢ä¿ãåé€ããããéçºã®äŸåé¢ä¿ã鲿¢ããããããnpm ciããå®è¡ããŠããŠãã³ãã³ãã§NPMããã®ä»ã®ããã»ã¹ãããŒãžã£ãŒããŸã å®è¡ããŠããŸããã ç§ãã¡ã¯ãNPMãæ¬çªç°å¢ã§äœ¿çšããŠãé·æã«ãããããã»ã¹ãéå§ããããšã¯æãŸãããããŸãããããã®çç±ã«ã€ããŠã¯ãåŸã»ã©èª¬æããŸãã ããã§ãç§ã¯å®éã«æ¥çã®ããŒã«ãå€ããã«ã€ããŠããã€ãã®ããšã«ã€ããŠç§ã®æèŠãå€ããŸãããããã®ãã¡ã®1ã€ã¯ããããNPMç£æ»ãTrivyã¹ãã£ã³ãå±¥æŽæžã»ãã¥ãªãã£ã¹ãã£ã³ãè¡ãã®ã«æé©ãªæ¹æ³ãããããªãããšã人ã ã«æããŠããããšã§ãã ãããããããã¹ããŒãžãšãã«ãã¹ããŒãžã®Dockerãã¡ã€ã«ãäœãããšãã§ãããããããŸããããç§ã¯ä»ããããããããã¯ãããªããšèšã£ãŠããŸãã
æ¥çã§ã®ç§ã®åžæã®1ã€ã¯ãCIããŒã«ããã«ãã¹ããŒãžãšDockerã³ãã³ãããŸãã¯æ¬è³ªçã«Dockerã®åã¹ããããCIãœãªã¥ãŒã·ã§ã³ã§ç §ããããšãã§ãããã®ãšããŠæ€èšãå§ããåºæ¬çã«Dockerãã¡ã€ã«ã䜿çšããŠå€ãã®CIãå®è¡ã§ããããã«ããããšã§ããã ãããŠãå€ãã®èªååããã¹ãããã®ä»ç§ãã¡ããããªããã°ãªããªããã¹ãŠã®ããšã æ¥çã§ã¯ããã§ã¯ãªãã£ãã®ã§ããã®ããã®æ¹æ³ãšããŠDockerãã«ããæå±ãç¶ããŸãããããããå§ãããŸããã ææ°ã®CIãGitHub ActionsãGitLabãªã©ã¯ãNPMç£æ»ãCVEã¹ãã£ã³ãªã©ãè¡ãããã®ãã€ãã£ããµããŒããå å®ããŠããŸãã ã§ãããããããã®ã¹ããŒãžã¯ãããå§ãããŸããããããã¯çŽ æŽãããããšã§ãã ããã«ãããDockerãã¡ã€ã«ãç°¡çŽ åãããŸãã ç§ãã¡ã¯ãããããå¿ èŠã¯ãããŸããã
Docker init
Docker init ã«ã€ããŠè©±ããŸããã€ãŸããããã¯æ°ããããšã§ããåºèª¿è¬æŒã§èããããšããããŸãããDocker init ã䜿çšãããšããããžã§ã¯ããæåããéå§ã§ãããããç¬èªã® Dockerfile ãä»å±ããŠããŸãããããŠãããã¯ããªãããã®ã³ãã³ããå®è¡ããå Žåã®äžçš®ã®å€èгãªã®ã§ãããªããDockerãåããŠäœ¿çšããå ŽåãDockerã¯ãäžçäžã®ä»ã®ãã¹ãŠã®ããã±ãŒãžãããŒãžã£ãŒãšåæ§ã«ãå°ãªããšããã®initãªãã·ã§ã³ãæã£ãŠããŸããã ãããããã¯çŽ æŽãããããšã§ããæ°ãã人ã«ãšã£ãŠã¯çŽ æŽãããããšã§ããæèŠã¯ãããŸãã誰ã«ãšã£ãŠãå®ç§ã§æ®éçãªãã®ã¯ãªããšããããšã§ããã?ãããŠãããããã®è³ªåãåºãããããããã®çããåºãŠã3ã€ã®ãã¡ã€ã«ãäœæãããŸãããããã¯éåžžã«çŽ æŽãããããšã§ããDocker ignoreã§å§ãŸããDockerfileã§å§ãŸããComposeãã¡ã€ã«ãæäŸããŸããã¡ãªã¿ã«ãComposeãã¡ã€ã«ã¯ä»ãæšæºã¯ãcompose.yamlãã§ãããDocker compose.ymlã§ã¯ãªããããã¯ã 10 幎éãããè¡ã£ãŠããç§ãã¡å šå¡ãå ¥åããŠããããšã§ãããã¹ãŠã®ãã¡ã€ã«åã¯åŒãç¶ããµããŒããããŠããŸãããããã¯æ°ããèŠåã§ã: 'compose.yaml'ããããã£ãŠããããã®ãã¡ã€ã«ãäœæããDockerã®ãäœæããè¡ãããšãæšå¥šããŸãã
ããã§ã¯ãæéããããã¡ã«ç°¡åã«èŠãŠã¿ãŸãããã ã§ããããããã§DockerfileãèŠããšãå®éã«ã¯ããªã掟æã§ãã ãåããªãæ¹ã®ããã«èª¬æãããšãBuildkit ãããã©ã«ãã®ãã«ããŒã«ãªã£ããããããã³ããšã³ããšåŒã°ãããã®ããããBuildkit ãåçã«æŽæ°ãããå€ãã®æ°æ©èœããµããŒãã§ããããã«ãªããŸããã ãã®ãããDockerfileã«ã¯å€ãã®æ°ããããšãèµ·ãã£ãŠããŸãããå¿ ãããOCI仿§ã«å«ãŸããŠããããã§ã¯ãããŸããã ãã㯠Buildkit ã§è¡ãããããã³ããšã³ããšåŒã°ãããã®ãä»ããŠè¡ãããŸãã ãããã£ãŠããã®æ§æè¡ãå ¥ãããšãåºæ¬çã«ä¿èšŒãããã®ã¯ããã¹ãŠã®ããŒã ã¡ã³ããŒãã€ã¡ãŒãžãŸãã¯CIãã«ãã€ã¡ãŒãžããã«ããããšãã«ãå šå¡ãBuildkitãæ¬æ¥ããã¹ãããã«äœ¿çšããŠãããšä»®å®ãããšããããäŸç¶ãšããŠæé«ã®ã³ã³ãããã«ããŒã§ãããããã€ã¡ãŒãžã®ãã«ãå ã§åãæ©èœã»ããã«å¯ŸããŠåããµããŒããåããããšã§ãã é«åºŠãªæ©èœã䜿ãå§ããå Žåã¯ãã©ã¡ããéèŠã§ãã ãã®ãã¡ã®ããã€ãã«ã€ããŠã¯ãããã説æããŸãã å®éããã®ãã¡ã®1ã€ã«ã€ããŠä»ã話ãããŸãã
ããã¯éåžžã«ææžåããããã¡ã€ã«ã§ãããããã¯ãã¹ãŠDockerã«ãã£ãŠçæããããã«ãæã«ãã¡ã€ã«ãããŠã³ããããããªããšãèŠãããŸããã? ã€ãŸããããã¯äœå¹Žãåãããã Buildkit ã®ããã³ããšã³ãæ©èœã§ãã ç§ã¯ãã€ãããã䜿çšãããæšå¥šãããããããã§ã¯ãããŸããã ç§ã¯ããŒã ãèŠãŠã200ã¡ã¬ã®ããŒãã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ããŠããã®ãããããšã0001ã¡ã¬ã®ããŒãã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ããŠããã®ãã倿ããå¿ èŠããããŸãããŸããããŒãã¢ãžã¥ãŒã«ã倧ãããã°å€§ããã»ã©ãããã¯ããŒãã¢ãžã¥ãŒã«ããã£ãã·ã¥ããŠããã®ã§ã¯ãªãããããã®ããŒãã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã«ããã£ãã·ã¥ããŠãããããããŒãã¢ãžã¥ãŒã«ãå±éããåã«ãããã®zipãããŠã³ããŒãããå¯èœæ§ãé«ããªããŸãã ãã®ãããæ§ç¯æã®ã€ã³ã¿ãŒãããæ è¡ãç¯çŽã§ããŸãã ããã¯Buildkitçšã®Dockerãã«ããŒã«ãšã£ãŠéåžžã«ç¹æ®ãªããšã§ãããšç§ã¯ä¿¡ããŠããã®ã§ãBuildkitã䜿çšããå¿ èŠããããŸãã ç¹°ãè¿ãã«ãªããŸããããããæé«ã®ãã®ãªã®ã§ãããã¯åé¡ãããŸããã
ããã§ã圌ãã¯ããªãã«ãã®çŽ æŽãããå°ããªãã¡ã€ã«ãäžããããã¯ããªãããããæé©åããã®ãå©ããŸãããããŠããã¯ãã¡ã€ã«ãã³ããŒããããããã®æ®µéãæã£ãŠããŸãã ãããŠãããã¯ãã¹ãŠåé¡ãããŸããã ç§ãäžç·ã«ä»äºãããŠããããŒã ã§ã¯ãDockerã®ããŒããåããŠäœ¿çšããå Žåãããã¯å€ãã®ããšãåãå ¥ããå¿ èŠããããšæããŠããŸãã ç§ã¯ãããŒã ãæ©ãåã«ãã€ãã€ãããèµ°ãåã«æ©ãããšãæããå©ããããã«ããŠããŸãã ããã¯å°ãæ©æ©ãã«è¿ãã®ã§ã忥ã®Dockerfileã§ã¯ãªããããããŸãããããŸããããã¯çŽ æŽãããããšã§ãã Dockerã¯ãããæäŸããŸãã ç§ãåæã§ããªãããšã®1ã€ã¯ã圌ããããã©ã«ãã§Alpineã«ãªã£ãŠããããšã§ãããããããŸããã«ã³ãã¡ã¬ã³ã¹ã§äœäººãã®äººãšè©±ããŠããã®ã§ããã 10 幎éãAlpineãæ¬çªç°å¢ã§äœ¿çšããŠããããŒã ãæ¯æŽããããšããŠããããç§ã¯ãããããŠæšå¥šããŠããªãã
ä»ã«äœãããŸãã? ããã«ãããäœæãã¡ã€ã«ãæäŸãããŸãããããã«ã€ããŠã¯åŸã§èª¬æããŸãã ããããDockerfileã«ã¯ããªãé åçãªæ°æ©èœãããã€ãåãã£ãŠããŸãã ãã®ãããç±å¿ãª Compose ãŠãŒã¶ãŒã§ããã°ãCompose ããŒãžã§ã³ã¯ãããããŸããã ãã®ãã¡ã€ã«ã§ã¯ãããŒãžã§ã³ 2 ãšããŒãžã§ã³ 3ã®ãã¹ãŠã®æ©èœããµããŒãããããã«ãªããŸããã åºèª¿è¬æŒã§ãã誰ããv3ã§ãã¡ã€ã«ããã€ããã¯ãããŸããã4 ãããã¯ã¬ã¬ã·ãŒãšèŠãªãããŸãã ããŒãžã§ã³ã¯å¿ èŠãããŸããã ãã¹ãŠã®æ©èœã¯ãCompose ããŒãžã§ã³ãåé€ããéããcompose ã³ãã³ãã©ã€ã³ã§äœ¿çšã§ããŸãã å¥åº·èšºæãªã©ã«ã€ããŠã¯åŸã»ã©ã話ãããŸãã®ã§ããã以äžã¯è§ŠããŸããã
é©åãªããŒã¹ã€ã¡ãŒãž
ã ãããå®ç§ãªããŒã¹ã€ã¡ãŒãžã§ãã ãã®è©±é¡ã¯ã5åã§ã 50 åã§ã話ããã®ã§ããã®è©±ã§äžçªå¥œããªéšåã§ãã ããããç§ãäžç·ã«ä»äºãããŠããã»ãšãã©ã®ããŒã ã§ã¯ãå¿ èŠãªãã®ããã¹ãŠæã£ãŠããŠãæãŸãããªãè匱æ§ããªãé©åãªåºæ¬ã€ã¡ãŒãžãèŠã€ããã®ã«å€ãã®æéãè²»ããããŠããŸããããã¯å°ããã§ããããã 3 ã€ãŸã㯠4 ã€ã®ç°ãªãã¡ããªãã¯ããã¹ãŠæºãããŠããŸãã å³ã ãããŠãããã¯ååšããŸãããã? ããã¯ããªãã®ããŒã ã«ç¹æã®ãã®ã§ãããç§ãäžç·ã«ä»äºãããã»ãšãã©ãã¹ãŠã®ããŒã ã¯ãæåãèŠä»¶ãã»ãã¥ãªãã£ããŒã ã®é¢äžã«åºã¥ããŠãç°ãªããã¹ãéžæããŸãã ãããŠãããã¯ãã©ã³ã¹ã®åããè¡çºã§ãã ããå®å šã§å°ããããã°ããã»ã©ãããã䜿çšããããã«ããé«åºŠã«ãªãå¿ èŠããããŸãã ã€ãŸããããŒã ã«äœãå¿ èŠãã«ãããŸãã ãŸããäžéšã®ããŒã ã¯ãããã©ã«ãã®å ¬åŒã€ã¡ãŒãžã®1ã€ã§ãŸã£ããåé¡ãããŸããã
æåã® 3 ã€ããå§ããŸãããã ããªãã®äººçã§æ±ºããŠããã䜿ããªãã§ãã ããã ããã䜿çšããçç±ã¯ãããŸããã ãã®äžã倧ããªãã¬ãã£ããªããšã®1ã€ã¯ãããããã¹ãŠã®CVEãèŠãããšãã§ããŸãã ãšããããã§ãããã¯ç§ãæ¥çã§è€æ°ã®ã¹ãã£ããŒã2ã€ã®ãªãŒãã³ãœãŒã¹ã2ã€ã®ã³ããŒã·ã£ã«ã䜿çšããŠããŸãã ã³ããŒã·ã£ã«ã¯èª€æ€ç¥ãå°ãªãåŸåãããããšã«æ°ã¥ãã§ãããã ããã¯å®ã¯æè¿çºèŠãããããšã§ãã ãããŠã圌ãã¯ä»é±ããªãŒãã³ãœãŒã¹ã®ã¹ãã£ããŒãšã誀æ€ç¥ã®å¯èœæ§ã®ããåé¡ãå ·äœçã«é©çšããŠããåçšã®ã¹ãã£ããŒãšã®éã«ã¯ãééããªãããã€ãã®ç»åã«å€§ããªéãããããšããããšã«ã€ããŠãè€æ°ã®äŒè©±ãããŸããã 圌ãã¯ããããããéãä¿®æ£ããåŸåããããŸãã ããã¯ã°ã©ãŠã³ãã§äœãèµ·ãã£ãŠããã®ãããããããŸããã ãªãŒãã³ãœãŒã¹ã®ã¹ãã£ããŒã䜿ããªããšããããã§ã¯ãããŸããããç§ã«ãšã£ãŠã¯ãDocker Scoutã¯ããŸãæ©èœããŠããŠãæ¬åœã«æ°ãããã®ã§ãã ãŸã å®ç§ã§ã¯ãããŸããããããŒã ã¯å€ãã®ãã£ãŒãããã¯ãåãåã£ãŠããŸãã
ããã§ã¯ãDocker Scout ãå®ç§ã§ã¯ãªãã€ã¡ãŒãžãå®éã«ããã€ãããããšãããããŸãã æ£ããã¹ãã£ã³ãããŸããã ã§ããç§ã¯ãã€ã2çªç®ã®ã¹ãªã ããå§ããŸãã å³ã ã¹ãªã ã¯ãã£ãšå°ããã§ãã å³ã ãµã€ãºã¯4åã®1以äžã§ãCVEæ°ã§ã¯å€§ããªéãããããŸãã ãŸããNodeãå®è¡ããããã«å¿ èŠãªãã®ããã¹ãŠæã£ãŠããŸãã ããŒã¹ã€ã¡ãŒãžãã€ãŸããªãªãžãã«ãšãããã€ã¡ãŒãžã®åé¡ã¯ãç¹ã«ãªãŒãã³ãœãŒã¹ãå¿ èŠãšããããŒã ã«èŠãããããšã§ãã OS ããã±ãŒãž ãããŒãžã£ãŒã®äŸåé¢ä¿ãå¿ èŠãªãããapt ãš yum ãå¿ èŠã§ãã ãããŠããããã©ããªãããšãããšãæåã®ãã®ã¯ãããããã®ãã®ãå«ãŸããŠãããšããããšã§ãã ãããŠãæåã®ç»åãæ©èœããããã«ãªãã°ãããã¯ããŸãããã§ãããã ããããSlimã䜿ãããšãããšãæå®ããŠããªãäŸåé¢ä¿ãæ¬ èœããŠããããããã«ãã倱æããDockerã®åæ¥ã®çµéšã§ãããã©ã«ãã®Nodeã€ã¡ãŒãžã«Mercurialãå«ãŸããŠããããšã«æ°ã¥ããªãã£ããããImageMagickããããŸãã éåžžãNodeã€ã¡ãŒãžã«ã¯å¿ èŠã®ãªããã®ããããããããŸãã ã§ããããããããããã«ãããšããããã¯ãã¹ãŠã®ãã«ãããŒã«ãæã£ãŠããŸãã ãããã£ãŠããã€ããªãã«ããå®è¡ã§ããŸãã æã«ã¯ãããå¿ èŠã§ãã ããããéåžžã¯ãç¬èªã®å®è¡è¡ãé 眮ããŠããããã®ããšãæå®ããŸãã å³ã ã ãããããªãã¯ããã«èŠç¹ãçè§£ããŸãã ã§ããããç§ã¯ããããå§ãããŸããã Alpine ã®ãã®ã«ã¯çŽ æŽããã CVE ã®ãã®ããããŸãããããŸããŸãªçç±ã«ãããé·å¹Žã«ãããç§ã®è¬æŒã§èãããšãã§ãããªããžããªã ãã«è¡ããšãé·æãšçæã«ã€ããŠå€ãã®è©³çްãèšèŒãããŸããã ã¢ã«ãã€ã³ã¯å°ãããŠçŽ æµã§ãããäžè¬çã«ã¯ãå§ãããŸããã muslãšBusyBoxã®æªåœ±é¿ãªãã«Alpineãããå°ããããããšãã§ããŸãã
次ã¯ãæ¯èŒã®ããã« Debian ããèŠãããŸãã Docker Hubããå ¬åŒã«æäŸãããŠãããããã®ããŒãã€ã¡ãŒãžã¯Debianã«åºã¥ããŠãããããããã«çŠç¹ãåœãŠããšãå€ãã®è匱æ§ãããŒã¹ã€ã¡ãŒãžã«èµ·å ããŸãã ããŒãã¯ãããã«ã€ããŠäœãã§ããŸããã ããšãã°ã 12 Slim ã«ã¯ãããå°ãªããæ°ãå°ãªããªã£ãŠããŸãããããã§ãããã€ãã®è匱æ§ããããŸãã ãããŠãããªãã¯UbuntuãèŠãããšãã§ããŸãã
ãŠãã³ã
ãããã£ãŠãUbuntuã¯ç§ã®æšå¥šã€ã¡ãŒãžã®1ã€ã«ãªããŸãã ããã«3ã€ã®æšå¥šäºé ããäŒãããŸãããããã«ãã©ãçãã«ã¯æ ãããªããã°ãªããŸããã ãããã£ãŠãäŒçµ±çã«ãã·ã¹ãã 管çè ã§ããç§ãã¡ã«ãšã£ãŠãUbuntuã«ã€ããŠèãããšããç§ãã¡ã¯æ¬¡ã®ãããªLTSã«ã€ããŠèããŸã 20ã04 ãš 22.04ããããã¯Ubuntuã®é·æå®å®çãªãªãŒã¹ã§ãã ã³ã³ãã㌠ã€ã¡ãŒãžã§ã¯ã 22.04 23.04ãããã¯ãã£ã1è¡ã®å€æŽã§ãã ãããŠçè«çã«ã¯ãæ°ããäŸåé¢ä¿ãåŸãããŸãã ãããŠãã®å Žåãããªãã¯å®éã« 23ã®è匱æ§ãå°ãªãããšãããããŸãã04.
ããã±ãŒãžãããŒãžã£ãŒã®é·æçãªå¯çšæ§ãå°ãç ç²ã«ããŸãããããã¯å°ãéèã«åãããŠããŸãã 仿¥ã¯ããã«ã€ããŠã¯è©±ããŸããã ã§ããããããªãã®äŒç€Ÿã§ã¯ãUbuntu LTSã€ã¡ãŒãžãã䜿ã£ãŠããªããšèšã£ãŠããäŒç€ŸããããããããŸããã ãŸããAWSãAzureã®è€æ°ã®äŒæ¥ã§ã¯ããã¹ãŠã®ããŒã¹ã€ã¡ãŒãžã«å¯Ÿããã¢ãããŒããšããŠãUbuntuããå§ããŠãããããç¬èªã®ã€ã¡ãŒãžãæ§ç¯ããŠããããšãç¥ã£ãŠããŸãã ãã®ããã®æ¹æ³ãããã€ãã玹ä»ããŸãã
ããªãããããè¡ãããšãã§ãã1ã€ã®æ¹æ³ãç¹ã«ããŒãã¯ãéåžžã«å°ããªã€ã¡ãŒãžã§ããUbuntuãäœãããšãã§ããŸããã? Ubuntuã® 22.04 ã¯ä»ã®ãã¹ãŠã®ãã®ãããå°ããã§ãã 69 ã¡ã¬ã ãŸããåŸæ¥ã®Ubuntuãšã³ã¿ãŒãã©ã€ãºãµããŒããçµã¿èŸŒãŸããŠãããããåªããŠããŸãã é·æçãªã¢ããªããã±ãŒãžãããŒãžã£ãŒã®ãã®ãçµã¿èŸŒãŸããŠããŸãã ã€ã³ã¿ãŒãããäžã§ååã«ãµããŒããããŠãããååã«ææžåãããŠããŸãã ãŸããNodeãœãŒã¹ã䜿çšããŠå ¬åŒã®Nodeãã€ããªã远å ã§ããŸãã ã§ããããNodeãœãŒã¹ã«ç²ŸéããŠãã人ãªã誰ã§ããNodeãœãŒã¹ã«ã€ããŠèããããšãããã§ãããããNodeãã€ã³ã¹ããŒã«ãŸãã¯æ§ç¯ããããšããã人ãªããNodeãœãŒã¹ã«ã€ããŠç¥ã£ãŠããã§ãããã ãã®ããããã®ãªããžããªã«ããDockerfileãäœæã§ããŸãã ãããæ§ç¯ããæ¹æ³ã瀺ããŸãã ãããŠãããªãã¯åœŒãã®ããŒããœãŒã¹ãã€ã³ã¹ããŒã«ããã ãã§ãã ãã®æ¹æ³ã®æ¬ ç¹ã®1ã€ã¯ãç§ãæå¥ãèšã£ãã«ãããããããNodeãœãŒã¹ããŒã ãNodeãã€ã³ã¹ããŒã«ããããã«Pythonãå¿ èŠãšããããšã§ãã ãããã£ãŠããã®å Žåã®Nodeã€ã¡ãŒãžã«ã¯Pythonãšãã®ãã¹ãŠã®äŸåé¢ä¿ãå«ãŸããããã«ãªããNodeããã±ãŒãžã«è匱æ§ãããããããŸãã ç§ã¯ãããæ°ã«å ¥ããªãã ãã®ãããPythonã§ã¯ãªãNodeã䜿çšããŠããŸãã ã ãããç§ã¯ãã®éžæè¢ã奜ãã§ã¯ãããŸããã
次ã®ãªãã·ã§ã³ã¯ãDockerfileã§copyã³ãã³ãã䜿çšããŠãNodeã€ã¡ãŒãžããUbuntuã€ã¡ãŒãžã«ãã¹ãŠã®ãã€ããªãã³ããŒããã ãã®ãµã€ãããŒãã®ãããªãã®ã§ãã ãããŠä»ãããªãã¯aptãå¿ èŠãšããŸãããããªãã¯ãã®ãããªäœåãªãã®ããã¹ãŠå¿ èŠãšããŸããã ããªãã¯ããªããæããã®ã ããæã«å ¥ããŸãã å°ããç»åã§ãã ããªãã¯ããã§ 225èšãããšãã§ããŸãã ãã®ãããä»ã®ãã®ãããã¹ãªã ã§ãã ãŸããè匱æ§ã®æ°ãå°ãªãã§ãã ã©ã®ã¹ãã£ããŒã«ãé«å€ãèšçå€ã¯ãããŸããã ãã ãããã®ã¢ãããŒãã®æ¬ ç¹ã® 1 ã€ã¯ããã€ããªã Snyk ãé€ã㊠CVE ã¹ãã£ããŒã«ãã£ãŠååŸãããªãå¯èœæ§ãããããšãæå³ããŸãã ãããSnykã¯ãããã®ãã€ããªãæ€åºããŸããããããã¯aptã«ãã£ãŠã€ã³ã¹ããŒã«ãããŠãããããåç¥ã®ãšãããè匱æ§ã¯ãªãã£ããšå ±åãããŠããŸãã ç§ã¯ãDocker Scoutããã€ã®æ¥ããããè¡ãããšãæãã§ããŸããããããã¹ãã ãšåœŒãã«ç¥ãããã€ããã§ãã æ¬¡ã«ãUbuntuã 23 ãŸã㯠4ã«ç§»åãããšããã¢ã€ãã¢ããããŸã ããããŠããªãã¯ããã§ã¹ãã£ã³ã§çµæãèŠãããšãã§ããŸãã 23ãŸãã¯4ã¯Ubuntuã®äŸåé¢ä¿ã22ãããæ°ãããããCVEã¯æ°åå°ãªããªããŸãã
ãã£ã¹ããªãã¥ãŒã·ã§ã³ã¬ã¹
ãããŠæåŸã«ãæåŸã®2ã€ã¯Distrolessã§ãããããã«ããããªãã¯èª°ã§ãããDistrolesstã䜿çšããŠãã人ã¯ããŸãã? åãã£ãŠ1ã€æã«å ¥ããã ãããã£ãŠãDistrolessã¯ã¯ãŒã«ãªã¢ã€ãã¢ã§ãã ç§ã«ã¯åé¡ããããå°ããªç¹ãå°ããª3ã€ã4ã€ãèŠããŸãã ãããã¯ãããããã¹ãŠã§ããGitHubãªããžããªãåç §ããŠããŸãã æåŸã®ã¹ã©ã€ãã§ãæåã®ã¹ã©ã€ãã«ãããŸããã ããããDistrolessã«ã¯å¯äœçšããããŸãã å€ãã®ãã®ããã³çãããããšã¯ã§ããŸããã ããã¯ç§ãæãããã«æéã®çµéãšãšãã«ããŒãžã§ã³ãä¿æããŸããã ãŸããèšè𿹿³ã«ãããaptãªã©ã¯ã€ã³ã¹ããŒã«ãããŠããŸããã ã€ãŸããããã¯æçµæ®µéã§ãããæ¬è³ªçã«é«åºŠãª Dockerfile ãå¿ èŠã§ããããã«ã ã€ã¡ãŒãžãšããã® Distroless ã€ã¡ãŒãžã«ãã¹ãŠãã³ããŒããéçšã€ã¡ãŒãžãå¿ èŠã§ããããšãç¥ã£ãŠããå¿ èŠããããŸãã
ããã§ãé«åºŠãªãœãªã¥ãŒã·ã§ã³ãæ€èšããŸãããããŸã è匱æ§ããããŸãã å®éãå Žåã«ãã£ãŠã¯ãUbuntuãããå€ãã®è匱æ§ãããå¯èœæ§ããããŸãã ã§ã¯ãDistrolessã®ãã€ã³ãã¯ãDistrolessãå°ããããŠå®å šã«ä¿ã€ããšã ã£ãã®ã§ããªãããã䜿çšããã®ã§ããããã ãããŠããããåžžã«æè¯ã®éžæã§ãããšã¯éããŸããã
ãã§ãŒã³ã¬ãŒã
ããã«ããæ°ãããã®ã¯ãã§ãŒã³ã¬ãŒãã§ãã ãã§ãŒã³ã¬ãŒãã«ã€ããŠèããããšããã人ã¯ããŸãã? 誰ã§ãã ããŠãç§ãã¡ã¯ã«ããã«ãæã«å ¥ããŸããã ã€ãŸããChainguardã¯ãœãããŠã§ã¢ãµãã©ã€ãã§ãŒã³ã»ãã¥ãªãã£äŒç€Ÿã§ãã ãåããªãæ¹ã®ããã«èª¬æãããšãç§ã¯æ¯é±ããã®ããšã«ã€ããŠYouTubeã®ã©ã€ãã¹ããªãŒã ããã£ãŠããŸãã YouTubeã«ã²ã¹ãã«æ¥ãŠããããããã§åå ããŠããããŸãã ç§ãã¡ã¯æ¯é±æšææ¥ã«ã©ã€ããããŠããŠãå»å¹Žã¯ãã§ãŒã³ã¬ãŒãããã£ãŠããŠããšãŠãæ°ã«å ¥ããŸããã ç§ã®æèŠã§ã¯ã圌ãã¯åºæ¬çã«ãWolfiã§äœãããŠãããã説æãããšãDockerã®å ¬åŒã€ã¡ãŒãžãååŸãããããããŒãããåèšèšããããããèªåãã¡ã§ä¿å®ããŠãå šé¢çã«CVEããŒãã«ããŠããŸãã ãããŠã圌ãã¯ããã«ã€ããŠéåžžã«å ¬ã«ããŠããŸãã ãããã¯ããªãŒç»åã§ãã ææãã©ã³ãããããããã®ç»åã§ããã«ããã€ãã®ããšãã§ããŸãããç®±ããåºããŠããã«å€ãã®ããšãç¡æã§å ¥æã§ããŸãã 圌ãã¯ç¬èªã®ã¬ãžã¹ããªãæã£ãŠããŸãã å çºããããŒã ã«ã¯åŒ·ããå§ãããŸãã
ããã¯ããã³ããŒã¯ã³ã§ã¯ãªãã«ããŠããç§ã圌ãã«äœ¿ãããšããŠããç§ã®ããã3ã®ç»åã®1ã€ã§ãã å°ãäžçŽè ã§ãã ãããã®ç»åããã®ããã«éåžžã«å°ãããªããšãã·ã§ã«ããªãã®ã§ãå°ãçè§£ããå¿ èŠããããŸããã? å¿ èŠãªããã±ãŒãžããã¹ãŠæã£ãŠãããšã¯éããŸããã ã ãããããªããããªããããã¯å°ãé£ãããªããŸãã ããã§ããã®ã¹ã©ã€ãã«ãã©ãçããŸãã ãããã¯äž»ãªæšå¥šäºé ã§ãã é äžåã§ãã 圌ãã¯ããªãã®ããŒã ãšåœŒããå¿ èŠãšãããããããªããã®ã«äŸåããŠããŸãã
ã§ããããç®±ããåºããŠããã«äœ¿ããç°¡åãªå ¬åŒã€ã¡ãŒãžã䜿ããããªããããã¯Node-slimã§ããã? SnykãšDocker Scoutã«ãããšãçŸåšãé倧ãªè匱æ§ãé«ãè匱æ§ã¯ãããŸããã ãããã£ãŠãäœãšäžã®ã¿ã§ãã æåã«å®çŸ©ããŠããã¹ãã§ããã ãã¿ãŸããã ãŠã§ããµã€ãã§å®çŸ©ãããŠããŸãã ç³ãèš³ãªãã§ãã ãããŠã2çªç®ã®ç»åã¯ããµã€ãããŒãããç»åã§ãã ãããŠããããã©ã®ããã«èŠãããã確èªãããå Žåã¯ãéåžžã«ç°¡åã§ãã ãããæ£ããçšèªãã©ããã¯ããããŸããããç§ã¯ãã®çšèªã®ãµã€ãããŒããäœãäžããŠããŸãã ã ãããã³ããŒãèŠãã°ã ãããã£ãŠããã®ãã¡ã€ã«ã§ã¯ããããããŒããããã«å ¥ããæ¹æ³ã§ãã ããã¯éåžžã®Ubuntuã€ã¡ãŒãžã§ãã ãããŠãç§ããã®äžã«ããŒããååŸããæ¹æ³ã¯ãã³ããŒã䜿çšããããšã§ãã ãããŠãããã¯ãè€æ°ã®ããŒã ãä»ã®ã¿ã€ãã®ç»åã«å¯ŸããŠãããè¡ã£ãŠããã®ãç®ã«ããæ£åœãªæ¹æ³ã§ãã
ããã§ãäž¡æ¹ã®ç»åãäžçªäžã«å®çŸ©ããŸãã ãããç§ã®Nodeã€ã¡ãŒãžã§ãã ãããŠããããç§ãè¡ãäºå®ã®Ubuntuã€ã¡ãŒãžã§ãããåç¥ã®ãšãããåŸã§ããŒãã䜿çšããŸãããããŒãžã§ã³ã远跡ã§ããããã«ãäžéšã§ããããã¹ãŠãèŠã€ãããã£ãã®ã§ãã ç§ã¯ããããSHAããã·ã¥ããŠãæ¯åãã®æ£ç¢ºãªç»åãååŸããããšãä¿èšŒããããã·ã¥ãæã€å¿ èŠããããŸãã ãããŠãç§ã¯åœŒãã«ãšã€ãªã¢ã¹ãäžããŠããŸãã ãããŠãããã§ãtiniãã«ã€ããŠå°ãã話ãããŸãã ããããããã§ã¯ãããç»åããå¥ã®ç»åã«ããŒããã³ããŒããŠãµã€ãããŒãã£ã³ã°ããŠããŸãã æ£ããNodeããŒãžã§ã³ãæ§ç¯ããããã®å ¬åŒã®Nodeã€ã¡ãŒãžãä¿¡é ŒããŠããããã§ãã ãŸããDocker HubããååŸããNodeã®ããŒãžã§ã³ãæå®ã§ãããããååŸããŠãããã€ããªãæ£ç¢ºã«ææ¡ã§ããŸãã ããŒããœãŒã¹ãPythonãããŒããããããå®éã«ã¯å¿ èŠã®ãªãaptããã±ãŒãžã®äŸåé¢ä¿ã®å¯äœçšãªãã«ãããã«ããããå ¥ããå¿ èŠããããŸãã ãããŠãç§ã¯ãããæ¬çªç°å¢ã§ãã¹ãããŸããã ããã¯4幎ã»ã©åããåºããŠããäŸã§ãããä»ã®ãšããæªåœ±é¿ã¯ãããŸããã ãšããããã§ãã
ãããã£ãŠãããã3ã€ã®ãªãã·ã§ã³ã¯ããªãã®ããã§ãã ãããŠãäžçªäžã«ãã§ãŒã³ã¬ãŒããå ¥ã£ãŠãŸããã? ãã®ãããNode-latest ã€ã¡ãŒãžã§ãã Chainguardã«ããŒãžã§ã³ãåºå®ãããå Žåã¯ãæåçãé«ãŸã£ããããæè¿ããªã·ãŒã倿ŽããŸããã ãŸããã¿ã°ã«åºå®ãããããŒãžã§ã³ãå¿ èŠãªå Žåã¯ãææãã©ã³ã®1ã€ã«éä¿¡ããå¿ èŠããããŸãã ããããç§ãæšå¥šããŠããããã«ããã€ã§ãSHAããã·ã¥ãåºå®ã§ããŸãã ãããŠã圌ãã¯åžžã«ãããã®SHAããã·ã¥ãå©çšå¯èœã«ããããªãã¯ãããã«é Œãããšãã§ããã®ã§ãããã¯æ¬è³ªçã«ããªãã«åããã®ãäžããŠããŸãã
ããã»ã¹ç®¡ç
次ã«é²ã¿ãŸãããã ãããããã»ã¹ç®¡çã ã ããã«ããäœäººã®äººãinitããã»ã¹ã«ã€ããŠç¥ã£ãŠããããtiniãŸãã¯Nodeã§ãããã®ãã®ã䜿çšããŠããŸãã? äœäººãããŸãã? ãŸããååãããã®äººã ãã ãããã ã ããããªãã¯ãã®åé¡ã«ã€ããŠç¥ã£ãŠããŸãã ãããŠãç§ãæèŠãæã£ãŠããŸãã ãã®ãããDockerãšSwarmããããŠKubernetesã®Nodeããã»ã¹ã管çããããã«ãããŒã ãšäœå¹Žãäžç·ã«åããŸããã ãããŠãinitã®åé¡ãçè§£ããããšããããã»ã¹ãã·ã£ããããŠã³ããŸãã ãããŠãåºæ¬çã«ããŠã³ã¿ã€ã ã¯ãŒãã§ãããã€ãããæ¥ç¶ãèŠéãããšã¯ãªããåºæ¬çã«HTTP pingãèŠéãããšããªããããã·ã°ãã«ã®ãŠãµã®ã®ç©Žã«èœã¡ãinitããã»ã¹ãå®éã«äœãããŠããã®ãããŸã³ãã®åãåããå®éã«éçã§ã©ã®ããã«èŠããã®ããNodeã«ã¯ãããã®åé¡ããããã®ã§ããããã
ããã§ãã¹ã©ã€ããæãã€ããŸãã â 仿¥ã¯ããã®éåžžã«è€éãªæ±ºå®æšãäœãããšã«ãªãã2ã€ã®è³ªåã§ã圹ã«ç«ãŠãããšã«æ°ã¥ããŸããã ãããå¿ èŠãã©ããã¯æããŠãããããšãã§ããŸããã ãããŠ1ã€ç®ã¯ãã»ãšãã©ã®å Žåãã³ã³ããã§Nodeãèµ·åãããã®ãšããŠtiniã远å ããããšã§ãã ã ããnpmã§ã¯ãããŸããã tiniã¯Dockerã«çµã¿èŸŒãŸããŠãããããç§ã¯tiniã奜ã¿ãŸãã ã¢ããªã§ã¯ãµãããã»ã¹ãäœæãããŸããããå€ãã®ããŒã ã¢ããªã§ã¯äœæãããŸããã ãã¡ã€ã«ã·ã¹ãã ãžã®åŒã³åºããè¡ãå ŽåããããŸãããå¿ ããããã·ã³äžã§ curl ããã®ä»ã®ãã€ããªãçæãããšã¯éããŸããã ãŸãã¯ãæ¬çªç°å¢ã®Kubernetesã䜿çšããŠããå Žåããã®ãªãã·ã§ã³ã«ã€ããŠç¥ããªãã£ãå Žåã¯ãæ®å¿µãªããããã©ã«ãã§ã¯ãªã³ã«ãªã£ãŠããŸããããå ±æããã»ã¹åå空éããªã³ã«ã§ããŸãã ããããã°ãKubernetesã«ã¯äžæåæ¢ã³ã³ãããšããå·§åŠãªããªãã¯ããããŸã â äžæåæ¢ã³ã³ããã«ã€ããŠèª°ãç¥ã£ãŠããŸãã?
ã³ã³ããã®äžæåæ¢
ãã®ãããäžæåæ¢ã³ã³ããã¯ããã¹ãŠã®Kubernetesãããã§æåã«äœ¿çšãããŸãã ããã¯åžžã«ããã«ãããŸãã è¶ å°åã§ãã 100è¡ãšã 50 è¡ãšãã®ã³ãŒããšãã ãããŠãããã¯ããªããå¿ èŠãšãããŸã³ãã®åãåããšä¿è·ãšä¿¡å·åŠçãè¡ããŸãã ããã¯ããªãã®ããã«ãããè¡ããŸãããããã¯ãããå ã®æ®ãã®ã³ã³ãããšããŠããã»ã¹ãšåå空éãå ±æããŠããå Žåã«éããŸã(æ®å¿µãªãããKubernetes 112 ãäœãã®ããã«ãããã©ã«ãã§ã¯è¡ããªãããšã«æ±ºããŸããã ãããã£ãŠãKubernetesã§ãããtrueã«èšå®ãããšããããå ã®ãã¹ãŠã®ã³ã³ãããåãåå空éã«ãªããåºæ¬çã«Kubernetesã¯pauseãšåŒã°ããç¡æã®initãããŒãžã£ãŒãæäŸããŸãã ãããã£ãŠããã®å Žåã¯tiniã¯å¿ èŠãããŸããã ããªãã¯ãããé¿ããããšãã§ããŸãã
ãã 1 ã€ã®ã±ãŒã¹ã¯ãã¢ããªãã³ãŒãå ã®ã·ã°ãã«ããªãã¹ã³ããå Žåã§ããã®æ¹æ³ã«ã€ããŠè³ªåãããå Žåã¯ãã³ãŒãäŸãš HTTP ã§ã®æ¥ç¶ã®ã«ãŠã³ãã«ã€ããŠèª¬æãã以åã®è¬æŒãžã®ãªã³ã¯ããããŸãã ã§ããããããããªãããããã¯ãŒãã³ã°ããªã¿ã¯çãªãã®ã«èå³ãæã€ãªãããã®ãããªãæ¢ãã«è¡ãããã®ãªã³ã¯ãæåŸã«ãæž¡ãããŸãã ãããã仿¥ã¯ãã®ãã¹ãŠãçµéšããããšã¯ã§ããŸããã ãããããããã®äž¡æ¹ãæ¬åœãªããtiniã¯å¿ èŠãããŸããã ãããŠãããªãã¯èªåèªèº«ãæãããšãã§ããŸããæ¬åœã«é¢åã§ã¯ãããŸããããããªãã¯äžå¿ èŠãªã«ãã»ã«åãé¿ããããšãã§ããŸãã
ã§ããããä»ã®ã¿ããªã®ããã«ãç§ãã¡ã¯tiniãæã£ãŠããã¹ãã§ãã ããã«ãã£ãŒããå ¥ããã¹ãã§ãã ãããŠãããªãã¯ãããããã«çœ®ããŠããã¹ãã§ã¯ãããŸããã ãŸããexec ãããŒãããã«ã¹ãã§ãã¯ã§ã䜿çšããå¿ èŠããããŸãã å®éã«ãã¡ã€ã«ã·ã¹ãã ãåŒã³åºãå Žåã¯ãããã§ãããã䜿çšããå¿ èŠããããŸãã ããã¯å®éã« 2019 ããã®è©±ã§ãã ããã»ã¹ç®¡çãä¿¡å·åŠçã«é¢ããŠã¯ãä»ã§ããã¹ãŠé¢é£ããŠããŸãã å人çã«ã¯ãããããã¹ãŠãNodeã¢ããªã«æžã蟌ãã®ã奜ãã§ãã
ãã®ãããNodeã¢ããªã«ã¯ã·ã£ããããŠã³ä¿¡å·ã衚瀺ãããŸãã ãããæ©èœãããã©ãããç¥ãæ¹æ³ã¯ãDockerã§ã¯ãã®å€ã10ã§Kubernetesã30ç§ã§ãããããNodeã³ã³ããã忢ããããšããŠ10ç§ãããå Žåã§ãããã ãã 10 ç§ä»¥äžãããå Žåã¯ãinitã«åé¡ããããŸãã ãããŠãäœãèµ·ãã£ãŠããããšãããšãNodeã¯Linuxããã®ä¿¡å·ãèªèããŠããããã«ãŒãã«ã¯ä»ããã·ã£ããããŠã³ããå¿ èŠããããšèšã£ãŠããŸãã ãããŠãNodeã¯ããã©ã«ãã§ãããã¯Pythonãä»ã®å€ãã®ããã°ã©ãã³ã°èšèªã«ãåœãŠã¯ãŸããããããã©ã«ãã§ã¯ãããã®ã·ã°ãã«ããã©ããããŸããã ãã®ããã圌ãã¯ãããç¡èŠããDockerã¯ããã匷å¶çµäºããå¿ èŠããããŸãã ããã 10ç§ã®åŸ ã¡æéã§ãã ã§ããããNodeã¢ããªã®ãµã³ãã«ã®ãªã³ã©ã€ã³ãã¢ããããããã£ãŠãããšãCãDockerã®åæ¢ãªã©ãå¶åŸ¡ããŠãã 10 ç§éã ãããã«ããããšã«æ°ä»ãã§ãããã ããã¯ãä¿¡å·ãèããŠããªãããã§ãã ãããã¯ãã¹ãŠinitã§ä¿®æ£ã§ããŸãã
Compose ã®æŽæ°
æŽæ°ãäœæããŸãã ç§ã®ãæ°ã«å ¥ãã®éçºè ããŒã«ã§ãã compose ã«ã€ããŠè©±ããŸãããã ãã3ã4幎ã§å€åããããŸããã ãã®ããã以åã®ä»®æ³ DockerCon ã«åå ããããšããªãå Žåã¯ããããã®å€æŽãã¹ãŠã«æ°ã¥ããŠããªãå¯èœæ§ããããŸãã
ããã§ã倿Žç¹ã®ç°¡åãªäŸãããã€ã玹ä»ããŸãã ããŒãžã§ã³ã¯ãããŸããã ãšãã£ããããŸããã ããŒããSwarmã§ãªãéãã ããªãããŸã Swarmã«ãããªããããã¯çŽ æŽãããããšã§ãã Swarmãã¡ã³ã®ã³ãã¥ããã£ã¯å¢ãç¶ããŠãããææ¥ãå»äžã®ãã©ãã¯ã§å®éã«äŒãäºå®ã§ãã Swarmã§ã¯ã v3ããŸã å€ãããŒãžã§ã³ã®Compose仿§äžã«ããããæè¡çã«ã¯äœ¿çšãããŠããªããããvãå¿ èŠã§ãã ãããããã以å€ã®äººã«ãšã£ãŠã¯ããããåãé€ãããšãã§ããéå» 10 幎éã® Compose ã§äžç·ã«äœ¿çšã§ããªãã£ãå€ãã®æ©èœãæã«å ¥ããããšãã§ããŸããã ãã°ãããä»ãåãããã ããŠããæ¹ãªããv2ã®æ©èœãv3ã«å ¥ããªãã£ããããv2 ãš v3ãæ±ºå®ããªããã°ãªããªãæ¥ããã£ãããšããåç¥ã§ããããããã§ãéã«åå²ç¹ããããŸããã å°ãè€éã§ããã
ä»ãç§ãã¡ãv2 ã§æã£ãŠãããã¹ãŠã®æ©èœãšãv3 ã§æã£ãŠãããã¹ãŠã®æ©èœããã¹ãŠã幞ããªå®¶æãšããŠåã³äžç·ã«ãªããŸããã ãããŠãç§ãäžç·ã«ä»äºãããŠããå€ãã®ããŒã ã䜿çšããŠããããç¥ããªãã£ãç§ã®ãæ°ã«å ¥ãã®1ã€ã¯ã...人ã ã¯ãdepends_onãã«ã€ããŠèããããšããããŸããããããæ¬åœã«åœŒããæã£ãŠããããšãããŠããªãããšã«æ°ã¥ããŸãã Nodeã¢ããªãèµ·åããåã«ãããŒã¿ããŒã¹ã®ã¹ããŒããèªã¿èŸŒãŸããã®ãåŸ ã¡ããã£ãã®ã§ãã ãŸããããªãã¯ãããè¡ãããšãã§ããŸãã ããªãã¯ãããè¡ãããã«ãã®ç¹å®ã®æ¹æ³ã䜿çšããå¿ èŠããããŸãã ãdepends_onããå ¥åããããŒã¿ããŒã¹ãªã©ãäŸåãããµãŒãã¹ãå®çŸ©ããŸãã ãããŠãããªãã¯å¥åº·ãªãµãŒãã¹ã®ç¶æ ãèšããŸãã
ãããŠããã®æ¬åœã®ã¯ã€ãã¯ã®YAMLãã¡ã€ã«ããèŠãããŸãã ã ãããããªãã¯ç§ãäœãèŠãŠããã®ãç¥ã£ãŠããŸãã ãããŠããããç§ã®Nodeã¢ããªã®ããã«ç§ãè¡ãããšã§ãã ç§ã¯DBããdepends_ããšèšããŸãã æ¡ä»¶ã¯æ£åžžã§ããå¿ èŠããããŸãã ã ããããªãã¯ãããè¡ãããšãã§ããŸãã 30ã€ã®ç°ãªããã€ã¯ããµãŒãã¹ãå«ã Compose ãã¡ã€ã«ãèŠãŠããŸããããŸããæ°ãããããã¡ã€ã«æ©èœã䜿çšããŠãå®éã«ãããããã£ã³ã¯ã«æ ŒçŽããå¥ã ã®æéã«èªã¿èŸŒãããšãã§ããŸãã ãããŠããããã¯RedisãšPostgresããããŠããã¯ãšã³ãã¯ãŒã«ãŒã«äŸåããŠããŸãã ãããŠãããããã¹ãŠãæåã«å®è¡ãããªããã°ãªããŸããã ãã®ãããä»ã®äœãã«äŸåãããã¹ãŠã®ãµãŒãã¹ã«ããã远å ããŸãã æ¬¡ã«ãäŸåãµãŒãã¹ã§ãæ£åžžæ§ãã§ãã¯ã远å ããŸãã
ãŸããããŒã¿ããŒã¹ã§ã¯ãPostgresã®ãã«ã¹ãã§ãã¯ãè¡ãã ãã§ãããã¯å®éã«ã¯éåžžã«ç°¡åãªãã®ã§ãã ç§ã¯å®éã«ããã«å ¥ãããšãã§ããŸãã ãŸããSQL ã¯ãšãªãå®è¡ããç¹å®ã®ã¬ã³ãŒããæ€çŽ¢ããŸãã ãã®ãããããŒã¿ããŒã¹ãã·ãŒãããããšãããããŸãã ã€ãŸããããã¯åçŽãªDockerãã«ã¹ãã§ãã¯ã§ãã ãåãã®ãšãããKubernetesã§è¡ãã®ãšåãçš®é¡ã®ãã«ã¹ãã§ãã¯ã§ãã ãããŠãããŒã¿ããŒã¹ãRedisãªã©ãããã¯ãšã³ãã«ãããããéããDockerãæ§æãããšãããã«åº§ã£ãŠããã«ã¹ãã§ãã¯ãç·è²ã«ãªããŸã§åŸ ã£ãŠãããµãŒãã¹ãéå§ããŸãã ãããŠãããããé£éãããããšãã§ããŸãã ãã®ãããããã¯ãšã³ã API ãããŒã¿ããŒã¹ãåŸ æ©ããããã³ããšã³ãã API ãåŸ æ©ããããã«ããããšãã§ããŸãã ããããäžãŸã§é£éãããããšãã§ããŸãã ãããŠãããããã¹ãŠå ¥ããã®ã¯YAMLã® 10 è¡ã§ãã ãã®ãããææ°ããŒãžã§ã³ã§ãããååŸããŠããŸãã
次ã¯ãæ¡åŒµãšCLIã®ãªãŒããŒã©ã€ãã§ãã çãããäœæäœæ¥ãã¹ã±ãŒã«ã¢ãããããã©ããã¯ããããŸããããincludesã¯ãäœæãã¡ã€ã«ã®å é ãã©ãã«ã§ã衚瀺ã§ãããŸã£ããæ°ããæ©èœã§ãã äœæãã¡ã€ã«ã®ã«ãŒãã«é 眮ããŸãã ä»ã«ãæã¡èŸŒãã§ã»ãããã¡ã€ã«ããããŸãã Extendsã¯ããå°ãæè»ã§ãç§ã¯ããã奜ãã§ããããã¯ãç§ãã¡ãé·ãéæã£ãŠããéåžžã«ããäŒŒãæ©èœã§ãã ãããŠãCLIãªãŒããŒã©ã€ãã¯ãããŒã å šäœã«äœæãã¡ã€ã«ãæäŸã§ãããããæ£çŽãªãšãããç§ãæããã䜿çšãããã®ã§ãã ãããŠããããã¯ãã¹ãŠãcompose override.yaml ãšããå¥ã®ãã¡ã€ã«ãäœæã§ããŸãã ãããŠããã®ãã¡ã€ã«ã¯ãéçºã»ããã¢ããã®ç°å¢å€æ°ãå«ããã¹ãŠã®èšå®ã倿ŽããŸãã ãããã£ãŠãç°ãªãããŒããå¿ èŠãªå Žåããç°ãªãç°å¢å€æ°ãŸãã¯ç°ãªããã¹ã¯ãŒããå¿ èŠãªå Žåã ãããŠããã®ãã¡ã€ã«ãç¡èŠããŠç¡èŠããå¥ã®åæãã¡ã€ã«ãå¿ èŠãšããã«ã誰ããç¬èªã®ã«ã¹ã¿ã ã»ããã¢ãããæã€ããã«ããŸãã
CI ãã¹ããªã©ã®ãªãŒããŒã©ã€ããè¡ãããšãã§ããŸãããã®ããããã¹ãŠã®CIãã¹ãå€ãå ¥ãããªãŒããŒã©ã€ããè¡ãããšãã§ããŸãããŸããã·ã³ãã«ãªåºæ¬ã®éåžžã®äœæãã¡ã€ã«ãäœæããã«ã¹ã¿ãã€ãºããªãŒããŒã©ã€ãããããšãã§ããŸã (ããããªãŒããŒã©ã€ããšåŒã³ãŸã)ããããã£ãŠãããã¥ã¡ã³ãã§ããããã¹ãŠã調ã¹ãããšãã§ããŸããå®éãç§ã¯1ã€ãã¯ãªãã¯ããŠããã衚瀺ããã€ããã§ããããèŠç¹ã¯ããããŸããæè¿ãããã°èšäºãæ²èŒããŸãããNicholasã¯ã Dockeräœæã®æ¹åã«é¢ããçŽ æŽãããããã°æçš¿ãæçš¿ããŸããã1 ã€ã®äœæã»ããã¢ããã«çµã¿èŸŒãŸããããŸããŸãª YAML ãã¡ã€ã«ãäœæããããŸããŸãªæ¹æ³ããã¹ãŠèª¬æããŸãããããŠãããã¯ããã¹ãŠã®æ¹æ³ãããããã®é·æãšçæããããŠã©ã¡ããã仿¹ããã䜿çšãããçç±ã«ã€ããŠã®éåžžã«åªãããŠã©ãŒã¯ã¹ã«ãŒã§ãã
次ã¯ã éçºã圌ãã¯åºèª¿è¬æŒã§ããã瀺ããŸããã? æãåºããŸããã ã€ãŸããéçºã¯æèšã«ãšã£ãŠãŸã£ããæ°ãããã®ãªã®ã§ãã æèšã«ã€ããŠã¯åŸã»ã©èª¬æããŸãã æèšã¯ä»å¹Žã®ç§ã®ãæ°ã«å ¥ãã®æ°æ©èœã§ãã ãŸããã»ãšãã©ã®äººãç¥ããªãæ°æ©èœãå ¥æã§ããNodeãšã¯é¢ä¿ãããŸãããããdocker compose lsããåŸãããŸãã ãã®ãããè€æ°ã®ãããžã§ã¯ãããã¹ãŠå®è¡ãããŠããå Žåãå®éã«ã¯ 1 ã€ã®ã³ãã³ãã§ãã¹ãŠã確èªã§ããŸãã ããªã䟿å©ã§ãã å®è¡äžã®ãã®ããå¿ããŠããä»ã®ãã£ã¬ã¯ããªããããã©ããã確èªã§ããŸãã
ãããŠãå æãdocker compose alpha publishããããŒã³ããããã°ããã§ãã ãããŠãããã¯ç§ãçŽ5幎åããæ±ããŠããããšã§ãã æ¬¡ã«ããã®ã³ãã³ãã§äœæãã¡ã€ã«ãé 眮ããŸãã åºæ¬çã«ã¯ã€ã¡ãŒãžã«èªåçã«é 眮ãããã¬ãžã¹ããªã«ããã·ã¥ããããããã³ãŒããªãã§äœæãã¡ã€ã«ããããã€å¯èœãªãªããžã§ã¯ããŸãã¯ã¢ãŒãã£ãã¡ã¯ããšããŠå ±æã§ããŸãã ãããŠãããã¯Kubernetesçšã§ãã Helm ã«ã¯ Kubernetes ãããã§ã¹ãã®ã«ã¹ã¿ãã€ãºãªã©ããããŸãããCompose ã«ã¯å æãŸã§ãããŸããã§ããã ã ãããããã¯ããã«ãããŸãã
ãããã£ãŠãcompose watchã¯äžçªäžã«ãã®ããã«èŠããŸãã ãdocker compose watchããšå ¥åããŠããŸãã ãããŠãããã«ã¯è¿œå ã®yamlãå¿ èŠã§ãããããã«ã€ããŠã¯åŸã»ã©èª¬æããŸãã ãããããã®äœåãªyamlã远å ãããšãã»ãšãã©ã®å Žåãéçºçšã®ãã€ã³ãããŠã³ããè¡ãå¿ èŠããªããªããŸãã NPMã®ã€ã³ã¹ããŒã«ããã©ãŒãã³ã¹ãããã€ã³ãããŠã³ãã䜿çšããããŒã«ã«ãã·ã³ã§ã®ãã«ãããã©ãŒãã³ã¹ã«èŠåŽããŠãã人ã¯ããŸãã? Mutagenã詊ããdocker syncã詊ããŸããã ããŒãã³ã¢ãªå Žåã¯ãrsyncã詊ããŠã¿ãŠãã ããã ããããªã¯ã¬ã€ãžãŒãªããšããããããããªãã
ããŠãä»ãå€ãã®ã±ãŒã¹ã§ compose ãŠã©ããããããŸã â ç§ã話ããããäžç·ã«äœæ¥ããããäŸãèŠãããããŠãã人ãã¡ã¯ããœãŒã¹ã³ãŒãã®æçžãåé¿ã§ããããã«ãªã£ããšèšã£ãŠããŸãã ãã®ããããã¹ãäžã®ãã¡ã€ã«ã®å€æŽãç£èŠããããã¯ã°ã©ãŠã³ãã§ã³ã³ããã«ã³ããŒããããæ§æã«åºã¥ããŠã€ã¡ãŒãžãåæ§ç¯ããŸãã ãã®ãããç¹ã«MacãWindowsåŽã§å¯ŸåŠããªããã°ãªããªãOSå¢çéã®ãã€ã³ãããŠã³ããåé¿ã§ããŸãã
ããã§æåŸã«ããã®ã»ã¯ã·ã§ã³ã§ãã ããããªãã以åã«å·åŸ¹ãªç®ã ã£ããããããèŠãŠãäžäœäœã ãšæã£ããããããŸããã ã ããããã¯ç§ã®Nodeã¢ããªã§ãããããã䜿çšããŠãããã±ãŒãžããã¯ãã¡ã€ã«ã®ããã±ãŒãžã倿Žããå Žåã«ããdocker compose watchããå®è¡ãããã³ã«ã€ã¡ãŒãžãèªåçã«åæ§ç¯ããããšãéç¥ããŠããŸãã ãããŠããã£ã¬ã¯ããªã«äœãããªããç£èŠãã倿Žãããå Žåã¯ãå®è¡äžã«ãã®ãã¡ã€ã«ãã³ã³ããã«åæããŸãã
node monã¯ã³ã³ããå ã«ãããã³ã³ããå ã®å€æŽã確èªããã³ã³ããå ã®ã¢ããªãåèµ·åãããããã³ã³ãããå®å šã«åèµ·åãããããå°ãé«éã§ãããããããããnode monã®ããã«ãããå®è¡ããå¿ èŠããããŸãã ãããã£ãŠãNodeã¢ããªçšã«ããã远å ãããšãNodeåºæã§ã¯ãããŸããããNodeéçºè ã«ãšã£ãŠã¯éåžžã«äŸ¿å©ã§ãã ãã®åŸããããå®è¡ãããã³ã«ãå®éã«äœãããŠãããã確èªã§ããŸãã ããã¯ãã€ã¡ãŒãžããã«ããã€ã¡ãŒãžãæ§ç¯ãããããããã¹ãŠãµãŒãã¹ãšããŠã¹ãã³ã¢ããããéåžžã«äžéšã®å°ããªããã¹ããŸã§è¡šç€ºããããããdocker compose upãã«åã£ãŠä»£ãããŸãã ããã¯èŠå®ããšèšã£ãŠãããããã¯ç§ã®ãã¹ããå€åãç£èŠããŠããå Žæãžã®ãã¹ãç§ã«äžããŸãã ã€ãŸããnode mon ãä»ã®ãã¡ã€ã«ç£èŠãŠãŒãã£ãªãã£ã® 1 ã€ã«äŒŒãŠããŸããããã€ã³ãããŠã³ããªãã§ã³ã³ããã®å¢çãè¶ããŠçºçããŸãã ããªãã¯ãŒã«ã§ãã
çç£ãã§ãã¯ãªã¹ã
倧äžå€«ã§ãã æåŸã«ãã質åãããã°ãæ°åãæéãããã ããŸãããããã¯å¶äœãéå§ããããã®ç°¡åãªãã§ãã¯ãªã¹ãã§ãã ãããã¯ç§ã粟ç¥çã«èããŠããããšã§ãããNodeã§ã®ã¹ããŒã¿ã¹ã«é¢ä¿ãªããããŒã ãšäžç·ã«ä»äºãããŠããŸãã çç£ã«å ¥ãåã«ã圌ãã¯ãããã®ããšãããŠããŸãã? ããã¯éåžžã«çŠç¹ãçµã£ãŠããããã§ã¯ãããŸããããæããã«ãdockerç¡èŠããã¡ã€ã«ã§ãã ç§ãäžç·ã«ä»äºãããŠããããŒã ã®äžã«ã¯ãã³ã³ããã®æåã®1幎ã2幎ã§ãDockerã®ç¡èŠãå¿ èŠã§ããããšã«æ°ã¥ããŠããªã人ãããããããã®ã¯é©ãã¹ãããšã§ãã git ignoreãã¡ã€ã«ã®ã³ããŒãäœæããããã«ããŒãã¢ãžã¥ãŒã«ã远å ãããšãéåžžãããŒããŸãã¯root以å€ã®ãŠãŒã¶ãŒãšããŠå®è¡ãããŠãããšããåé¡ã解決ãããŸãã å³ã
圌ãã¯tiniãŸãã¯å¥ã®initããã»ã¹ã䜿çšããŠããŸãã 圌ãã¯ãæ¬çªç°å¢ã§ mon ãããŒãåããããã« PM ã䜿çšããã« Node ãçŽæ¥åŒã³åºããŠããŸãã ãåç¥ã®ããã«ãPMãyarnããã®ä»ã®ããŒã«ã§ã¯ãããŒããçŽæ¥åŒã³åºããã â å°ãªããšããtini ã« Node ãçŽæ¥åŒã³åºããŠãããããã®ã§ãã å¥åº·èšºæãåãããã ãããã®ãããŒã㯠Kubernetes ã§å¿ èŠã«ãªããŸãã ãã ããDockerã§ã¯ããã«ã¹ãã§ãã¯ãšDockerãã¡ã€ã«ãå ¥åããã ãã§ãã ããªãããããæã£ãŠãããªããããªãã¯ããŒã¿ããŒã¹ãåŸ ã€ããã«ãdepends_onãã䜿ãããšãã§ãããšæããŸããã? ãããããã®ããã«ãããŒãã«APIãæ»ã£ããšæ³åããŠãã ããã Dockerfile ã«ãã«ã¹ãã§ãã¯ã远å ããå Žåãä»ã®éçºè ã¯ãæåãã«ã¹ãã§ãã¯ã®è¿œå äœæ¥ãè¡ãããšãªããäŸåé¢ä¿ãç°¡åã«èšå®ã§ããŸãã
ãããã£ãŠãDockerfileã«å ¥ãããšãäœæãã¡ã€ã«ã§ãããåé¿ã§ããŸãã omit dev ã³ãã³ããš npm ci ã³ãã³ãã䜿çšããŸãã ããããç§ãã¡ãåžžã«å¶äœã®é²ãæ¹ã§ãã
ããªãã®ãœãŒã¹ã³ãŒãã§ã¯ããããã¯ç§ãããªãã«ãã£ãŠãããããããšã§ãã ããªãã®ããŒã ãNodeã®ãœãŒã¹ã³ãŒããå¶åŸ¡ããŠãããšä»®å®ããŠãSIGTERMãšSIGINTã®ããã»ã¹ããã£ããã£ããé©åãªã·ã£ããããŠã³ãåŠçããããã«ãé¡ãããŸãã Webãµã€ããWebã·ã¹ãã ãããŠã³ã¿ã€ã ãŒãã®ãããã€ãæ¢ããŠããå Žåãåºæ¬çã«ã¯ãããããã·ã¹ãã ã®ããã¬ã€ã€ãŒã§ãHTTPæ¥ç¶ãç£èŠããFINãã±ãããããã³ããšã³ããã©ãŠã¶ã«éä¿¡ããã¯ã©ã€ã¢ã³ããäœã§ãããããããå¥ã®æ£åžžãªã³ã³ããã«èªåçã«ã«ãŒãã£ã³ã°ããå¿ èŠããããŸãã ãã®ã³ã³ããã¯ã·ã£ããããŠã³äžã ããã§ãã ãããŠãstoppableã®ãããªãããžã§ã¯ãã調ã¹ãããšãã§ããŸãããããã¯node.jsã npmãããžã§ã¯ãã¯ãæ¥ç¶ãé©åã«ã«ãŠã³ãããåºæ¬çã«äººã ãåæããŠããŒãæ¥ç¶ããªã»ããããããšãªããããŒãã³ã³ããã®æ£åžžãªã·ã£ããããŠã³ãè¡ãæ¹æ³ã§ããFINãã±ãããæäŸããŸãã
ãã¡ã€ã«I/Oããã£ãŠããå Žåãç»åãã¢ããããŒãããŠãã¡ã€ã«ã·ã¹ãã äžã®äœããã®ã·ã¹ãã ã«ä¿åãããªã©ããŸã å€ãã®ãã¡ã€ã«I/Oãè¡ã£ãŠããããŒã ãšä»äºãããŠåŠãã ããšã¯ãããæç¹ã§æš©éãæ¬çªç°å¢ã§ãå°»ãåãããšã«ãªããšããããšã§ãã ç¹ã«ããããã¯ãŒã¯äžã§NFSãªã©ã䜿çšããŠããå Žåã¯ãªãããã§ãã ãã®ãããããŒãã®èµ·åæã«é©åãªæš©éãæ¢ãã³ãŒããé 眮ããŠããããæåŸ ããå Žæã«é©åãªæš©éã衚瀺ãããªãå Žåãã¢ããªãã¯ã©ãã·ã¥ããŸãã ãšããã®ããå€ãã®å Žåãæ¬çªç°å¢ã«é²ã¿ãæ°æ¥åŸã«ã¯èª°ããPDFã¬ããŒããã¢ããªãªã©ãã¢ããããŒããããªã©ããŠããŒã¯ãªããšãããããã§ãã ãããŠã誰ããAWS EC2 ã倿Žããçªç¶åæ¢ããããå°ãªããšããŠãŒã¶ãŒãæ¬åœã«æªãçµéšããããããããã«ãæš©éã®åé¡ããããŸãã
ãã®ãããããŒãã®èµ·åäžã«ãã£ã¹ã¯ã«æžã蟌ãå Žåã¯ããã¡ã€ã«ã®ã¢ã¯ã»ã¹èš±å¯ã®ç¢ºèªãéå§ããããšãåŠã³ãŸããã HTTP ã§ãªãã¹ã³ããŠããå Žåã¯ãDockerãComposeãSwarmãKubernetes ãªã©ããããããã®ãã¢ããªãç£èŠã§ããããã«ãå ±éã®æšæºæ£åžžæ§ãæ£åžžæ§ãšã³ããã€ã³ããæäŸããŸãã HTTP ã¢ããªã䜿çšããããªãã¹ã³ ããŒãããªãå Žåãé垞㯠30 ç§ããšã«æžã蟌ã¿ããã£ã¹ã¯äžã®ãã¡ã€ã«ã«æ£åžžæ§ç¶æ ãæžã蟌ã¿ããããŒããŸãã¯æ£åžžæ§ãã§ãã¯ã§ãã®ãã¡ã€ã«ã®æ¥ä»ã¿ã€ã ã¹ã¿ã³ããæ¢ããŸãã ãŸãã¯ããã®ãã¡ã€ã«ã®å éšãèŠãŠãç§ãã¡ãäžããããŒã¿ãæ¢ããŠãã ããã ããããéäžå ŽãµãŒãã¹ãžã®å¯ŸåŠæ¹æ³ã§ãã
ãããŠæåŸã«ãKubernetesãããã«ã€ããŠã¯ãDockerã ãã§ãªãããã¹ãŠã®ã³ã³ãµã«ãã£ã³ã°ã¯ã©ã€ã¢ã³ãããã¹ãŠã®åŠçã«äœ¿çšããŠããæšå¥šããã仿§ããããŸãã ãããŠããããã€ããã§ãã ããã 30ç§ãããã£ãã®ã§ãç§ã¯ãããééãããã€ããã¯ãããŸããããããããã®äŸã¯ããã¹ãŠã®ã»ãã¥ãªãã£æ©èœãšãããã仿§ã«å¿ èŠãªãã¹ãŠã®ãã®ãæäŸããçŸåšã¯æã£ãŠããªãå¯èœæ§ããããã®ãæºåããŠããå¿ èŠããããŸãã ãããŒãããªã¹ããŒãterminationGracePeriodSeconds ã®èšå®ãç¹æš©ãšãšã¹ã«ã¬ãŒã·ã§ã³ã®ç¡å¹åãéç¹æš©ãŠãŒã¶ãŒãšããŠå®è¡ããŠããããšã確èªããããšãããã³ã»ãã¥ãªã㣠ããŒã ãæºè¶³ã§ããããã«ãããé©çšããããšã«ã€ããŠèª¬æããŸãã ãããŠæåŸã«ãDockerãããã©ã«ãã§æã£ãŠããsetcompProfilesãæå¹ã«ããŸããããã¹ãŠã®ããããŸãã¯ã¯ã©ã¹ã¿ãŒã®ã¬ãã«ã§è¡ããªãéããKubernetesã¯ããã©ã«ãã§ç¡å¹ã«ããŸãã
ããã§ãããŸãã æéããªããªã£ãŠããŸã£ãã®ã§ã質åãåãä»ããŠãããŸãã ããããšãããããŸãã
ããã«è©³ãã
- ããŒãããã«ãŒã®å ¬åŒã€ã¡ãŒãžã®äœ¿ç𿹿³
- Docker Init: 1 ã€ã® CLI ã³ãã³ãã§ Dockerfiles ãåæåãããã¡ã€ã«ãäœæããŸã
- ã³ã³ãããšã¯
- Docker Desktop ã詊ã
- ããã«ãŒ101ãã¥ãŒããªã¢ã«Â
Dockerã¯åããŠã§ãã?ã¯ããã«ã