Dockerfile: æåããæé©åãŸã§
ããã«ã¡ã¯ãDockerfileãžãããã:éå§ããæé©åãŸã§ã ããããã»ã«ãŒã«ãœã³ã§ãã ç§ã¯Dockerã®ããã¥ã¡ã³ãããŒã ã«æå±ããŠããŸãã ç§ã¯ãã¯ãã«ã«ã©ã€ã¿ãŒã§ãã 仿¥ã¯ãDockerfileãšãDockerã§ãã«ãããæé©åãããDockerfileããŒãããäœæããæ¹æ³ã«ã€ããŠèª¬æããŸãã
ç§ã¯çŽ1幎äœãåã«Dockerã«å ¥ç€ŸããŸããããããŠããã以åã¯Dockerã䜿çšããŠããŠã Docker Composeã䜿çšããŠã€ã¡ãŒãžãæ§ç¯ããããšã«æ £ããŠããŸããããããŠããããäœãæå³ããã®ããããªãããçè§£ã§ãããšæããŸããããããããã®è¬æŒã¯ãMobyãšBuildKitã®ã¡ã³ãããšéåžžã«ç·å¯ã«ååããåœæç¥ããªãã£ããã¹ãŠã®ãã³ããšã³ããåŠãã æšå¹Žã§åŠãã ããšããŸãšãããã®ã§ãã
è°é¡
仿¥ã®è¬æŒã®è°é¡ã¯ããã«ããšã¯äœãããã«ãã«äœãå«ãŸãããããã«ãã§äœ¿çšãããã³ã³ããŒãã³ãã¯äœãã®ç޹ä»ã§ãã ãããŠãçŸæç¹ã§ã¯Dockerfileã¯å«ãŸããŠããŸããããæ°ããDockerfileãæåããäœæããå°ããªãã¢ãããžã§ã¯ãããããŸãã æ¬¡ã«ããã® Dockerfile ã䜿çšããŠããã«ãã®å®è¡ãé«éåããããã€ã¡ãŒãž ãµã€ãºãå°ãããããããããã«æé©åããæ¹æ³ã確èªããŸãã æåŸã«ãããé«åºŠãªæ©èœãèŠãŠãããŸãããå¿ ãããé«åºŠãªæ©èœãšã¯éããŸããã ãã ãããã«ãã®æè»æ§ãæ¡åŒµãããããã«ãã«å€æ§æ§ã远å ãããããã¹ããªã©ãDocker ãã«ãã§ã§ããããšãç¥ããªãã£ããããããã«äœ¿çšã§ããæ©èœããããŸãã ããã§ã¯ãæ¬é¡ã«å ¥ããŸãããã
Dockerfile ãšã¯
ãã¹ãŠã¯ Dockerfile ããå§ãŸããŸããDockerfile ã¯ããã«ãã®ã¹ããããå®è¡ãããã«ãåœä»€ã§ãããããŠãããã¯DSLããã¹ããã¡ã€ã«ã§ããæ§æã¯SQLã«äŒŒãŠããŸããããã«ã¯ãåºåãäœæããããã«ãã«ããŒã«ãã£ãŠå®è¡ãããäžé£ã®åœä»€ãå«ãŸããŠããŸããåºæ¬çãªãå°ããºãŒã ã¢ãŠããããšãDockerfileãå®éã«ããããã¹ãŠã®ããã³ããšã³ãã«ãªã£ãŠããŸãããããã¯ç§ã«ãšã£ãŠé¢çœãããšã§ããããã¯ããã«ãããŒã ã®ååãããã¯ãšã³ãã§ã©ãã ãé¢ããŠãããã瀺ããŠããŸãããããããšã«ãããããã¯æããã«ããã³ããšã³ãã§ããæ¬¡ã«ã Docker Engine ãš Docker Desktop ã«çµã¿èŸŒãŸããã³ãã³ãã©ã€ã³ ã¯ã©ã€ã¢ã³ãã§ãã Buildx ããããŸãããããã¯ããã«ããåŒã³åºãããã«äœ¿çšãããŸãã
Docker ãã«ããå®è¡ãããšãã¯ãBuildx ã䜿çšããŠããŸãããããŠãå®éã«ãã«ããå®è¡ããŠãããšã³ãžã³ã§ãã BuildKit ããããŸãã仿¥ã¯äž»ã«ããã³ããšã³ãã«ã€ããŠèª¬æããŸããããã«ããåŒã³åºãã«ã¯ Buildx ã䜿çšããŸãããããŠããã«ãã³ã³ããã¹ãããããŸããããã¯ãæ¬é¡ã«å ¥ãåã«èšåãããã£ãããšã§ãã
ãã«ã ã³ã³ããã¹ã㯠Docker ã³ã³ããã¹ããšã¯ç°ãªããŸãã ãåãã®æ¹ãããã£ããããšæããŸããããã«ã ã³ã³ããã¹ãã¯ããã«ããã¢ã¯ã»ã¹ã§ãããã¡ã€ã«ã®ã»ããã§ãæž¡ããŸãã ã³ãã³ã ã©ã€ã³ã§ docker build ã³ãã³ããå®è¡ããå Žåã¯ããããæž¡ãäœçœ®åŒæ°ã§ãã å€ãã®å Žåãããã¯çŸåšã®äœæ¥ãã£ã¬ã¯ããªã瀺ããããã«ãªããŸãã ãã®ãããçŸåšã®äœæ¥ãã£ã¬ã¯ããªãããã®å Žåã«ãã«ããŒãã¢ã¯ã»ã¹ã§ãããã¡ã€ã«ã®ã»ãããšããŠæž¡ããŸãã ããããããã¯ä»ã®ãã®ã§ãããŸããŸããã ãã㯠Git URL ã«ããããšãã§ãããã®å ŽåãBuildKit ãã«ããŒã¯ãªããžããªãçŽæ¥è€è£œããŸãã ãŸããããŒã«ã«ãã·ã³ããã¯äœãéä¿¡ããŠããŸããã ã¿ãŒã«ããŒã«ã«ããããšãã§ããŸãã ããã䜿ã人ãããŸãã ããããããã¯ãªããªãã§ãããã
ããã«ãŒãã¡ã€ã«ã®äœæ
ããŠãã€ã³ããã¯ããã§ååã§ãã Dockerfile ã®äœæã«åãæãããŸãããã ãŸããç§ãæã£ãŠãããµã³ãã«ãããžã§ã¯ããç°¡åã«èŠãŠã¿ãŸãããã ããã¯Goãããžã§ã¯ãã§ããããªã¯ãšã¹ããåŒã³åºãããšãã§ããAPIãåããå°ããªHTTPãµãŒããŒã§ãã ãŸããIDãäžããããå ŽåããŠãŒã¶ãŒã®ååãšèªçæ¥ãè¿ãããŸãã ã ãããéåžžã«äŸ¿å©ãªã¢ããªã±ãŒã·ã§ã³ã§ãã ããŠããã®ããã®Dockerãã¡ã€ã«ãäœæããŸãããã Dockerfileãäœæãããšããã¡ã€ã«åã¯Dockerfileã«ãªããŸããã? ç§ããã€ãDockerãã¡ã€ã«ã§æåã«ããããããšã¯ããã®è¡ãäžçªäžã«è¿œå ããããšã§ãã ãã㯠parse ãã£ã¬ã¯ãã£ããšåŒã°ããŸãã ãã®å Žåããã®ãã¡ã€ã«ã§ææ°ããŒãžã§ã³ã® Docker ãã¡ã€ã«æ§æã䜿çšããããšãæå®ããŠããŸãã ããã远å ãããšããã«ãã®å®è¡æã«åçã«è§£æ±ºããã Dockerfile æ§æã®ææ°æ©èœã«ã¢ã¯ã»ã¹ããããã«ãDocker Engine ã Docker Desktop ãã¢ããã°ã¬ãŒãããå¿ èŠããªããªããŸãã åºæ¬çã«ãã®è¡ãDockerfileã«åžžã«å«ããã®ã¯çŽ æŽãããããšã§ãã ãã ãããã«ãã«ã¯äœãããŸããã ãããŠããããæ¬¡ã®ã¹ãããã§ãã
åºæ¬ã€ã¡ãŒãž
次ã«ãFROM åœä»€ã远å ããŸãã ããã«ããããã®ãã«ãã«äœ¿çšããåºæ¬ã€ã¡ãŒãžãæå®ããŸãã ç§ã®ãããžã§ã¯ãã¯Goãããžã§ã¯ãã§ãã ããã§ä»åã¯ãGo ãã€ããªãŒã®ãã«ãã«å¿ èŠãªãã¹ãŠã®ã³ã³ãã€ã©ãŒã»ããŒã«ãå«ã Golang Docker å ¬åŒã€ã¡ãŒãžã䜿çšããŸãã ããŠããã®æç¹ãããDockerfile ã«è¿œå ãããã¹ãŠã®åœä»€ã¯ããã®ã€ã¡ãŒãžã«åºã¥ãã³ã³ãããŒã§å®è¡ãããŸãã å éšã«ãã³ãã«ãããŠããã³ãã³ãã«ã¢ã¯ã»ã¹ã§ããŸãã
äœæ¥ãã£ã¬ã¯ããª
次ã«ãã³ã³ãããŒã«äœæ¥ãã£ã¬ã¯ããªãèšå®ããŸãã æ¬¡ã®ã³ãã³ã㯠/src å ã§å®è¡ãããŸãã æ¬¡ã«ãã³ããŒåœä»€ã䜿çšããŸãããã«ãã³ã³ããã¹ããããã¹ãŠã®ãã¡ã€ã«ãã³ããŒããŸãã ããã§ããã³ããŒãããã¡ã€ã«ã¯ãã³ã³ãããŒå ã®çŸåšã®äœæ¥ãã£ã¬ã¯ããªã«ãã«ãçšã®ãã¡ã€ã«ã®ã»ãããæå®ããŸãã ããã§ãæ£ããäœæ¥ãã£ã¬ã¯ããªã«ããŸãã ãã¹ãŠã®ãã¡ã€ã«ãå ¥ã£ãŠããŸãã ãã«ãã³ãã³ããå®è¡ã§ããŸãã æåã«go mod downloadã§äŸåé¢ä¿ãããŠã³ããŒããããã«ãããŠãã€ããªãäœæããŸãã ãããŠæåŸã«ãã³ã³ããã®ãšã³ã㪠ãã€ã³ããæå®ããŸãããããã¯ããã®ã€ã¡ãŒãžã«åºã¥ããŠã³ã³ãããå®è¡ãããšãã«å®è¡ããããã€ããªã§ãã ããŠãããã§ãããŸãã
ããã§ããã®ã€ã¡ãŒãžãæ§ç¯ã§ããŸãã ããã§ã¯ãDC demo ã¿ã°ã䜿çšããŸãã ããã«è¡šç€ºãããåºåã¯ãBuildKit ããã®åºåã§ãã ããã«ãããDockerfile ã«ããå®è¡äžã®ãã¹ãŠã®åœä»€ã衚瀺ãããŸãã ãããçµãã£ãããã€ã¡ãŒãžã®ååãæå®ã㊠docker run ã§ããŸãã ãã®å Žåãããã€ãã®ããŒãããã¹ãã«å ¬éããŸãã ã€ãŸããããŒã«ã«ãã¹ãäžã®ãããã®ããŒãã«å¯ŸããŠå®è¡ã§ããã¯ãã§ãã ããŠããã®æç¹ã§ãåºæ¬çãªã€ã¡ãŒãžãæ©èœããŠããŸãã Goã¢ããªã±ãŒã·ã§ã³ãã³ã³ãããšããŠæ§ç¯ããããšã«æåããŸããã
ã¬ã€ã€ãŒã®è¡šç€º
次ã«ãæé©åã«åãæãããŸãã æåã«èŠãŠããã®ã¯ã¬ã€ã€ãŒã§ãã ã¬ã€ã€ãŒã«ã€ããŠç¥ã£ãŠããããŸãã¯ç¥ã£ãŠãã人ã¯ã©ããããããŸãã? ãããããã ãããã人ãããŸãã ãããã£ãŠãã¬ã€ã€ãŒã¯ç»åãæ§æãããã®ã§ãã ãŸãããã«ããã£ãã·ã¥ãæ§æãããã®ãéèŠã§ãã 倧ãŸãã«èšããšãDockerãã¡ã€ã«ã®ååœä»€ã¯ã¬ã€ã€ãŒã«å¯Ÿå¿ããŠãããšèããããšãã§ããŸãã ãã®ã¬ã€ã€ãŒãæ§ç¯ããããšãç»åã®ã¬ã€ã€ãŒãäœæãããŸãã ãªããããç§ãã¡ã«ãšã£ãŠéèŠãªã®ããšãããšãäœããå€ãããšãã§ãã äœã倿ŽãããŠããªãå ŽåããŸãããã®ã¬ã€ã€ãŒã¯ãã«ããã£ãã·ã¥ã«ãã£ãŠåå©çšãããŸãã
ä»ã®ãšãããç§ãã¡ã®ã€ã¡ãŒãžã¯ãããã6ã€ã®ã¬ã€ã€ãŒã§æ§æãããŠããŸãã äœã倿Žããªããã°ããã®6ã€ã®ã¬ã€ã€ãŒã¯ã©ããåæ§ç¯ãããŸããã ããããã¬ã€ã€ãŒã倿ŽãããšãDockerããããæ€åºããããããã®ã¬ã€ã€ãŒãšããã«ç¶ããã¹ãŠã®ã¬ã€ã€ãŒãåæ§ç¯ããå¿ èŠããããŸãã ãããã£ãŠãã±ãŒããäŸã«ãšããšãé»è²ã®ã¬ã€ã€ãŒã§äœãã倿Žããå Žåãã¬ã€ã€ãŒãšäžã®ã¬ã€ã€ãŒããããäžããŠããããããã®ã¬ã€ã€ãŒãåãã€ã¯ããå¿ èŠããããŸãã ã€ãŸããåœä»€ã®é åºãéèŠã§ãã ãªããªããäœãã倿Žããå Žåãäžå¿ èŠã«åæ§ç¯ããããªãããã§ãã
çŸåšã® Dockerfile ãŸãã¯çŸåšã®ã€ã¡ãŒãžã®ãã«ãåºåãèŠãŠã¿ãŸãããã 倿Žããã«ãã«ããå®è¡ãããšããã¹ãŠã®ã¹ãããããã£ãã·ã¥ãããŸãã äœãå®è¡ãããŸããã ãœãŒã¹ ã³ãŒãã«å€æŽãå ããŠãªãã«ããããšãçŸæç¹ã§ã® Dockerfile ã®èšè¿°æ¹æ³ã§ã¯ãcopy åœä»€ã®ãã£ãã·ã¥ãç¡å¹ã«ãªãããã®åŸã«ç¶ããã¹ãŠã®ã¬ã€ã€ãŒãç¡å¹ã«ãªããŸãã çŸæç¹ã§ã¯ããã®ã¹ãããã®åŸã«äŸåé¢ä¿ãããŠã³ããŒãããgomodã®ããŠã³ããŒãããããããããã¯éåžžã«éå¹ççã§ãã ãã®ãããã³ãŒãã倿Žãããã³ã«ãäŸåé¢ä¿ãæåããããŠã³ããŒãããŸãã ãã®å Žåãããã¯å°ããªãããžã§ã¯ãã§ãããããŸãåé¡ã«ãªããŸããããäŸåé¢ä¿ãããŠã³ããŒããã倧ããªãããžã§ã¯ãã«ã¯ããªãã®æéããããããšãæ³åã§ããŸãã
ããã軜æžããããã«ãåœä»€é åºã§éã¶ããšãã§ããŸãã ãŸã第äžã«ããœãŒã¹ã³ãŒãã倿Žãããšç¡å¹ã«ãªãã®ã¯ããã®ã³ããŒã¬ã€ã€ãŒã§ãã ãããäŸåé¢ä¿ãããŠã³ããŒãããåŸã«äžã«ç§»åãããšããã®æç¹ã§ã¯äŸåé¢ä¿ã¬ã€ã€ãŒãç¡å¹ã«ãªããŸããã ããããããŠã³ããŒãããäŸåé¢ä¿ãããããªããããäŸåé¢ä¿ãããŠã³ããŒãã§ããªããããDockerfileãå£ããŠããŸãã ãããç¥ãã«ã¯ãããã±ãŒãžç®¡çãã¡ã€ã«ãå¿ èŠã§ãã ããã§ããã®åã«å¥ã®ã³ããŒåœä»€ã远å ããŠãããã±ãŒãžç®¡çãã¡ã€ã« (ãã®å Žå㯠go.mod ãš go.sum) ã®ã¿ãã³ããŒããŸãã ã€ãŸãããœãŒã¹ã³ãŒãã倿ŽããåŸã«åæ§ç¯ãããšãgo.modãã¡ã€ã«ãšgo.sumãã¡ã€ã«ã倿ŽããªãéããgomodããŠã³ããŒãã¬ã€ã€ãŒã¯æ¯åãã£ãã·ã¥ããããŸãŸã«ãªããŸãã ããŠãã¬ã€ã€ãŒã¯ä»¥äžã§ãã
ãã«ãã¹ããŒãžãã«ã
ããã«ã€ããŠã¯ãåŸã§æé©åããŸãã®ã§ããèå³ãããã°ãç¥ããããŸãã ããŠã倿®µéã倿®µéã«ã€ããŠè©±ããŸãããã ç§ã«ãšã£ãŠãç§ã®æèŠã§ã¯ãããã¯ãããŸã§ã§Dockerãã«ãã®æãéèŠãªæ©èœã§ãã ããã¯ãããã䞻芳çãªãã®ã§ãã ãããããããããªãã«ã§ããããšã¯ããã«ããšã©ã³ã¿ã€ã ã®éã®ãããã§ããããªåé¢ãäœãããšã§ãã ãªããªããä»ã®ãšããããããªãããã§ãã 䜿çšããŠããããŒã¹ã€ã¡ãŒãžã«ã¯ããã¹ãŠã®Goã³ã³ãã€ã«ããŒã«ãšãã¹ãŠã®ãœãŒã¹ã³ãŒããå«ãŸããŠãããæ¬çªç°å¢ã§ã€ã¡ãŒãžãå®è¡ããããã«ã¯å¿ èŠãããŸããã
ãããããããã«ãã¹ããŒãžãã«ããä¿®æ£ã«åœ¹ç«ã€ããšã§ãã åºæ¬çã«ã¯ãå¥ã®ããŒã¹ã€ã¡ãŒãžãéžæã§ããŸãã ãã®åŸãåã®ã¹ããŒãžããæ°ããã¹ããŒãžã«ãªãœãŒã¹ãã³ããŒããŠãäžèŠãªãã®ããã¹ãŠã€ã¡ãŒãžãã广çã«åé€ã§ããŸãã ãããäœãæå³ããã®ããããã«æç¢ºã«ããããã«ãçŸåšã®ç»åã¯ãã®æç¹ã§çŽ 600 ã¡ã¬ãã€ãã§ãã 倧ããã ãããŠããã€ããªãéçã«ãã«ããããšããã€ããªã¯ 8 ã¡ã¬ãã€ãã«ãªããŸãã ãã®ãããæ¹åã®äœå°ããããŸãã
ãããä¿®æ£ããããã«ããã«ãã¹ããŒãžãã«ãã远å ããŸãããã ãŸããã¹ããããåé¢ããå¥ã®åºæ¬ã€ã¡ãŒãžã䜿çšããŠäžéšã«å¥ã®ã¹ããŒãžã远å ããŸãããã æ¬¡ã«ãã³ããŒåœä»€ããã©ã° âfrom ãšå ±ã«äœ¿çšããã³ããŒå ã®ã¹ããŒãžã®ååãæå®ããŸãã æ¬¡ã«ãçŸåšã®ã¹ããŒãžã«ã³ããŒãããã¡ã€ã«ãŸãã¯ãã¡ã€ã«ã ããŒã¹ã¹ããŒãžããããã€ã¡ãŒãžã¹ããŒãžã§ãã¹ãŠã®ãã«ãã³ãã³ããå®è¡ããŸãã åã®æ®µéãããã®å®æãããã€ããªãã³ããŒãã以å€ã®ã³ãã³ãã¯å®è¡ããŸããã ããã§ããã®ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããããã 2 ã€ã®ç»åã®ãµã€ãº ( 25 ã¡ã¬ãã€ããš 600 ã¡ã¬ãã€ã) ãæ¯èŒã§ããŸãã ã€ãŸãããã®ãµã€ãºã®çŽ 5%ã§ãã ç§ãã¡ãæ§ç¯ããæ°ããã€ã¡ãŒãžã¯ã2ã€ã®ã¬ã€ã€ãŒã«ãªã£ãŠããŸãã ããã¯ãããŒã¹ ã€ã¡ãŒãž ã¬ã€ã€ãŒãAlpine ã€ã¡ãŒãžãããã³ã³ããŒå ã®ãã€ããªã§ãã
ãã£ãã·ã¥ã»ããŠã³ããšãã€ã³ãã»ããŠã³ã
次ã«ãããŠã³ãã«ã€ããŠèŠãŠãããŸãã ãã«ãã®ããã©ãŒãã³ã¹ãåäžãããããã«äœ¿çšã§ããããŠã³ãã«ã¯ããŸããŸãªçš®é¡ããããŸãã 仿¥ã¯ãã£ãã·ã¥ããŠã³ããšãã€ã³ãããŠã³ãã«ã€ããŠèª¬æããŸãã ãã£ãã·ã¥ããŠã³ãã䜿çšãããšããã«ããã£ãã·ã¥ã«æ°žç¶ã¹ãã¬ãŒãžã䜿çšã§ããŸãã ãŸããããã±ãŒãžåããããã£ãã·ã¥ãç¶æããã®ã«åœ¹ç«ã¡ãŸãã äŸåé¢ä¿ã倿Žããå Žåã§ãã1 ã€ãŸã㯠2 ã€ã®äŸåé¢ä¿ã倿Žããã ãã§ããã°ããã¹ãŠãåããŠã³ããŒãããå¿ èŠã¯ãããŸããã ãã€ã³ãããŠã³ãã¯ããã«ãã«äœ¿çšããã³ã³ããã«ãã¡ã€ã«ãã³ããŒããããã®ããå¹ççãªæ¹æ³ã§ãã ãããã£ãŠãç§ãã¡ã®ãããžã§ã¯ãã¯Goãããžã§ã¯ãã§ããã䜿çšããŠããGoã¢ãžã¥ãŒã«ã®ãã£ãã·ã¥ããŠã³ãã远å ããããšæããŸãã
ããã€ãã®ããã¥ã¡ã³ããé²èЧããåŸãGoã¢ãžã¥ãŒã«ã®ãã£ãã·ã¥ãã£ã¬ã¯ããªã¯ã䜿çšããŠããã€ã¡ãŒãžã®/ go / pkg / modã§ããããšãããããŸããã ããã¯ããã£ãã·ã¥ããŠã³ããèšå®ãããã£ã¬ã¯ããªã§ããããã®ãã£ã¬ã¯ããªå ã«ãããã®ã¯ãã¹ãŠæ°žç¶çã«ãã£ãã·ã¥ãããŸãã ãããè¡ãã«ã¯ãDockerfile ã«æ»ããŸãã ãããŠãgo modã®ããŠã³ããŒãã¹ãããã§ã¯ãããã«å¥ã®ãã©ã°âmountã远å ããcacheãšå ¥åããŠããããã£ãã·ã¥ãããã£ã¬ã¯ããªã®ãã£ã¬ã¯ããªãã¿ãŒã²ããã«ããŸãã ããã«ãããgo mod downloadã³ãã³ãããã£ãã·ã¥ããŠã³ãã«æžã蟌ããããã«ãªããŸãã æ¬¡ã«ãbuild ã³ãã³ãã«åããã®ã远å ããŠãbuild ã³ãã³ããåããã£ãã·ã¥ããèªã¿åããããã«ããŸãã ããã§ãäŸåé¢ä¿ã® 1 ã€ã倿Žããå Žåãããšãã°ã䜿çšããŠããæ°ããããŒãžã§ã³ã® echo ã«ã¢ããã°ã¬ãŒãããŸãã ä»ã®ãã¹ãŠã®æ¢åã®äŸåé¢ä¿ã§ã¯ããã£ãã·ã¥ã¯ãããã«å¯ŸããŠåŒãç¶ãæå¹ã§ãããããããã«å¯ŸããŠåŒãç¶ã䜿çšãããŸãã ãããã£ãŠãããã¯ããã©ãŒãã³ã¹ã«ãšã£ãŠçŽ æŽãããããšã§ãã
ãã€ã³ãããŠã³ãã¯ãã³ã³ããã¹ããã¡ã€ã«ããã«ãã³ã³ããã«ããŠã³ãããæ¹æ³ã§ãã copy ãšéåžžã«ãã䌌ãŠããŸããããã¡ã€ã«ãäžæçã«ããŠã³ãããã ãã§ãã ãã®ãããæçµçãªã³ã³ãããŒã«ãããã®ãã¡ã€ã«ãå¿ èŠãšããªããã«ã ã¹ãããã«é©ããŠããŸãã 確ãã«ãããã¯ããå¹ççã§ããããããããã«ãã§ãã®ãããªã¿ã€ãã®å¹çãæ¢ããŠãããšããžã±ãŒã¹ã§ãã ãããããããã«ããããã®ã±ãŒã¹ã§ã¯ãã€ã³ãããŠã³ãã䜿çšããããšããå§ãããŸãã
Dockerfile ã«æ»ã£ãŠãã€ã³ã ããŠã³ãã远å ããå Žåã¯ãããã§ã âmount ãã©ã°ã䜿çšããŸãã ãããŠãgo.mod ãã¡ã€ã«ãš go.sum ãã¡ã€ã«ã go mod download run åœä»€ã«è¿œå ããŸãã ãããã£ãŠãããã¯ãããã 2 ã€ã®ãã¡ã€ã«ããã«ã ã³ã³ããã¹ãããã³ã³ãããŒã«ã³ããŒããã«çŽæ¥ãã€ã³ãããŠããŸãã æ¬¡ã«ããããã®ãã¡ã€ã«ããã§ã«ããŠã³ããããŠããããããã®åã«ã³ããŒåœä»€ãå®éã«åé€ã§ããŸãã æ¬¡ã«ãbuild ã³ãã³ãã«åããã®ã远å ã§ããŸãã ä»åã¯ããã£ã¬ã¯ããªå šäœãããŠã³ãããŸãã ãœãŒã¹ãåºåã§ããŸãã ç§ã¯ã¿ãŒã²ãããããã®çŸåšã®ãã£ã¬ã¯ããªã䜿çšããã ãã§ãã ããã«ããããã¹ãŠã®ãã«ã ã³ã³ããã¹ããã³ã³ãããŒã«ããŠã³ããããŸãã ãããŠãããã§ãã³ããŒåœä»€ãåé€ããŸãã 倧äžå€«ã§ãã ãã®Dockerfileã¯ããªãèŠæ ããããŸãã
ãã«ãåŒæ°
æé©åããå°ãé¢ããŠããã«ãåŒæ°ã«ã€ããŠèª¬æããŸãã ãã«ãåŒæ°ã¯ãããšãã°ããã«ãæã«å€ãæ¿å ¥ã§ããåªããæ¹æ³ã§ãã ãã€ããªããã«ãããŠããå Žåã¯ãèµ·åååŸãããã·ã¥ããã·ã¥ããŒãžã§ã³ã®åŒã³åºããªã©ã§ãã€ããªã®ããŒãžã§ã³ãåºåã§ããããã«ãããå ŽåããããŸãã ãã«ãåŒæ°ã¯ããã®ããã®åªããæ¹æ³ã§ãã ãŸãããã«ãåŒæ°ã Dockerfile å ã®ããã±ãŒãžã®ããŒãžã§ã³ã䟿å©ã«ç®¡çããæ¹æ³ã«ã€ããŠã説æããŸãã
ãã®å Žåãããã§ãã¢ããã®ã¯ãããŒãžã§ã³ã®ããªã³ãã¢ãŠãã®ãããªãã®ã§ãã ãµãŒããŒãèµ·åãããšãå®è¡äžã®çŸåšã®ããŒãžã§ã³ãåºåãããŸãã ãããŠããã«ãåŒæ°ã§ãããå¶åŸ¡ããŠããœãŒã¹ã³ãŒãã«ããŒãã³ãŒãã£ã³ã°ããã®ã§ã¯ãªãããã€ããªããã«ããããšãã«ãã®ããŒãžã§ã³ãèšå®ã§ããããã«ããããšèããŠããŸãã
Docker ãã¡ã€ã«ã«ãã«ãåŒæ°ã远å ããã«ã¯ãarg åœä»€ãŸã㯠arg ããŒã¯ãŒãã䜿çšããŸãã ããã§ã¯ããã«ãåŒæ°ããŒãžã§ã³ãäœæããŸãã ããã©ã«ãå€ã 0ã 0ã 0ã«èšå®ããŸãã æ¬¡ã«ãããã§ã®æç€ºã§ãã®åŒæ°ã䜿çšã§ããŸãã Go ã§å€æ°å€ãäžæžãããã«ã¯ããªã³ã«ãŒ ãã©ã°ã䜿çšããŸãã ãããããã®çš®ã®è¬ããããã©ã°ãããã§è¡ã£ãŠããããšã§ãã ã³ãŒãå ã® version 倿°ãããã«ãåŒæ° version ã®å€ã«èšå®ããŸãã ãããã£ãŠãâbuild arg ãã©ã°ã䜿çšããŠãã€ããªãŸãã¯ã€ã¡ãŒãžããã«ããããšãã³ã³ãããŒã®å®è¡æã«è¡šç€ºãããå€ã«ãªããŸãã
ããäžã€ãç§ããã€ãããããã®ã¯ãå¿ ãããDockerfileã«ããŒãžã§ã³ãæ£ãã°ããã®ã¯å¥œãã§ã¯ãªããšããããšã§ãã ã§ããããšã¯ãããŒãžã§ã³å€ããããã¬ãã«ã®åŒæ°ãšããŠèšå®ããããšã§ãã ãããŠãããŒã¹ã€ã¡ãŒãžãéžæãããšãã«ããããåç §ã§ããŸãã ã ããFROM golangããããŠç§ã¯ãã«ãåŒæ°go versionã䜿çšããŸãã ãŸããå¿ èŠã«å¿ããŠãDockerfileã倿Žããããšãªããå¥ã®GoããŒãžã§ã³ã§ãã®ã€ã¡ãŒãžãç°¡åã«ãã«ãããããšãã§ããŸãã ãŸããããã©ã«ãå€ãâbuild argãã©ã°ã§äžæžãããããšãã§ããŸãã
ãã¹ãã£ã³ã°
ä»ã®ãã®ãèŠãŠã¿ãŸãããã è°è«ã®æ§ç¯ã«ã€ããŠã¯ãåŸã§ãã«ããã©ãããã©ãŒã ãè¡ããšãã«ã説æããŸãã ã§ã¯ããã¹ãã«ã€ããŠèŠãŠã¿ãŸãããã æè¿ãŸã§ãDocker buildã§ãã¹ãã§ããããšãç¥ããŸããã§ããã ããã¯ç§ã«ã¯æ¥ç¶ãããŸããã§ããããã©ãããããªãã¯æ¥ç¶ã§ããŸãã ãŸãããã¹ããå®è¡ããããã®åé¢ãããç°å¢ãæäŸããããããéåžžã«äŸ¿å©ã§ãã 䞊åã®ããã«åé¢ããããã¹ããå®è¡ã§ããŸãããããã¯ä»ã®æ¹æ³ã§ã¯å®è¡ãéåžžã«å°é£ã§ãã ããããDocker build ãš BuildKit ã䜿çšãããšãããã¯éåžžã«ç°¡åã§ãã ããã¯ããã¹ããå®è¡ããããã®äžè²«ããç°å¢ãäœæããã®ã«åœ¹ç«ã¡ãŸãã ãã®ãããååã®ãã·ã³ã§ã¯ãã¹ãã倱æããŠããDockerã§ãã¹ããå®è¡ããŠããŠããã¹ãŠåãããŒãžã§ã³ã䜿çšããŠãããããååã®ãã·ã³ã§ã¯ãã¹ããæ©èœããŠãããšããã±ãŒã¹ã¯ãããŸããã
ãã¹ããå®è¡ããããã«ããŸãããã§éçšãè¡ããçŸåšã®ããŒã¹ ã¹ããŒãžã 2 ã€ã®ã¹ããŒãžã«åå²ããŸãã ããã¯ããã¹ãŠã®äŸåé¢ä¿ãèšå®ããããŒã¹ã¹ããŒãžãšããã€ããªãã³ã³ãã€ã«ãããã«ãã¹ããŒãžãæã€ããã«ããããåé¢ããããã®ãã®ã§ãã æ¬¡ã«ãããŒã¹ãããŒã¹ãšããŠäœ¿çšããŠãã¹ããŒãž test ãåŒã³åºããŠãããã«æ°ããã¹ããŒãžãå床远å ããŸãã ãã®æ®µéã§ã¯ãgo test ã³ãã³ããå®è¡ããçŸåšã®ãªããžããªã«ãããã¹ããå®è¡ããŸãã ãŸãããã€ã³ãããŠã³ããšãã£ãã·ã¥ããŠã³ãã䜿çšãããšãããã±ãŒãžãäŸåé¢ä¿ãå床ããŠã³ããŒãããå¿ èŠããããŸããã
ããã§ãâ target ã䜿çšã㊠Docker build ã§ãã®ãã¹ããå®è¡ããå®è¡ãã Docker ãã¡ã€ã«å ã®ã¹ããŒãžãéžæã§ããŸãã ãŸããDocker ãã«ã ã¿ãŒã²ãã test ãå®è¡ããããã¹ã ã¹ããŒãžããã«ããããŸãã ãã¹ãã倱æãããšããã«ãã¯å€±æããŸãã ãã¹ãã倱æããªããã°ããã«ãã¯æåããŸãã ããã¯ããã¹ããåçŸå¯èœãªç°å¢ã§å®è¡ãããäœãèµ·ãã£ãŠããããããé©åã«å¶åŸ¡ããããã®éåžžã«åªããæ¹æ³ã§ãã
ãã¹ãçµæã®ãšã¯ã¹ããŒã
次ã«ãç»åããçµæããšã¯ã¹ããŒãããæ¹æ³ãèŠãŠã¿ãŸãããã ãã¹ãããããŸãã ã€ã¡ãŒãžãæ§ç¯ã§ããŠããã®ã§ããã¹ãŠãããŸããã£ãŠããŸãã ãšã¯ã¹ããŒãã远å ããŠãã³ã³ãã㌠ã€ã¡ãŒãžä»¥å€ã®ãã®ãæ§ç¯ã§ããŸãã ãã®ãããæåã«è¡ãããšã¯ããã¹ãã®å®è¡åŸã«ãã¹ãçµæãšãã¹ãã«ãã¬ããžã¬ããŒãããã¡ã€ã«ã·ã¹ãã ã«ãšã¯ã¹ããŒãããæ¹æ³ã远å ããããšã§ãã
ããã§ãããã€ãã®ããã« Dockerfile ã«æ»ããŸãã ãŸãããã¹ãã®ã«ãã¬ããž ã¬ããŒããçæãããã©ã°ã远å ãããã¹ãçµæããã¡ã€ã«ã«ãã€ãåŠçããŸãã ãã®æç¹ã§ããã¹ããå®è¡ãã 2 ã€ã®ãã¡ã€ã«ãäœæããŠããŸãã ã«ãã¬ããž ã¬ããŒããäœæãããã¹ãçµæãã¡ã€ã«ãäœæããŠããŸãã ãããŠã次ã®ãããã¯æ £çšå¥ã§ã¯ãªããããããŸããã 確信ãããŠãŸããã æ¬¡ã«ããã®ã³ãã³ãã®çµäºã³ãŒãã確èªãããšã©ãŒãçºçããå Žåã¯çµæãåºåãããã«ããçµäºããŠå€±æãããŸãã ããŠãåºæ¬çã«ããã§è¡ã£ãŠãã倿Žã¯ããã¹ã段éã§ãã«ãã¬ããžã®ãã¹ãçµæã2ã€ã®ãã¡ã€ã«ã«åºåããããšã§ããã æ¬¡ã«ãããšãã°ããããã®ãã¹ãçµæãã«ãã¬ããžã¬ããŒããCIã«ã¢ãŒã«ã€ãããå Žåã«ããããã®ãã¡ã€ã«ããšã¯ã¹ããŒãã§ããããã«ããŸãããã
ãã®ããã«ãæ°ããã¹ããŒãžã远å ããä»å㯠FROM SCRATCH ã€ã¡ãŒãžã䜿çšããŸãã ããã¯Dockerã®ç¹å¥ãªã€ã¡ãŒãžã§ãããäœãå«ãŸããŠããªãã€ã¡ãŒãžã§ãã ããã¯ãäœãå ¥ã£ãŠããªãå®å šã«ç©ºã®ç»åã§ãã ãã®æ®µéã§ç§ãè¡ã£ãŠããã®ã¯ããã¹ãã¹ããŒãžããããã2ã€ã®ãã¹ããã¡ã€ã«ãã³ããŒããããšã ãã§ãã ããã§ãã ããã«ããã2ã€ã®ãã¡ã€ã«ã®ã¿ãå«ã空ã®ç»åãäœæãããŸãã 䟿å©ãªã®ã¯ããã«ãã³ãã³ããå®è¡ã§ããããã«ãªã£ãããšã§ãã ãããŠãç§ã¯-oãã©ã°ã䜿çšããŸãããããªãããããèŠãããšãã§ãããã©ããã¯ããããŸããããã³ãã³ãã®æåŸã«ã¯-oãšãã¹ãããããã«ãçµæãäœã§ããããã·ã³äžã®ãã£ã¬ã¯ããªã«åºåã§ããŸãã ããã§ã¯ã2 ã€ã®ãã¡ã€ã«ã®ã¿ãå«ã空ã®åºæ¬ã€ã¡ãŒãžãéžæããã¿ãŒã²ãã ãšã¯ã¹ããŒã ãã¹ããå¿ ã䜿çšããŸãã ãããå®è¡ãããšããã¹ãçµæãšã«ãã¬ããžã¬ããŒãã®2ã€ã®ãã¡ã€ã«ãå«ãoutãã£ã¬ã¯ããªãåŸãããŸãã
ããã§è¡ã£ãããšãå¥ã®æ¹æ³ã§èŠãŠã¿ãŸãããã ã€ãŸããããŒã¹ã€ã¡ãŒãžãã€ãŸãgolangããŒã¹ãDockerã®å ¬åŒã€ã¡ãŒãžããããŸãã ããããã¹ãã®ããŒã¹ãšããŠäœ¿çšãããã¹ããå®è¡ããããã 2 ã€ã®ãã¡ã€ã«ãäœæããŸãã æ¬¡ã«ãå®å šã«ç©ºçœã®æ°ããã¹ããŒãžãäœæããããã 2 ã€ã®ãã¡ã€ã«ãã³ããŒããŠå®äºã§ãã ãããŠãããããã¡ã€ã«ã·ã¹ãã ã«ãšã¯ã¹ããŒãããŸãã ããã§ããã®ã¹ããŒãžããã¡ã€ã«ã·ã¹ãã ã«ããšã¯ã¹ããŒãã§ããŸãã ããã«ã¯å€§éã®ãã¡ã€ã«ãå«ãŸããŸãã ã§ããããããã«ã¯æ³šæããŠãã ããã ã³ã³ãããŒå ã«ãããã®ãäœã§ãããããã·ã¥ãããã·ã¥åºåããŸã㯠-o ãã©ã°ã䜿çšãããšãæå®ãããã£ã¬ã¯ããªã«ãšã¯ã¹ããŒããããŸãã
ãŸãããã®ææ³ã䜿çšããŠããã€ããªãäœæãããã€ããªããšã¯ã¹ããŒãããã€ã¡ãŒãžããã«ãããã ãã§ãªããããšãã°ãªãªãŒã¹ãååŸãããããã·ã³ã§å®è¡ãããããããã«ã¢ããããŒãã§ãããã€ããªããã«ãããããšãã§ããŸãã åãææ³ã䜿çšããŠãããããæ°ããã¹ããŒãžãæåãã䜿çšãããã«ãçµæããã®ã¹ããŒãžã«ã³ããŒããŸãã 以äžã§ãã ããã«ãããDocker buildã§ãã€ããªãçŽæ¥ãã«ãããŠãšã¯ã¹ããŒãããããã§ãoutãã©ã°ãŸãã¯ããã·ã¥ããã·ã¥åºåãã©ã°ã䜿çšã§ããŸãã ãããã£ãŠãããã§ã¯-oãã©ã°ã䜿çšããŠãã«ãããŠããããã¡ã€ã«ã·ã¹ãã äžã«Linuxã¢ãŒã 64 ãã€ããªãäœæãããŸããã ããã«ã€ããŠã¯ãåŸã§èª¬æããŸãã
ãã«ããã©ãããã©ãŒã ãã«ã
ããã«ããã€ãã®ç¹ãåãäžããŸãã æ¬¡ã«ããã«ããã©ãããã©ãŒã ãã«ããçšæããŸãã ãã«ããã©ãããã©ãŒã ãã«ãã¯ãè€æ°ã®ç°ãªãã¢ãŒããã¯ãã£ã§å®è¡ã§ããã€ã¡ãŒãžããã«ãããæ¹æ³ã§ãã æ¢å®ã§ã¯ãã€ã¡ãŒãžããã«ããããšãçŸåšå®è¡ããŠãã CPU ã¢ãŒããã¯ãã£ãã¿ãŒã²ããã«ãªããŸãã ç§ã¯MacãM1 Macã䜿çšããŠããŸãã ãã®ãããã€ã¡ãŒãžãæ§ç¯ãããšãã¯ãArm64 ã€ã¡ãŒãžã«ãªããŸãã ããããx86 ãã·ã³ã®å ŽåãLinux ã€ã¡ãŒãžãæ§ç¯ããŠããå Žåã¯ãLinux AMD64 ã€ã¡ãŒãžã«ãªããŸãã
ãã«ããã©ãããã©ãŒã ã䜿çšãããšãããŸããŸãªãã©ãããã©ãŒã ã§å®è¡ã§ããã€ã¡ãŒãžãæ§ç¯ã§ããŸãã ãããŠããã㯠1 ã€ã® Dockerfile ã䜿çšããŠã1 ã€ã®ã€ã¡ãŒãžãäœæãããã¿ãŒã³ã§ãã ããããã¢ãŒããã¯ãã£ããšã«ç°ãªã Dockerfile ã䜿çšããããã¢ãŒããã¯ãã£ããšã«ç°ãªãã¿ã°ãäœæããããã人ãå®éã«èŠãããšããããããããŸããã ãããŠãããã¯ããªããæ¬åœã«è¿œæ±ããããªããã¿ãŒã³ã§ãã ãã«ããã©ãããã©ãŒã ã€ã¡ãŒãžã䜿çšãããšããããã¯ããã«ç°¡åã«è¡ãããšãã§ããŸãã
ãã«ããã©ãããã©ãŒã ãã«ããè¡ãã«ã¯ã3ã€ã®æ¹æ³ããããŸãã ãšãã¥ã¬ãŒã·ã§ã³ããããŸãã ãããã£ãŠãQEMUã䜿çšããŠéãã€ãã£ããã©ãããã©ãŒã ã§ãã«ãããšãã¥ã¬ãŒãããŸãã è€æ°ã®ç°ãªããã€ãã£ãããŒãã䜿çšãããã«ããŒã§ãã BuildKit ããããããç°ãªãã¢ãŒããã¯ãã£ã®è€æ°ã®ããŒãã§å®è¡ãããã€ãã£ãã«ãã«ãããããšãã§ããŸãã ããã¯ã䜿çšããã«ã¯è€éãªèšå®ã§ãã 3çªç®ã®ãªãã·ã§ã³ã¯ãéåžžã«çŽ æŽãããããšã§ãããå¯èœãªå Žåã¯ã¯ãã¹ã³ã³ãã€ã«ã䜿çšããããšã§ãã ãããŠãããã¯ããªãã®èšèªãã³ã³ãã€ã©ã®æ©èœãå©çšããŠãclangãllvmãgccãªã©ã®éãã€ãã£ããã€ããªãçæããããšã§ãã Goã§ã¯ãRustã§ãããè¡ãããšãã§ããŸãã ãããç°¡åã§ãã
ããã§ã¯ããšãã¥ã¬ãŒã·ã§ã³ãšã¯ãã¹ã³ã³ãã€ã«ãããã³ããã€ãã®éãã«ã€ããŠèª¬æããŸãã ãšãã¥ã¬ãŒã·ã§ã³ã䜿çšãããšããã«ããã©ãããã©ãŒã ã€ã¡ãŒãžã®æ§ç¯ãéå§ããæãç°¡åãªæ¹æ³ã§ãã Dockerfile ã«ã€ããŠäœã倿Žããå¿ èŠã¯ãããŸããã æ¬ ç¹ã¯ããããéåžžã«é ããªãå¯èœæ§ãããããšã§ãã éåžžã®ãã«ããå®è¡ããããã 10x é ããªãå¯èœæ§ããããŸãã ããã¯ãäœæ¥ã® CPU è² è·ã®çšåºŠã«ãã£ãŠç°ãªããŸãã ããããã¯ãããããåé¡ã«ãªããªãå ŽåããããŸãã ããšãã°ããã«ããéåžžã«éãããããããããªéãã®åé¡ã§ããå Žåããšãã¥ã¬ãŒã·ã§ã³ã¯ãŸã£ããåé¡ãããŸããã æ±ºããã®ã¯ããªã次第ã§ãã
ãã«ããã©ãããã©ãŒã ã®äœ¿çšãéå§ããåã«ã2 ã€ã®ããšã®ãã¡ã® 1 ã€ãéžæããå¿ èŠããããŸãã Dockerã®ãã€ãã£ããã«ããŒãšããã©ã«ãã®ã€ã¡ãŒãžã¹ãã¢ã¯ãçŸæç¹ã§ã¯ããããµããŒãããŠããªãããã§ãã ããšãã°ãDockerã³ã³ãããã©ã€ããŒã䜿çšããŠæ°ãããã«ããŒãäœæã§ããŸãã ããã«ãããäžåºŠã«è€æ°ã®ãã©ãããã©ãŒã åãã«å®è¡ããã³ãã«ãã§ããããã«ãªããŸãã ãŸãã¯ãå®éšçãªæ©èœã§ãã containerd ã€ã¡ãŒãž ã¹ãã¢ã䜿çšããŠãæ¢å®ã®ã€ã¡ãŒãž ã¹ãã¢ã containerd ã䜿çšããããã«å€æŽããããšãã§ããŸãã ãããŠãç§ã¯ãããè¡ãããšããå§ãããŸãã ããã¯çŽ æŽãããæ©èœã§ãã æ¯æ¥äœ¿ã£ãŠããŸãã ã ããããã詊ããŠã¿ãŠãã ããã ããããã¯ãããããå®éšçã§ããããšãç¥ã£ãŠãããŠãã ããã ããããããã«ããããã«ããŒã亀æããããšãªããã«ããã©ãããã©ãŒã ã€ã¡ãŒãžãæ§ç¯ã§ããŸãã
ãšãã¥ã¬ãŒã·ã§ã³
ãšãã¥ã¬ãŒã·ã§ã³ã䜿çšãããšããã«ããã©ãããã©ãŒã ã€ã¡ãŒãžãç°¡åã«æ§ç¯ã§ããŸãã ãã«ã ã³ãã³ãã« âplatform ãã©ã°ã远å ããã ãã§ãã æ¬¡ã«ããã«ããããã©ãããã©ãŒã ãæå®ããŸãã ãã®å ŽåãLinux AMD64 ãš Linux Arn64. ç¹°ãè¿ãã«ãªããŸãããåè¿°ããããã«ããã®ãããžã§ã¯ãã®ãã€ãã£ãã¢ãŒããã¯ãã£çšã«ãã«ãããããšã¯ 8ã§ãããããããã§èæ ®ãã¹ãããã©ãŒãã³ã¹ã®ããã«ãã£ããããŸãã9 ã代ããã ãšãã¥ã¬ãŒã·ã§ã³ã䜿çšãããã«ã㯠32 ç§ã§ãã x 10ã»ã©ã§ã¯ãããŸããããã¯ããééããªãé ããªããŸãã ããŠããã«ããã©ãããã©ãŒã ã€ã¡ãŒãžãæ§ç¯ããåŸã¯ã次ã®ããã«ãªããŸãã Docker ã€ã¡ãŒãž LS ãå®è¡ããå Žåã¯ã2 ã€ã®ã¿ã°ããããŸãã çŸæç¹ã§ã¯ãããŸããŸãªãã©ãããã©ãŒã ã瀺ãUXã®æžå¿µããããŸãã ãã ãããã®ã€ã¡ãŒãžã Docker Hub ã«ããã·ã¥ãããšãDocker Hub ã¯ããã®ã€ã¡ãŒãžããã«ããã©ãããã©ãŒã ã«ãªã£ãããšã瀺ããŸãã ãã®2ã€ã®ãã©ãããã©ãŒã ã¯ãDocker Hubã§ã¿ã°ã調ã¹ããšãªã¹ãã¢ãããããŠããã®ã§ãx86 ãã·ã³ã§ãã®ã€ã¡ãŒãžããã«ããã°ãåé¡ãªãåäœããããšã«ãªããŸãã ããããšãã¥ã¬ãŒã·ã§ã³ã§ãã
ã¯ãã¹ã³ã³ãã€ã«
ããã§ã¯ãã¯ãã¹ã³ã³ãã€ã«ã䜿çšããŠãã«ããã©ãããã©ãŒã ã€ã¡ãŒãžãæ§ç¯ãããã¯ããã«ãšããµã€ãã£ã³ã°ãªæ¹æ³ãèŠãŠã¿ãŸãããã ããã¯ã¯ããã«é«éã§ãã ãããŠããã€ãã£ãã¢ãŒããã¯ãã£ããæ§ç¯ããŠããŸãã ãšãã¥ã¬ãŒã·ã§ã³ã¯å®è¡ããŠããŸãããããã·ã³ã®ãã€ãã£ã ã¢ãŒããã¯ãã£ãããã«ãããã¿ãŒã²ãããšããä»ã®ãã¹ãŠã®ç°ãªãã¢ãŒããã¯ãã£ãåºåããŸãã ãã ããDockerfile ã倿Žããå¿ èŠããããŸãã Docker ãã«ãã«ååšããäºåå®çŸ©ããããã«ãåŒæ°ã®ããã€ããå©çšããå¿ èŠãããããã§ãã ããã«ãªã¹ããããŠããŸããããã¹ãŠã§ã¯ãããŸããã ã¯ãããããã®ãã«ãåŒæ°ã䜿çšããŠãã€ããªãã¯ãã¹ã³ã³ãã€ã«ããŸãã ãããã®ãã«ãåŒæ°ãã©ã®ããã«æ©èœãããã®äŸã次ã«ç€ºããŸãã âplatform ãã©ã°ãäœã«èšå®ãããã«ãã£ãŠããããã®ãã«ãåŒæ°ã¯ãã«ãå ã§ç°ãªãæ¹æ³ã§è§£æ±ºãããŸãã ãšãããããåèãŸã§ã«æ®ããŠãããŸãã ããã«ã€ããŠã¯ãããã¥ã¡ã³ãã§ã説æãããŠããŸãã
倧ãŸãã«èšããšãããªæãã§ãã Dockerfile ãããããããã®ç¹å¥ãªã¿ãŒã²ãã OS ãšã¿ãŒã²ãã ã¢ãŒããã¯ãã£ã®ãã«ãåŒæ°ã䜿çšããŸãã æ¬¡ã«ããã®ã¹ããŒãžãåºæ¬çã« 2 ã€ã«åå²ããæå®ãããã©ãããã©ãŒã ããšã«åæã«å®è¡ããŸãã ããã¯æ¬åœã«å¹ççã§çŽ æŽãããããšã§ãã Goã§ã¯ãã¹ã³ã³ãã€ã«ããã«ã¯ãããç¥ããªãæ¹ã®ããã«ããããã®GOOS倿°ãšGOARCH倿°ãããã«ãããOSãšãã©ãããã©ãŒã ã«èšå®ã§ããŸãã æ¬¡ã«ãéåžžã©ãã go build ã³ãã³ããå®è¡ãããšãæå®ãããã€ããªãäœæãããŸãã ãã®å ŽåãGOOSãLinuxã«ãGOARCHãAMD64 ã«èšå®ããLinux AMD64 ãã€ããªãäœæããŸãã
ããã Dockerfile ã§æŽ»çšããæ¹æ³ãèŠãŠã¿ãŸãããã æåã«è¡ãããšã¯ã䜿çšããŠãããã«ããã©ãããã©ãŒã ãåºå®ããããšã§ãã ããã¯ãæ¢å®ã§ã¯ããã©ãããã©ãŒã ãã©ã°ã«è€æ°ã®å€ãæå®ããŠå®è¡ãããšããšãã¥ã¬ãŒãã詊è¡ãããããããšãã¥ã¬ãŒã·ã§ã³ãçºçããªãããã«ããããã§ãã ããããããã远å ããŠããäœããšãã¥ã¬ãŒããããŸããã ã€ãŸãããã«ããã©ãããã©ãŒã ããã·ã³ãçŸåšå®è¡ããŠãããã®ã«åºå®ããããšã«ãªããŸãã
ãã«ã ã¹ããŒãžã§ã¯ããããã®å®çŸ©æžã¿ã®ãã«ãåŒæ°ãããã€ã远å ããŸãããããã¯ããã®ã¹ããŒãžã§ãããã®ãã«ãåŒæ°ã䜿çšããŠããããã䜿çšããããšãã§ããããšãæå³ããŸãã ã¿ãŒã²ãã OS ã¯ããã©ãããã©ãŒã ã¿ãŒã²ããã® OS ã«è§£æ±ºãããARCH 㯠CPU ã¢ãŒããã¯ãã£ã§ãã æ¬¡ã«ããããã®Goåºæã®å€æ°ããããã®å€ã«èšå®ã§ããŸãããå°ãªããšãç§ã䜿çšããã±ãŒã¹ã§ã¯ããããã1察1ã«ãããã³ã°ãããŠããããã«èŠãããããããã¯éåžžã«ç°¡åã§ãã ããããã¯ããããã¯äœ¿çšããŠããã³ã³ãã€ã©ã«ãã£ãŠç°ãªããŸãã
Cã³ã³ãã€ã©ã䜿çšããŠããå Žåããããè¡ãæ¹æ³ã¯ç°ãªããŸãããããã幞ããªããšã«ããã®ããã®ãã«ããŒãããŸããTõnis Tiigiã«ãã XXãšããæ¬åœã«çŽ æŽããããããžã§ã¯ãããããŸãããã«ããã©ãããã©ãŒã ãã«ããããããè¡ã£ãŠããŠãã¯ãã¹ã³ã³ãã€ã«ã§ãããè¡ãäºå®ãããå Žåã¯ãããç°¡åãªæ¹æ³ã§ãããè¡ãã®ã«åœ¹ç«ã€çŽ æŽããããããžã§ã¯ãã§ãããããããããã§ãã¯ããŠãã ãããããã¯ãã¯ãã¹ã³ã³ãã€ã«ã䜿çšãããã«ãã®ã¹ã¯ãªãŒã³ã·ã§ããã«ãããŸããããšãã¥ã¬ãŒã·ã§ã³ã«ããæ§ç¯ã¯ 32 ç§ããããã§å®äºããŸãããã¯ãã¹ã³ã³ãã€ã«ã§ã¯ãåãã¿ãŒã²ããã 9ãããŸãã2ã代ãããéåžžã®ãã€ãã£ããã«ããããããã10åã®2é·ã§ãã
æ¬åœã«ãšããµã€ãã£ã³ã°ãªã®ã¯ããããå ã»ã©èŠããšã¯ã¹ããŒãæ©èœãã€ãŸããã¯ãã¹ã³ã³ãã€ã«ã䜿çšããã ãã§ããã«ããã©ãããã©ãŒã ãæ§ç¯ããç°ãªãã¢ãŒããã¯ãã£ã®è€æ°ã®ãã€ããªããã¹ãŠåããã«ãã§ãšã¯ã¹ããŒãã§ããããšã§ãã ãããã£ãŠããã®å Žåã2 ã€ã®ã¢ãŒããã¯ãã£çšã«ãã«ãããåºåãã£ã¬ã¯ããªã調ã¹ããšãæå®ãããã¢ãŒããã¯ãã£çšã« 2 ã€ã®ç°ãªããã€ããªãäœæãããŠããŸãã ããã䜿çšããŠãããŒã«ã«ã¢ãŒããã¯ãã£ããæ§ç¯ããããšãã§ããŸãã å®éã«ã¯ãããã§ã¯ããŒã«ã«ã®ãã©ãããã©ãŒã ã䜿çšããå¿ èŠããããŸãã ããããã¯ããããã«ãããã¯ãã¹ã³ã³ãã€ã«ã䜿çšããŠããŒãŠã£ã³ãã€ããªãæ§ç¯ããããšãã§ãããããèªåã®ãã·ã³ã§å®è¡ã§ããŸãã
çµè«
ããŠãããã¯Dockerã§æ§ç¯ããDockerfileã®ããŸããŸãªæ©èœãå©çšããããã®ãã³ããšã³ãã§ãããã®æç¹ã§ãDockerãã¡ã€ã«ã¯æ¬¡ã®ããã«ãªããŸããããã¯ç§ã«ã¯ããªãè¯ãããã§ããããã§ã¯ãã¬ã€ã€ãŒããã«ãã¹ããŒãžãã«ãããã£ãã·ã¥ããŠã³ãããã€ã³ãããŠã³ãããã«ããã©ãããã©ãŒã ãã«ãããã«ãåŒæ°ããã¹ããçµæã®ãšã¯ã¹ããŒããªã©ãåãäžããæ©èœã«ã€ããŠèª¬æããŸãããããèªåã§è©ŠããŠã¿ããå Žåã¯ã ããã¥ã¡ã³ãã®ãã«ãã¬ã€ã ã確èªããæé ãå®è¡ããŠãã ããããããç§ã«ãšã£ãŠã¯ããã§çµããã§ããããããšãããããŸããã
ããã«è©³ãã
- Docker Build
- ããã«ãŒãã¡ã€ã«ãäœæããããã®ãã¹ã ãã©ã¯ãã£ã¹
- ããã«ãŒéçºã®ãã¹ããã©ã¯ãã£ã¹
- Docker ãã¹ã¯ãããã®ææ°ãªãªãŒã¹ãå ¥æããŸãã
- 質åããããŸãã? Docker ã³ãã¥ããã£ããæäŒãããŸãã
- ããã«ãŒã¯åããŠã§ãã? å§ããŸãããã
- Docker Newsletter ã賌èªããŠãã ããã