ãã®ã²ã¹ãæçš¿ã§ã¯ãAdnovumã®å°åCTOã§ããDavid BalakirevããDockerã«åºã¥ãã³ã³ãããã¯ãããžãŒã®å©ç¹ãã©ã®ããã«ç€ºããŠãããã«ã€ããŠèª¬æããŸãã Adnovumã¯ãã³ã³ãµã«ãã£ã³ã°ãšèšèšããå®è£ ãšéçšãŸã§ã®ããžãã¹ããã»ã¹ã®è¿ éãã€å®å šãªããžã¿ã«åãå æ¬çã«ãµããŒãããã¹ã€ã¹ã®ãœãããŠã§ã¢äŒç€Ÿã§ãã
â
1.ã³ã³ããã¯æšæºåãããéçºãæäŸããŸã
ãœãªã¥ãŒã·ã§ã³ãããã€ããŒãã¿ãŒã²ããç°å¢ã®è€éãã§ã¯ãªãã䟡å€ã®æäŸã«çŠç¹ãåœãŠããšã誰ããåã¡ãŸãã ããã¯ã³ã³ãããèŒããšããã§ãã
ã³ã³ãããã¯ãããžãŒè£œå(Dockerãªã©)ã®å€§èŠæš¡ãªæ¡çšãšãæšæºã®ã³ã³ããã©ã³ã¿ã€ã ãã©ãããã©ãŒã (Kubernetesãªã©)ã®ç¶ç¶çãªæ®åã«ãããéçºè ã¯èæ ®ãã¹ãäºææ§ã®åŽé¢ãå°ãªããªã£ãŠããŸãã ã¿ãŒã²ããç°å¢ã«ç²ŸéããŠããããšã¯äŸç¶ãšããŠéèŠã§ãããéçºäžã«åããã©ãããã©ãŒã ã§äœæ¥ã§ããéããç¹å®ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãã€ã³ã¹ããŒã«ãããŠãããŠãŒãã£ãªãã£ãããã³ãµãŒãã¹ã¯ããã»ã©åé¡ã«ãªããŸããã ããããæ°ããã³ã³ããã©ã³ã¿ã€ã ãªãã·ã§ã³ã®æ°ãå¢ããŠããçç±ã®1ã€ã§ãããšèããŠããŸãã
ãªã³ãã¬ãã¹ç°å¢ã察象ãšããã¯ãŒã¯ããŒãã®å Žåãå¿ èŠãªãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã®ã¬ãã«ã«åºã¥ããŠã©ã³ã¿ã€ã ãã©ãããã©ãŒã ãéžæã§ããŸãã äžéšã®ããŒã ã¯ãDocker-Composeãä»ããŠå°æ°ã®ãµãŒãã¹ãå®è¡ããããšã決å®ããŸãããããã¯éçºããã³ãã¹ãç°å¢ã§ã¯äžè¬çã§ãããçç£çãªã€ã³ã¹ããŒã«ã§ã¯å代æªèã§ã¯ãããŸããã æ¬æ Œçãªã³ã³ãããªãŒã±ã¹ãã¬ãŒã¿ãä¿èšŒãããŠãŒã¹ã±ãŒã¹ã§ã¯ãKubernetes(ããã³OpenShiftãªã©ã®æŽŸçç©)ãäŸç¶ãšããŠæ¯é çã§ãã
ã¯ã©ãŠãåãã«éçºããŠãã人ã¯ã倿°ã®ãªãã·ã§ã³ããéžæã§ããŸãã Kubernetesã¯ãã¹ãŠã®äž»èŠãªã¯ã©ãŠããã©ãããã©ãŒã ã«ååšããŸãããã»ããããŒãžããµãŒãã¹ãããã«ãããŒãžããµãŒãã¹ãŸã§ãã¢ããªã·ãã¯ã¯ãŒã¯ããŒããæã€ãŠãŒã¶ãŒåãã«ããããã®ã·ã³ãã«ãªWebã¢ããªã±ãŒã·ã§ã³(Azure App ServicesãGoogle Cloud Platformã®App Engineãªã©)ãå ¬éããããã®ãªãã·ã§ã³ããããŸãã
ãµãŒããŒã¬ã¹ã«ææŠããå Žåããããã€ãŠãããã¯éåžžãã³ã³ããã€ã¡ãŒãžãŸãã¯ãœãŒã¹ã³ãŒãã®ããããã§ããããã©ãããã©ãŒã ãã³ã³ããã«å€ãããŸãã
ããããã¹ãŠã®ãªãã·ã§ã³ã䜿çšããŠãã客æ§ãã³ã³ãããã¯ãããžãŒãã©ã®ããã«æ¡çšãããã远跡ããããšã¯è峿·±ãããšã§ãã äžå°äŒæ¥ã®ITæŠç¥ã¯ãç§ãã¡ã®ãããªãœãªã¥ãŒã·ã§ã³ãããã€ããŒãå©çšããããšã«è¿ éã«åå¿ããŠããããã«èŠããŸããã
ããããå€§äŒæ¥ã远ãã€ããŠããŠããŸãã ç§ãã¡ã¯ãäŒæ¥ã®ã客æ§ãã³ã³ããããã®ä»ã®ã¯ã©ãŠããã€ãã£ããã¯ãããžãŒã䜿çšããŠãœãããŠã§ã¢ãæ§ç¯ããã³åºè·ããããšã®å©ç¹ãèªèããåŸåãæè¿ããŸãã
å šäœãšããŠãã³ã³ãããšããŠã®èŒžéãœãªã¥ãŒã·ã§ã³ãæšæºã«ãªãã€ã€ãããšèšããŸãã Adnovumã§ã¯Dockerã䜿çšããŠãããéçºè ã«ãšã£ãŠå ·äœçãªã¡ãªãããèŠãããŸããã ãããã®å©ç¹ããã£ãšèŠãŠã¿ãŸãããã
2.é²åºãå¶éãããŠãããšããããšã¯ãã»ãã¥ãªãã£ã匷åãããŠããããšãæå³ããŸã
(åŸæ¥ã®OSããã±ãŒãžãšã¯å¯Ÿç §çã«)ã³ã³ãããã©ãããã©ãŒã ãã¿ãŒã²ããã«ãããšãã»ãã¥ãªãã£ã«ã圱é¿ãåã³ãŸãã ããšãã°ãå®å šã«ç®¡çããã Kubernetes ãã©ãããã©ãŒã ãäžãããããšããŸãã ã€ãŸããã¯ã©ã€ã¢ã³ãã®ITããŒã ã¯ãå®å šãªæ¹æ³ã§ã¯ã©ã¹ã¿ãŒãæ§æããã³éçšãã責任ããããŸãã ãã®ãããªå Žåãéçºè ã¯ç§ãã¡ãæäŸããã¢ããªã±ãŒã·ã§ã³ã«æ³šæãåããããšãã§ããŸãã ã³ã³ãããã¯ãããžãŒã®ãããã§ãããŸããŸãªæ»æãè匱æ§ã«ãããããããšãããã«å¶éã§ããŸãã
ããã¯ãã¢ããªã±ãŒã·ã§ã³ã«å³å¯ã«å¿ èŠãªãã®ã ããããã±ãŒãžåããããšã§ãæ»æå¯Ÿè±¡é åãæžããããšãã§ãããšããã³ã³ãããŒã®åºæ¬çãªèãæ¹ãšçµã³ã€ããŠããŸãã ããã¯ãã€ã¡ãŒãžã æåãã æ§ç¯ããããææç©ãå²ãå®å šãªåºæ¬ã€ã¡ãŒãžãéžæããããšã§å®çŸã§ããŸãã Docker Hub ã§ã»ãã¥ãªãã£ã§ä¿è·ãããããŒã¹ ã€ã¡ãŒãžãéžæããå Žåã¯ãæ€èšŒæžã¿ã®ããŒãã£ã«ãã£ãŠçæãããã³ã³ãã㌠ã€ã¡ãŒãžããã£ã«ã¿ãŒåŠçããããšããå§ãããŸãã

