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ã¯åããĻã§ãã?ã¯ãããĢã