hakuãDockerã®åæãã¡ã€ã«å ±æã§Ruby on Railsã«ãããã€ãé«éå
æžç±æŠèŠ: hakuã¯ãå€§èŠæš¡ãªèä¹
ã€ãã³ããéå¶å©å£äœåãã«ãç»é²ã顧客ãšã³ã²ãŒãžã¡ã³ãããè³é調éãåæãeã³ããŒã¹ãŸã§ãããŸããŸãªæ©èœãåãããªãŒã«ã€ã³ã¯ã³ãã©ãããã©ãŒã ãæäŸããŠããŸãã
ç£æ¥ïŒ ãšã³ãã¥ã©ã³ã¹ã€ãã³ããšéå¶å©å£äœ
å ŽæïŒãããªãå·ãã€ã¢ã
ãã€ã©ã€ã
- æ°ããç°å¢ã®ã»ããã¢ããæéãæ°æ¥ããæ°æéã«ççž®ããŸãã
- MacãŠãŒã¶ãŒåãã®åæããããã¡ã€ã«å ±æã«ãããããŒã«ã«å¿çæéã10åã«æ¹åãããŸãã
- ç°å¢ã®äžè²«æ§ã®åäžããªã³ããŒãã£ã³ã°ã®è¿ éåãå šäœçãªéçºã®åŒ·åã
æŠèŠ
2013幎ãhakuã¯ãããªãå·ãã€ã¢ãã§ã«ã«ãã¹ã»ãšã¹ã³ãã«ãšãã»ã»ãšã¹ã³ãã«ã®å åŒã«ãã£ãŠèšç«ãããèä¹ ã¬ãŒã¹ãšéå¶å©ã®è³é調éã®éå¶ã«é©åœãèµ·ãããšããããžã§ã³ãæ²ããŠããŸãããšã³ãã¥ã©ã³ã¹ã€ãã³ãåéã§ã¹ã¿ãŒãããæåã®ããã·ã§ã³ã¯ãã€ãã³ãçµç¹ãç°¡çŽ åããã€ãã³ãäž»å¬è ãšåå è ã®äž¡æ¹ã«é¢é£ããè€éãã管çãããã©ãããã©ãŒã ãæäŸããããšã§ããã
å€§èŠæš¡ãªã€ãã³ãã®ã·ãŒã ã¬ã¹ãªç®¡çãæ±ããããèä¹ ã€ãã³ãç®¡çæ¥çã«ãããŠãhakuã¯ããã³ã¯ã»ãªãã»ã¢ã¡ãªã«ã»ã·ã«ãŽã»ãã©ãœã³ãæµ·å µéãã©ãœã³ã»ãªãŒã¬ããŒãŒã·ã§ã³ãã€ãŒã°ã«ã¹èªéç財å£ãªã©ãæå€§30000åå è ãåãå ¥ããäŒæ¥çµç¹åãã®ãœãªã¥ãŒã·ã§ã³ã«æ³šåããŸãããåã€ãã³ãã®è€éãã«ã¯ãå®ç§ãªå®è¡ã䞊å€ããåå è ã®é¢äžãããã³å³æ Œãªããžã¹ãã£ãã¯èª¿æŽãå¿ èŠã§ããã æå 端ã®ãã¯ãããžãŒã掻çšãããšããHakuã®ã³ãããã¡ã³ãã¯ãæ¥çæšæºãåå®çŸ©ããã¬ãã«ã®ãµãŒãã¹ãšå¹çæ§ãçŽæãã圌ããéç«ãããŸããã
æ ã®æ©ã段éã§ãhakuã¯æé·ãšã€ãããŒã·ã§ã³ãé»ãé倧ãªéå£ãšããŠãéçºç°å¢ã®ã»ããã¢ãããšããè€éã§æéã®ãããããã»ã¹ãããããšã«æ°ä»ããŸããã ãã®ç€Ÿå ã®èª²é¡ã¯ãMacOSéçºã«ããããã¡ã€ã«åæã®èª²é¡ãšçžãŸã£ãŠãéçºããŒã ãšèä¹ ã€ãã³ã管çã«ãããåžå Žã®éèŠãžã®å¯Ÿå¿ãé ãããæãããããŸããã
Hakuæ°ã®èª²é¡ã¯ãããŸããŸãªéçšç°å¢ã§äžè²«ããããã©ãŒãã³ã¹ã確ä¿ãããªã³ããŒãã£ã³ã°ããçµèº«ãªãŒããŸã§è³ªã®é«ãéçºè ãšã¯ã¹ããªãšã³ã¹ã確ä¿ãããšããããã¯ãããžãŒæ¥çå ã®ããåºç¯ãªèª²é¡ãåæ ããŠããŸãã 解決çãæš¡çŽ¢ããçµæãDockerãšMutagen(Dockeræ¡åŒµæ©èœ)ãSynchronizedãã¡ã€ã«å ±æãšããŠDocker Desktopã«çµ±åãããŸããã ãããã®ãã¯ãããžãŒã¯ãéçºã©ã€ããµã€ã¯ã«ã®æ ¹å¹¹ããªãç¹å®ã®ã¹ã±ãŒãªã³ã°ã®åé¡ã«å¯ŸåŠããããšãçŽæããŸããã ãã®æ±ºå®ã¯ãhakuã®ã¹ããŒãªãŒã«ãããæ¥µããŠéèŠãªç« ã®å§ãŸãã§ãããã€ãããŒã·ã§ã³ãžã®ã³ãããã¡ã³ããšãããžã§ã³ã远æ±ããããã«ãã¯ãããžãŒã掻çšããèœåã詊ãããããšã«ãªããŸãã
åé¡ã
MacOSéçºã®ã»ããã¢ãããé ã
hakuã®éçºç°å¢ã®åæã»ããã¢ããã¯ãè€éã«çµ¡ã¿åã£ãäŸåé¢ä¿ã«é¥ããç ©éã§æéã®ããããã®ã§ããã ãã®ã»ããã¢ããã¯ãæ°ãã人æã®ãªã³ããŒãã£ã³ã°ãšã€ãããŒã·ã§ã³ã®ããŒã¹ãç¶æããããã«äžå¯æ¬ ã§ããã Docker ãå°å ¥ããåã¯ãã»ããã¢ããã« 1 æ¥ãã 3 æ¥ããããç°å¢åºæã®æè¡çãªè€éãã«ãã£ãŠé ããªã£ãŠããŸããã èä¹ ã€ãã³ã管çã®ãã¯ãããžãŒã®æåç·ã«ããäŒæ¥ã«ãšã£ãŠããã®é å»¶ã¯åãªãäžäŸ¿ä»¥äžã®ãã®ã§ãããããã¯ãä¿ææ§ãšè¿ éãªéçºã®éå£ã§ããã
åéçºè ã®ãã·ã³ã§ã¯ã倿°ã®ãœãããŠã§ã¢äŸåé¢ä¿ãç¶¿å¯ã«æ§æããå¿ èŠããããŸããã ãã®ããã»ã¹ã¯æœåšçãªãšã©ãŒãäžæŽåãã¯ããã§ãããäžè¬ã«ãäŸåå°çããšåŒã°ããç¶æ³ã«é¥ããŸããã ãœãããŠã§ã¢éçºã®åçãªæ§è³ªã¯ããããã®äŸåé¢ä¿ãç¶ç¶çã«é²åããã»ããã¢ããããã»ã¹ãããã«è€éã«ãªãããšãæå³ããŠããŸããã
hakuã®éçºããŒã ã¯ãMacã³ã³ãã¥ãŒã¿ã®ã¿ã䜿çšããŠããŸãã ãããã®ããŒã ã¡ã³ããŒã¯ãããŒã«ã«ãã·ã³ãšéçºã³ã³ããéã§æŽæ°ãããã³ãŒãããã¡ã€ã«ãé »ç¹ã«äº€æããã¯ãŒã¯ãããŒã®éèŠãªåŽé¢ã§ãããã¡ã€ã«åæã«é¢ããæ°žç¶çãªèª²é¡ã«çŽé¢ããŠããŸããã ã·ãã¢ãœãããŠã§ã¢ãšã³ãžãã¢ã®Steven Witteæ°ã¯ããåœç€Ÿã®ã³ãŒãããŒã¹ã§ã¯ãDockerã®ãã€ãã£ããã€ã³ãããŠã³ã(åºç€ãšãªãOSã®å¶é)ã§ã¯äžååã§ããã ç§ãã¡ã«ã¯é ãããŸããã éçºè ãåãã圱é¿ã®åºŠåãã¯ã倧ããªãã©ã¹ãã¬ãŒã·ã§ã³ãåŒãèµ·ãããŸããã
ãããã®æè¡çãªèª²é¡ã«æ°ã¥ããããšã§ãhakuã¯é©æ°ããåžå Žã®éèŠã«å¿ããããšãã§ããªããªããå€åãä¿é²ãããŸããã çµå¶é£ã¯ãéçºç°å¢ã®ã»ããã¢ãããåçåããçç£æ§ãåäžããããœãªã¥ãŒã·ã§ã³ã®å¿ èŠæ§ãèªèããDockerã«çŠç¹ãç§»ããŸããã ãã®æŠç¥ç決å®ã¯ãããŒã ãçŽé¢ããŠããç¹å®ã®èª²é¡ã«å¯ŸåŠããæ°ããã¬ãã«ã®å¹çæ§ãšã€ãããŒã·ã§ã³ãè§£ãæŸã€æºåãã§ããŠããŸããã
ãœãªã¥ãŒã·ã§ã³
Dockerã®æ¡çšãšãã¡ã€ã«åæã®æ¹åã«ãããå¹çæ§ãåäž
hakuã®ã¿ãŒãã³ã°ãã€ã³ãã¯ãDockerã®æŠç¥çå°å ¥ã§ããã ãã®ãã©ãããã©ãŒã ã«ãããããŸããŸãªç°å¢ã«ãããRuby on Railsæè¡ã¹ã¿ãã¯ã®ã»ããã¢ãããšç®¡çãåçåãããŸããã ããããDockerãMutagenãè²·åããDocker Desktopã«çµ±åããããšã§ãç¹ã«hakuæ°ã®ããŒã ã®MacãŠãŒã¶ãŒã«ãšã£ãŠã¯ãæè¡åãé£èºçã«åäžããŸããã ãæ°ããçµã¿èŸŒã¿ã®åæãã¡ã€ã«ãDockerãšå ±æããããšã§ãå šäœçã«ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŸããããšããšã³ãžãã¢ãªã³ã°æ åœå¯ç€Ÿé·ã®Adam Toroæ°ã¯è¿°ã¹ãŠããŸãã
Dockerã®ã³ã³ããåãã¯ãããžãŒã¯ãéçºããã¹ããæ¬çªç°å¢ã«äžè²«æ§ã®ããåé¢ãããç°å¢ãæäŸãã以åã®ã»ããã¢ãããæ©ãŸããŠããã°ãã€ããæé€ããŸããã åæããããã¡ã€ã«å ±æãDocker Desktopã«çµ±åããããšã¯ããã¡ã€ã«åæã®èª²é¡(ãŸãã«Macã䜿çšããéçºè ãçŽé¢ããããã©ãŒãã³ã¹ã®äœäžã®åé¡)ã®è§£æ±ºçã§ãããéåžžã«åœ¹ç«ã¡ãŸããã Witteæ°ã¯ãã®éèŠæ§ã匷調ãããDocker Desktopã®åæãã¡ã€ã«å ±ææ©èœã¯ãç§ãã¡ã«ãšã£ãŠç°¡åãªããšã§ããã ãããã§ãå°åéçºã®å¹çãå€§å¹ ã«åäžããŸããã ãã¹ãç°å¢ãšã³ã³ããç°å¢éã®ãã¡ã€ã«å ±æã®é床ãšä¿¡é Œæ§ãåçã«åäžãããããéçºè ãè¡ã£ã倿Žã¯ãé¢åãªæååæãå¿ èŠãšããã«ã¢ããªã±ãŒã·ã§ã³ã«è¿ éã«åæ ãããããã«ãªããŸããã
äž»ãªå©ç¹
è¿ éãªæ©æ¢°ã»ããã¢ãããšãªã³ããŒãã£ã³ã°æéã®ççž®
Docker ãžã®ç§»è¡ã«ãããéçºçšã®æ°ãããã·ã³ã®ã»ããã¢ããã«å¿ èŠãªæéãå€§å¹ ã«ççž®ãããŸããããDocker ãžã®ç§»è¡ãç¹ã«éçºç°å¢ãžã®ç§»è¡ã«ãããæ°ããããŒã ã¡ã³ããŒã®ãªã³ããŒãã£ã³ã°ãå€§å¹ ã«è¿ éåãããã»ããã¢ããæéãæ°æ¥ããæ°æéã«ççž®ãããŸããããš Toro æ°ã¯èªããŸãã
æè¡ã¹ã¿ãã¯ãã¢ããã°ã¬ãŒãããRuby on Railsã®è€æ°ããŒãžã§ã³ãå®è¡ãã
Dockerã¯ãHakuã®æè¡ã¹ã¿ãã¯ãã¢ããã°ã¬ãŒãããäžã§æ¥µããŠéèŠã§ãããRuby on Railsã®ããŸããŸãªããŒãžã§ã³ãããå¹ççã«å®è¡ã§ããããã«ããŠããŸãããã®æ©èœã«ãããææ°ããŒãžã§ã³ã®Ruby on Railsã§æ°ããã¢ããªãéçºããããšãã§ããmacOSã·ã¹ãã ã§ã®äŸåé¢ä¿ç®¡çã«é¢é£ãã課é¡ãåé¿ã§ããŸãã
æ°ãµãŒãã¹ã®ã·ãŒã ã¬ã¹ãªå°å ¥
Dockerã®äœ¿çšã«ãããHakuã®ãã©ãããã©ãŒã ã«æ°ãããµãŒãã¹ãå°å ¥ããããã»ã¹ãåçåãããã·ãŒã ã¬ã¹ã§åŽåéçŽçãªãšã¯ã¹ããªãšã³ã¹ãå®çŸããŸããããã®å¹çæ§ã¯ãDocker ã䜿çšããŠéçºç°å¢ãç°¡åã«ã»ããã¢ããããäžè²«æ§ã確ä¿ããç°ãªãéçºè ã®ãã·ã³éã§è€æ°ã®ããŒãžã§ã³ã®ãœãããŠã§ã¢ã管çããããšã«é¢é£ããè€éãã軜æžããããšã«èµ·å ããŠããŸãã
éçºãšåºè·ã®ã¹ããŒã
Docker ãæŽ»çšããããšã§ãHaku ã¯ã¢ããããŒããããè¿ éã«éçºããŠãªãªãŒã¹ã§ããããã«ãªããŸãããéçºãã¹ããŒãžã³ã°ãæ¬çªç°å¢ã®éã§äžè²«ããç°å¢ã«ããããããã€äžã®é©ããæé€ãããäžäœç°å¢ã§ãã¹ãããããã®ãæ¬çªç°å¢ã§åãããã«åäœããããšãä¿èšŒããŸãããç§ãã¡ã¯ãDockerãéçºã®ããã®ããŒã«ãšããŠã ãã§ãªããéçºãµã€ã¯ã«å šäœãå€§å¹ ã«åŒ·åããç©äºãããéããããä¿¡é Œæ§ã®é«ããã®ã«ãããã®ãšèããŠããŸãã
ç°å¢éã®äžè²«æ§
Dockerã¯ããã¹ãŠã®äŸåé¢ä¿ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ããŒãžã§ã³ãããã³ã©ã€ãã©ãªããã¹ãŠã®ç°å¢ã§äžè²«ããŠããããšãä¿èšŒããŸãã ãã®äžè²«æ§ã«ãããããŒã«ã«ã®macOSãã·ã³ãšLinuxã®æ¬çªãµãŒããŒéãªã©ãç°å¢ã®éãã«ãã£ãŠçºçããäžäžèŽã®åé¡ã解決ãããŸãã
çµæ
ãŽãŒã«ã©ã€ã³:ã³ã³ããåã¯æè¡é²åã®ã¢ãã«
Docker Teamã®å°å ¥ã¯haku瀟ã«å€é©ããããããæãé¡èãªåœ±é¿ã¯ç°å¢ã®ã»ããã¢ããæéã®å€§å¹ ãªççž®ã§ãã以åã¯æ°æ¥ããã£ãŠããäœæ¥ãæ°æéã§å®äºããããã«ãªããéçºãµã€ã¯ã«ãå€§å¹ ã«ççž®ãããçç£æ§ãåäžããŸããã ãã®å©ç¹ã¯ãã»ããã¢ããã®å¹çã ãã«ãšã©ãŸããŸãããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããèªã¿èŸŒã¿æéãççž®ãããéçºãšã¯ã¹ããªãšã³ã¹ãããã·ãŒã ã¬ã¹ã«ãªããŸããã ãåæããããã¡ã€ã«å ±æãš Docker Desktop ãžã®çµ±åã«ãããããŒã«ã«ã§ã®å¿çæéã 10 åã«æ¹åãããç¶æ³ãå€ãããŸããããš Witte æ°ã¯è¿°ã¹ãŠããŸãã
ããã«ããããã®ãã¯ãããžãŒãçµ±åããããšã§ãããæ©æã§å¿çæ§ã®é«ãéçºã¢ãããŒãã容æã«ãªããŸããã å¿ èŠã«å¿ããŠç°å¢ããã°ããã¹ãã³ã¢ãããŸãã¯ç Žæ£ã§ããæ©èœã«ãããhakuã¯ããèªç±ã«å®éšããè¿ éã«å埩ããããšãã§ããæè¡çãªä¿ææ§ãéèŠãªå·®å¥åèŠå ã§ããæ¥çã§æä»£ãå åãããããšãã§ããŸããã
hakuã®äºäŸã¯ãçãçµã£ãæè¡çä»å ¥ãçµç¹ã®æ¥åå¹çãšã€ãããŒã·ã§ã³èœåã«äžãã圱é¿ãäŸç€ºããŠããŸãã Dockerãæ¡çšããããšã§ãhakuã¯ç¹å®ã®èª²é¡ã«å¯ŸåŠãã瀟å ããã»ã¹ãæ¹åããŸããã 圌ãã¯ãèä¹ ã€ãã³ãç®¡çæ¥çã§ã®å°æ¥ã®æé·ãšæåã«åããŠèªããäœçœ®ã¥ããŸããã
ãã®åãçµã¿ã¯ãç¶ç¶çãªæè¡é²åãšãéçºããã»ã¹ã匷åããåžå Žæå ¥ãŸã§ã®æéãççž®ããæçµçã«ããžãã¹ã®æé·ãä¿é²ããããã®ããŒã«ã®æŠç¥çå®è£ ã®éèŠæ§ã匷調ããŠããŸãã Hakuã®çµéšã¯ããã¯ãããžãŒã掻çšããŠéçšäžã®èª²é¡ãå æããããžãã¹ç®æšãéæããçµç¹ã«ãšã£ãŠåºæ¿çãªéåçã§ãã
ãç§ãã¡ã®ãµã€ãºã®ã³ãŒãããŒã¹ã§ã¯ããã€ãã£ãã®ãã€ã³ãããŠã³ãã¯ãOSã®å¶éãDockerãå¶éããŠããŸãããããããã«ããããŠããŸããã§ããã圌ãã¯ç§ãã¡ã«ã¯é ãããŸãããåæããããã¡ã€ã«å ±æãšDocker Desktopãžã®çµ±åã«ãããããŒã«ã«ã§ã®å¿çæéã10åã«ççž®ãããŸããã
ã¹ãã£ãŒãã³ã»ãŠã£ãã
ã·ãã¢ãœãããŠã§ã¢ãšã³ãžãã¢ãhaku
ãDocker Desktop ã®åæãã¡ã€ã«å ±ææ©èœã¯ãç§ãã¡ã«ãšã£ãŠç°¡åãªããšã§ãããããã«ãããå°åéçºããšãŠãå¹ççã«ãªããŸããã
ã¹ãã£ãŒãã³ã»ãŠã£ãã
ã·ãã¢ãœãããŠã§ã¢ãšã³ãžãã¢ãhaku
ããã¡ããã§ããDocker ã®åœ±é¿ã¯ãéçºãããããã€ãŸã§å æ¬çã§ãäžè²«æ§ãšã¹ããŒãã確ä¿ããŠããŸããã
ã¹ãã£ãŒãã³ã»ãŠã£ãã
ã·ãã¢ãœãããŠã§ã¢ãšã³ãžãã¢ãhaku
ãDocker ã¯ãéçºããŒã ã®ãäŸåé¢ä¿å°çããè§£æ¶ããã¯ãŒã¯ãããŒãåçåããæ°ããéçºè ã®ã»ããã¢ããæéãå€§å¹ ã«ççž®ããŸãããã
ã¹ãã£ãŒãã³ã»ãŠã£ãã
ã·ãã¢ãœãããŠã§ã¢ãšã³ãžãã¢ãhaku
ãDocker ã®ãããã§ãéçºãšåºè·ãããè¿ éã«è¡ãããšãã§ããããã«ãªããŸããããŸããäžäœç°å¢ã§ã®ãã¹ããæ¬çªç°å¢ã§ãåãããã«åäœãããšããèªä¿¡ãæã€ããšãã§ããŸããã
ã¹ãã£ãŒãã³ã»ãŠã£ãã
ã·ãã¢ãœãããŠã§ã¢ãšã³ãžãã¢ãhaku
ãDocker Pro ãšã®æ°ããçµã¿èŸŒã¿ã®åæãã¡ã€ã«å ±æã«ãããå šäœçã«ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŸãããã
ã¢ãã ã»ãã
haku ãšã³ãžãã¢ãªã³ã°æ åœå¯ç€Ÿé·
ãDockerãžã®ç§»è¡ãç¹ã«éçºç°å¢ãžã®ç§»è¡ã«ãããæ°ããããŒã ã¡ã³ããŒã®ãªã³ããŒãã£ã³ã°ãå€§å¹ ã«è¿ éåãããã»ããã¢ããæéãæ°æ¥ããæ°æéã«ççž®ãããŸãããã
ã¢ãã ã»ãã
haku ãšã³ãžãã¢ãªã³ã°æ åœå¯ç€Ÿé·
ãç§ãã¡ã¯ãDocker ãéçºããŒã«ãšããŠã ãã§ãªããéçºãµã€ã¯ã«å šäœãå€§å¹ ã«åŒ·åããç©äºãããéããããä¿¡é Œæ§ã®é«ããã®ã«ãããã®ãšèããŠããŸããã
ã¢ãã ã»ãã
haku ãšã³ãžãã¢ãªã³ã°æ åœå¯ç€Ÿé·
ãDocker ã«ç§»è¡ããããšã§ãæè¡ã¹ã¿ãã¯ã®ã¢ããã°ã¬ãŒããå€§å¹ ã«è»œæžãããŸãããããã«ãããææ°ã®ãœãããŠã§ã¢ ããŒãžã§ã³ãç°¡åã«æ¡çšã§ããäŸåé¢ä¿ã®ç«¶åãæžããããšãã§ããŸããã
ããããã»ããµã
ã·ãã¢DevOpsãšã³ãžãã¢ãhaku
ãDocker ã®ãããã§ãæ¬çªç°å¢ãããŒã«ã«ã«ãã©ãŒãªã³ã°ã§ããããã«ãªã£ãããããããã€æã®é©ãããªããªããHakuã®ã客æ§ãžã®ãµãŒãã¹æäŸã匷åãããŸããã
ããããã»ããµã
ã·ãã¢DevOpsãšã³ãžãã¢ãhaku
èªåã«åã£ããµãã¹ã¯ãªãã·ã§ã³ãèŠã€ãã
ä»ããå°éå®¶ã«é£çµ¡ããŠãDockerãµãã¹ã¯ãªãã·ã§ã³ã®ã³ã©ãã¬ãŒã·ã§ã³ãã»ãã¥ãªãã£ããµããŒãã®å®ç§ãªãã©ã³ã¹ãèŠã€ããŠãã ããã