ãŸããå®å šãªããã±ãŒãžåããã»ã¹ãéçºããŒã«ã«ãã£ãŠåŠçãããå ŽåããããŸãã ç§ãã¡ã¯å€ãã®Webã¢ããªã±ãŒã·ã§ã³ãããžã§ã¯ãã§Spring Bootã䜿çšããŠããŸãã Spring Boot ã«ã¯ãã«ã ããã¯ãçµã¿èŸŒãŸããŠãããå¹ççãã€ä¿¡é Œæ§ã®é«ãæ¹æ³ã§ Web ã¢ããªã±ãŒã·ã§ã³ãã Docker OCI ã€ã¡ãŒãžããã«ãã§ããŸãã ããã«ãããéçºè ã¯åºæ¬ã€ã¡ãŒãžãæ¢ãå¿ èŠããªããªããããŸããŸãªæé©åãè¡ãå¿ èŠæ§ã軜æžãããŸã (ãã ããå®å šã«æé€ãããããã§ã¯ãããŸãã)ã

Docker Desktop ã䜿çšããŠããéçºè ã¯ãããŒã«ã«ã»ãã¥ãªãã£ã¹ãã£ã³ã詊ããŠãã³ãŒããã¢ãŒãã£ãã¡ã¯ããªããžããªã«å ¥ãåã«è匱æ§ãèŠã€ããããšãã§ããŸã https://docs.docker.com/engine/scan/
3. ã³ã³ããã¯å€æ§ãªéçºè ç°å¢ããµããŒã
Adnovumã¯Webããã³ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®éçºãå°éãšããŠããŸããããããã®å¢çå ã§ã¯å¹ åºããã¯ãããžãŒãå©çšããŠããŸãã ãã®ãããªç°çš®ç°å¢ããµããŒãããã®ã¯é£ããå ŽåããããŸãã
Linuxã§åäœããã¹ããªã³ã°ããŒãéçºè ãšãMacã§Angularããã³ããšã³ããéçºããå¥ã®éçºè ããããšæ³åããŠãã ããã ã©ã¡ããããã·ã³äžã§ãããžã§ã¯ããéçºããããã«äžé£ã®ããŒã«ãšäŸåé¢ä¿ã«äŸåããŠããŸãã
- ããŒã«ã«ã»ããŒã¿ããŒã¹ã»ã€ã³ã¹ã¿ã³ã¹
- 第äžè ãµãŒãã¹ã®ãã¹ãããã«(ã¢ãã¯ãªã©)
- ãã©ãŠã¶ â å Žåã«ãã£ãŠã¯è€æ°ã®ããŒãžã§ã³
- ã©ã³ã¿ã€ã ããã«ãããŒã«ãªã©ã®éçºè ããŒã«
ç§ãã¡ã®çµéšã§ã¯ããããã®ããŒã«ããã€ãã£ãã«ã€ã³ã¹ããŒã«ãããŠããå Žåãè€æ°ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ãããã®ããŒã«ããµããŒãããã®ã¯é£ããå ŽåããããŸãã 代ããã«ããããã®ã§ããã ãå€ããã³ã³ããã«ããã·ã¥ããããšããŸãã ããã«ãããéçºè ãšã¯ã¹ããªãšã³ã¹ã調æŽãããã©ãããã©ãŒã éã§ã¡ã³ããã³ã¹ã³ã¹ããåæžã§ããŸãã
WindowsãŸãã¯Macã§äœæ¥ããŠããéçºè ã¯ãã³ã³ãããå®è¡ã§ããã ãã§ãªããããã€ãã®è¿œå æ©èœãããããDocker Desktopã䜿çšã§ããŸã( Docker Desktopã¯Linuxã§ãå©çšã§ããŸãããDocker-engineãçŽæ¥äœ¿çšããããšãã§ããŸã)ã ããšãã°ã docker-compose ãããã«äœ¿çšã§ãããããããŸããŸãªãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ã€ã³ã¹ããŒã«ã§ããããšãå¿é ããå¿ èŠã¯ãããŸããã ãã®ãããªå€ãã®ããŒã«ã§ãããè¡ããšããµããŒãããŒã ã®èªç¥çããã³ã³ã¹ããå€§å¹ ã«åæžã§ããŸãã
ãã®æ¹æ³ã§äŸåé¢ä¿ãã¢ãŠããœãŒã·ã³ã°ããããšã¯ãéçºè ãäžåºŠã«è€æ°ã®ãããžã§ã¯ãã§äœæ¥ããå¿ èŠãããå Žåã«ã圹ç«ã¡ãŸãã çµå±ã®ãšãããããŒã¿ããŒã¹ããã©ãŠã¶ãããã³ããŒã«ã®è€æ°ã®ããŒãžã§ã³ãã€ã³ã¹ããŒã«ããããšã楜ããã§ãã人ã¯èª°ãããŸããã
éåžžããã®ææ³ã¯æè¿ã®ãããžã§ã¯ãã«é©çšã§ããŸãããDockerã倧éã«æ¡çšãããåã®ãã¯ãããžãŒãåããå€ããããžã§ã¯ãã®å ŽåããŸã 宿é¡ããããŸãã
4.ã³ã³ããã¯åçŸæ§ãé«ããŸã
ããã®ãœãããŠã§ã¢ã¡ãŒã«ãŒãšããŠãç§ãã¡ã¯ã¯ã©ã€ã¢ã³ãã«åªãããœãªã¥ãŒã·ã§ã³ãæäŸããã ãã§ãªããæžå¿µäºé (æ©èœãŸãã¯ã»ãã¥ãªãã£)ãããå Žåãã¢ãŒãã£ãã¡ã¯ã(éåžžã¯Webã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ããã€ã¡ãŒãž)ãçæããæ£ç¢ºãªã³ãŒã倿Žã«åé¡ã远跡ã§ããããã«ããããšèããŠããŸãã æçµçã«ã¯ãäžèšã®ã¢ãŒãã£ãã¡ã¯ãã®ä¿®æ£ããŒãžã§ã³ãåæ§ç¯ããå¿ èŠãçããå¯èœæ§ããããŸãããããã¯å°é£ãªå ŽåããããŸãã ããã¯ããã«ãç°å¢ãæéãšãšãã«é²åããæäŸãããã®ã®äºææ§ãŠã£ã³ããŠãçµ¶ããå€åããããã§ãã
ç§ãã¡ã®çµéšã§ã¯ã èªåå (ç¹ã«ã³ãŒããšããŠã®ã€ã³ãã©ã¹ãã©ã¯ãã£)ã¯ãä¿¡é Œæ§ãé«ãã¹ã±ãŒã©ãã«ãªãã«ãã€ã³ãã©ã¹ãã©ã¯ãã£ãéçºè ã«æäŸããããã®éµã§ãã ãœãããŠã§ã¢ãŸãã¯ããŒããŠã§ã¢ã®é害ãçºçããå Žåã«ç°å¢ãè¿ éã«åäœæãããã調æ»ã®ããã«å€ãæ§æãã©ã¡ãŒã¿ãŒã«åŸã£ãŠã€ã³ãã©ã¹ãã©ã¯ãã£ã³ã³ããŒãã³ããããããžã§ãã³ã°ãããã§ããããã«ããããšèããŠããŸãã ç§ãã¡ã®æŠç¥ã¯ãAnsibleãTerraformãªã©ã®ããŒã«ã䜿çšããŠãã¹ãŠã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã管çããããšã§ããããšã³ãžãã¢ã¯æåã§ãµãŒãã¹ã管çããããšãé¿ããããšã匷ããå§ãããŸãã ããã¯ãããŒã¿ã»ã³ã¿ãŒãšã¯ã©ãŠãç°å¢ã«ãåœãŠã¯ãŸããŸãã
å¯èœãªéãããµãŒãã¹ãåŸæ¥ã®ããã±ãŒãžãšããŠã€ã³ã¹ããŒã«ããã®ã§ã¯ãªããã³ã³ãããŒãšããŠå®è¡ããããšããå§ãããŸãã NGINX ã PostgreSQL ãªã©ã®ãã¬ã³ãã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãµãŒãã¹ã®å€ãã¯ã Docker Hubã«ãããŸãã
ããŒã¡ãã㯠ãã«ã ãããã·ã¥ããããšããã®ã¯ãç¬èªã®äŸåé¢ä¿ãããŒãã¹ãã©ããã§ãããããç¹å®ã® CI/CD ãã©ãããã©ãŒã ãæäŸãããã«ã ã³ã³ããã¹ãã«ã€ã³ã¹ããŒã«ãããŠãããã®ãžã®äŸå床ãå€§å¹ ã«äœäžããããã§ããåŸæ¥ããã·ã³ã«ã€ã³ã¹ããŒã«ãããŠãããã©ãŠã¶ãŒã«äŸåããèªå UI ãã¹ãã®ãµããŒãã«ã¯èª²é¡ããããŸããã ç§ãã¡ã®ãããžã§ã¯ãã®æ°ãå¢ããã«ã€ããŠããã©ãŠã¶ã®ããŒãžã§ã³ã«å¯Ÿãã圌ãã®æåŸ ã¯åãããŸããã ããã¯ãèªååã«å°å¿µããŠããµããŒããããã«å°é£ã«ãªããŸããã ãã®åŸãNode.jsãJava JDKãªã©ã®ããŒã«ã§ãåæ§ã®èª²é¡ã«çŽé¢ããéèŠã«è¿œãã€ãããšã¯ã»ãšãã©äžå¯èœã§ããã
æçµçã«ãèªåãã«ãã«ããŒãã¹ãã©ãããšã³ã³ãããæ¡çšãããããžã§ã¯ãã«å¿ èŠãªChromeãŸãã¯Javaã®ããŒãžã§ã³ãããŒã ãå®çŸ©ã§ããããã«ããããšã«ããŸããã CI/CD ãã€ãã©ã€ã³ã§ã¯ãå¿ èŠãªããŒãžã§ã³ã®äŸåé¢ä¿ããŸã ãã£ãã·ã¥ãããŠããªãå Žåã¯ããã«ãåã«ããŠã³ããŒããããŸãã
äžå€æ§ ãšã¯ãäŸåé¢ä¿ãšè£œåã®æ§ç¯åŸã«å€æŽãããªãããšãæå³ããŸãã æ®å¿µãªãããããã¯Dockerã¿ã°ã®ä»çµã¿ã§ã¯ãããŸããã å®éãDockerã¿ã°ã¯èšèšäžå€æŽå¯èœã§ããã SemVerã«æ £ããŠããå Žåãæåã¯æ··ä¹±ããå¯èœæ§ããããŸãã
ããªãã®Dockerfileãæ¬¡ã®ããã«å§ãŸããšããŸããã:
ã¢ã¯ã¡ãã:1.2.3
ç¬èªã®ã€ã¡ãŒãžã(å)ãã«ããããšãã¯ãã€ã§ããåãåºæ¬ã€ã¡ãŒãžã䜿çšããããšä»®å®ããã®ã¯è«ççã§ãã å®éã«ã¯ã誰ããåãã©ãã«ã§æ°ããç»åãå ¬éããããšã決å®ããå Žåã«åããŠãã©ãã«ã¯ç°ãªãç»åãæãå¯èœæ§ããããŸãã 圌ãã¯ããã€ãã®çç±ã§ãããè¡ããããããŸãã:æã«ã¯å¿ èŠã«è¿«ãããŠããããããã¯ãŸãæªæã®ããçç±ã§ããå¯èœæ§ããããŸãã
以åãšãŸã£ããåãç»åã䜿çšããããšã確èªãããå Žåã¯ã ãã€ãžã§ã¹ããä»ããŠç»åã®åç §ãéå§ã§ããŸãã ããã¯ã䜿ãããããšã»ãã¥ãªãã£ã®ãã¬ãŒããªãã§ãã ãã€ãžã§ã¹ãã䜿çšãããšãçã«åçŸå¯èœãªãã«ãã«è¿ã¥ããŸãããåºæ¬ã€ã¡ãŒãžã®äœæè ãåãã¿ã°ã§æ°ããã€ã¡ãŒãž ããŒãžã§ã³ãçºè¡ããå Žåããã«ãã¯ææ°ããŒãžã§ã³ã䜿çšããªããªããŸãã ã©ã¡ãã®åŽã«åŸããŠããå Žåã§ããä¿¡é Œã§ãããœãŒã¹ããã®åºæ¬ã€ã¡ãŒãžã䜿çšãããã€ãã©ã€ã³ã«è匱æ§ã¹ãã£ã³ãå°å ¥ããå¿ èŠããããŸãã
äžå€æ§(ãã®ãã¹ãŠã®èª²é¡)ãèªååãããã³æ°å¯ãã«ããçµã¿åãããããšã§ãå€ãããŒãžã§ã³ã®ã³ãŒããåæ§ç¯ã§ããããã«ãªããŸãã ãã°ãåçŸããããããŸãã¯ä¿®æ£ãããã¢ãŒãã£ãã¡ã¯ããåºè·ããåã«è匱æ§ã«å¯ŸåŠããããã«ããããè¡ãå¿ èŠãããå ŽåããããŸãã
åçŸæ§ãžã®éã®ãã«ã¯ãŸã æ¹åã®æ©äŒããããŸãããéäžã§ã³ã³ãããæ¡çšããããšã¯ ã ç§ãã¡ãåã³äžã決å®ã§ããã
çµè«
ã³ã³ãããç¹ã«Dockerã¯ãå°èŠæš¡ãªã·ã§ããããäŒæ¥ãŸã§ããã¹ãŠã®éçºè ã°ã«ãŒãã«ãšã£ãŠå€§ããªåŸæŒãã«ãªãå¯èœæ§ããããŸãã ã»ãšãã©ã®ãããã¯ãšåæ§ã«ããã¹ããã©ã¯ãã£ã¹ãç¥ãããšã¯ãçµéšãšåŠç¿ã®ããã®é©åãªãœãŒã¹ã䜿çšããããšã«ãã£ãŠããããããŸãã
Dockerã®å¹ åºãæ©èœãæå€§éã«æŽ»çšããã«ã¯ã å¿ ãããã¥ã¡ã³ããåç §ããŠãã ããã
AdnovumãäŒæ¥ãçµç¹ã®ããžã¿ã«ã®å¯èœæ§ã«å°éããã®ãã©ã®ããã«æ¯æŽããŠãããã«ã€ããŠã®è©³çްã¯ãåœç€Ÿã® Webãµã€ãã«ã¢ã¯ã»ã¹ããŠãã ããã