ã¢ãŒããã¯ãã£
ãã®ããŒãžã§ã¯ãDocker Sandboxesã®ä»çµã¿ãšãã®èšèšææ³ã«ã€ããŠè©³ãã解説ããŸãã
ãªããã€ã¯ãVMãªã®ãïŒ
AIã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã¯ãã€ã¡ãŒãžã®ãã«ããã³ã³ããã®å®è¡ãDocker Composeã®äœ¿çšãªã©ãé »ç¹ã«è¡ããŸãããšãŒãžã§ã³ãã«ãã¹ããã·ã³ã®DockerããŒã¢ã³ãžã®ã¢ã¯ã»ã¹ãèš±å¯ãããšããããšã¯ããšãŒãžã§ã³ããããªãã®ã³ã³ãããé²èЧããã€ã¡ãŒãžããã«ããã·ã¹ãã äžã§çŽæ¥ã¯ãŒã¯ããŒããå®è¡ã§ããããšãæå³ããŸããããã¯ãèªåŸçãªã³ãŒãå®è¡ã«äžããæš©éãšããŠã¯ããŸãã«åŒ·åãããŠå±éºã§ãã
ãšãŒãžã§ã³ããéåžžã®ã³ã³ããã§å®è¡ããŠãããã®åé¡ã¯è§£æ±ºããŸãããã³ã³ããã¯ãã¹ãã®ã«ãŒãã«ãå ±æããŠããïŒDocker Desktopã®å Žåã¯åãä»®æ³ãã·ã³ãå ±æããŠããïŒãããç¬èªã®DockerããŒã¢ã³ãå¿ èŠãšããããã»ã¹ãå®å šã«éé¢ããããšãã§ããŸãããDocker-in-DockerïŒDinDïŒã®ææ³ãããã¹ãã®ãœã±ãããããŠã³ãããç¹æš©ã¢ãŒãã§é颿§ãæãªãããããŒã¢ã³ãå ¥ãåã«ããè€éããæããã®ã©ã¡ããã§ãã
ãã€ã¯ãVMïŒmicroVMïŒã¯ãå¿ èŠãšãããæç¢ºãªéé¢å¢çãæäŸããŸããåãµã³ãããã¯ã¹ã«ã¯ãã©ã€ããŒãDockerããŒã¢ã³ãåããå°çšã®VMãå²ãåœãŠãããŸãããšãŒãžã§ã³ãã¯ãã¹ãã®Dockerç°å¢ã«äžåè§Šããããšãªããã€ã¡ãŒãžã®ãã«ãããã¹ãå®è¡ãå¯èœã§ãããµã³ãããã¯ã¹ãåé€ããã°ãå éšã®ã€ã¡ãŒãžãã³ã³ãããããã±ãŒãžãªã©ã¯ãã¹ãŠæ¶å»ãããŸãã
éé¢ã¢ãã«
ãµã³ãããã¯ã¹ããšã®ãã©ã€ããŒãDockerããŒã¢ã³
åãµã³ãããã¯ã¹ã¯ãVMå éšã§ç¬ç«ããå®å šãªDockerããŒã¢ã³ãå®è¡ããŸãããã®ããŒã¢ã³ã¯ãã¹ããä»ã®ãµã³ãããã¯ã¹ããå®å šã«éé¢ãããŠããŸãã
ãã¹ãã·ã¹ãã (Docker Desktop)
âââ ããªãã®ã³ã³ãããšã€ã¡ãŒãž
â
âââ ãµã³ãããã¯ã¹ VM 1
â âââ DockerããŒã¢ã³ (é颿žã¿)
â âââ ãšãŒãžã§ã³ãã»ã³ã³ãã
â âââ ãã®ä»ã®ã³ã³ãã (ãšãŒãžã§ã³ããäœæ)
â
âââ ãµã³ãããã¯ã¹ VM 2
âââ DockerããŒã¢ã³ (é颿žã¿)
âââ ãšãŒãžã§ã³ãã»ã³ã³ãããšãŒãžã§ã³ãã docker build ã docker compose up ãå®è¡ãããšããããã®ã³ãã³ãã¯ãµã³ãããã¯ã¹å
ã®ãã©ã€ããŒãããŒã¢ã³ã䜿çšããŠå®è¡ãããŸãããšãŒãžã§ã³ããèŠãããšãã§ããã®ã¯èªèº«ãäœæããã³ã³ããã®ã¿ã§ããããã¹ãåŽã®ã³ã³ãããã€ã¡ãŒãžãããªã¥ãŒã ã«ã¢ã¯ã»ã¹ããããšã¯ã§ããŸããã
ãã®ã¢ãŒããã¯ãã£ã¯ããèªåŸåãšãŒãžã§ã³ãã«ã¯ãã«æ©èœã®Dockerãå¿ èŠã ãããã¹ãã®DockerããŒã¢ã³ãå®å šã«å ±æããããšã¯ã§ããªãããšããæ ¹æ¬çãªå¶çŽã解決ããŸãã
ãã€ããŒãã€ã¶ãŒã¬ãã«ã®éé¢
ãµã³ãããã¯ã¹ã¯ãã·ã¹ãã ã®ãã€ãã£ããªä»®æ³åæè¡ãå©çšããŸãïŒ
-
macOS: virtualization.framework
-
Windows: Hyper-V
ããã«ããããµã³ãããã¯ã¹ãšãã¹ãã®éã«ãã€ããŒãã€ã¶ãŒã¬ãã«ã®éé¢ãæäŸãããŸãããã¹ãã®ã«ãŒãã«ãå ±æããã³ã³ãããšã¯ç°ãªããVMã¯åå¥ã®ã«ãŒãã«ãæã¡ãå®çŸ©ãããå¢çãè¶ããŠãã¹ãã®ãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããããšã¯ã§ããŸããã
ã»ãã¥ãªãã£äžã®å©ç¹
VMã®å¢çã«ãã£ãŠä»¥äžã®éé¢ãå®çŸãããŸãïŒ
-
ããã»ã¹éé¢: ãšãŒãžã§ã³ãã®ããã»ã¹ã¯ç¬ç«ããã«ãŒãã«äžã§åäœããŸãã
-
ãã¡ã€ã«ã·ã¹ãã éé¢: ããŠã³ããããã¯ãŒã¯ã¹ããŒã¹ã®ã¿ãã¢ã¯ã»ã¹å¯èœã§ãã
-
ãããã¯ãŒã¯éé¢: ãµã³ãããã¯ã¹éã§ã®éä¿¡ã¯ã§ããŸããã
-
Dockeréé¢: ãã¹ãã®ããŒã¢ã³ãã³ã³ãããã€ã¡ãŒãžãžã®ã¢ã¯ã»ã¹æš©ã¯ãããŸããã
ãããã¯ãŒã¯ãã£ã«ã¿ãªã³ã°ã«ãããHTTP/HTTPSãã©ãã£ãã¯ã«å¯Ÿãã远å ã®å¶åŸ¡ã¬ã€ã€ãŒãå ãããŸãã詳现ã¯ãããã¯ãŒã¯ããªã·ãŒãåç §ããŠãã ããã
ã¯ãŒã¯ã¹ããŒã¹ã®åæ
åæ¹åãã¡ã€ã«åæ
ã¯ãŒã¯ã¹ããŒã¹ã¯ããã¹ããšåã絶察ãã¹ã§ãµã³ãããã¯ã¹ã«åæãããŸãïŒ
-
ãã¹ã:
/Users/alice/projects/myapp -
ãµã³ãããã¯ã¹:
/Users/alice/projects/myapp
倿Žã¯åæ¹åã«åæãããŸãããã¹ãã§ãã¡ã€ã«ãç·šéããã°ãšãŒãžã§ã³ãã«åæ ããããšãŒãžã§ã³ãããã¡ã€ã«ãä¿®æ£ããã°ãã¹ãåŽã«ãåæ ãããŸãã
ããã¯ããªã¥ãŒã ããŠã³ãã§ã¯ãªãããã¡ã€ã«åæãã§ãããã¡ã€ã«ã¯ãã¹ããšVMã®éã§ã³ããŒãããŸãããã®ææ³ã«ãããç°ãªããã¡ã€ã«ã·ã¹ãã éã§ãåäœãããã©ãããã©ãŒã ã®éãã«é¢ãããäžè²«ãããã¹ãç¶æã§ããŸãã
ãã¹ã®ä¿æ
絶察ãã¹ãä¿æãããããšã«ã¯ä»¥äžã®ã¡ãªããããããŸãïŒ
-
ãšã©ãŒã¡ãã»ãŒãžå ã®ãã¡ã€ã«ãã¹ãããã¹ããšãµã³ãããã¯ã¹ã§äžèŽããã
-
èšå®ãã¡ã€ã«å ã®ããŒãã³ãŒãããããã¹ãæ£ããæ©èœããã
-
ãã«ãã®åºåãããã¹ãäžã§ãèŠã€ãããããã¹ãåç §ããã
ãšãŒãžã§ã³ãã¯ããªãããã€ããªã§èŠãŠããã®ãšåããã£ã¬ã¯ããªæ§é ãèŠãããããããã°ã倿Žå 容ã®ç¢ºèªæã®æ··ä¹±ã軜æžãããŸãã
ã¹ãã¬ãŒãžãšæ°žç¶æ§
ä¿æããããã®
ãµã³ãããã¯ã¹ãäœæãããšãåé€ãããŸã§ä»¥äžãä¿æãããŸãïŒ
-
Dockerã€ã¡ãŒãžãšã³ã³ãã: ãšãŒãžã§ã³ãããã«ããŸãã¯ãã«ãããã®ã
-
ã€ã³ã¹ããŒã«ãããããã±ãŒãž: aptãyumãªã©ã§è¿œå ãããã·ã¹ãã ããã±ãŒãžã
-
ãšãŒãžã§ã³ãã®ç¶æ : èªèšŒæ å ±ãèšå®ãå±¥æŽã
-
ã¯ãŒã¯ã¹ããŒã¹ã®å€æŽ: äœæã»å€æŽããããã¡ã€ã«ã¯ãã¹ãã«åæãããŸãã
äžæçãªãã®ïŒãšãã§ã¡ã©ã«ïŒ
ãµã³ãããã¯ã¹ã¯è»œéã§ãããã¹ããŒãã¬ã¹ïŒç¶æ ãæããªãïŒã§ã¯ãããŸãããå®è¡ã®åéãç¶æ ã¯ç¶æãããŸãããä»ã®ãµã³ãããã¯ã¹ããã¯éé¢ãããŠããŸããåãµã³ãããã¯ã¹ã¯ä»¥äžã®ç¬èªã®ããŒã¿ãä¿æããŸãïŒ
-
DockerããŒã¢ã³ã®ç¶æ
-
ã€ã¡ãŒãžãã£ãã·ã¥
-
ããã±ãŒãžã®ã€ã³ã¹ããŒã«ç¶æ
docker sandbox rm ã§ãµã³ãããã¯ã¹ãåé€ãããšãVMå
šäœãšãã®å
容ããã¹ãŠåé€ãããŸãããµã³ãããã¯ã¹å
ã§ãã«ãããã€ã¡ãŒãžãã€ã³ã¹ããŒã«ããããã±ãŒãžãã¯ãŒã¯ã¹ããŒã¹ã«åæãããŠããªãç¶æ
ã¯ãã¹ãŠæ¶å€±ããŸãã
ãã£ã¹ã¯äœ¿çšé
åãµã³ãããã¯ã¹ã¯ä»¥äžã®ããã«ãã£ã¹ã¯å®¹éãæ¶è²»ããŸãïŒ
-
VMã®ãã£ã¹ã¯ã€ã¡ãŒãžïŒã€ã¡ãŒãžã®ãã«ããããã±ãŒãžã®è¿œå ã«äŒŽãå¢å ïŒ
-
å éšã§ãã«ãŸãã¯ãã«ããããDockerã€ã¡ãŒãž
-
ã³ã³ããã¬ã€ã€ãŒãšããªã¥ãŒã
è€æ°ã®ãµã³ãããã¯ã¹éã§ã€ã¡ãŒãžãã¬ã€ã€ãŒãå ±æãããããšã¯ãããŸããããããããç¬ç«ããDockerããŒã¢ã³ãšã¹ãã¬ãŒãžãæã¡ãŸãã
ãããã¯ãŒã¯
ã€ã³ã¿ãŒãããã¢ã¯ã»ã¹
ãµã³ãããã¯ã¹ã¯ããã¹ãã®ãããã¯ãŒã¯æ¥ç¶ãä»ããŠå€éšãžã®ã€ã³ã¿ãŒãããã¢ã¯ã»ã¹ãå¯èœã§ãããšãŒãžã§ã³ãã¯ããã±ãŒãžã®ã€ã³ã¹ããŒã«ãã€ã¡ãŒãžã®ãã«ãAPIãžã®ã¢ã¯ã»ã¹ãã§ããŸãã
ãã¹ãäžã§ã¯HTTP/HTTPSãã£ã«ã¿ãªã³ã°ãããã·ãåäœããŠãããhost.docker.internal:3128 ã§å©çšå¯èœã§ãããšãŒãžã§ã³ãã¯å€éšãžã®Webãªã¯ãšã¹ãã«ãã®ãããã·ãèªåçã«äœ¿çšããŸããèš±å¯ããéä¿¡å
ãå¶åŸ¡ããããã«ãããã¯ãŒã¯ããªã·ãŒãèšå®ã§ããŸãã
èªèšŒæ å ±ã®ã€ã³ãžã§ã¯ã·ã§ã³
HTTP/HTTPSãããã·ã¯ããµããŒããããŠãããããã€ããŒïŒOpenAI, Anthropic, Google, GitHubãªã©ïŒã«å¯ŸããAPIãªã¯ãšã¹ãã«ãèªèšŒæ
å ±ãèªåçã«æ³šå
¥ïŒã€ã³ãžã§ã¯ã·ã§ã³ïŒããŸãããã¹ãåŽã§ OPENAI_API_KEY ã ANTHROPIC_API_KEY ãªã©ã®ç°å¢å€æ°ãèšå®ããŠãããšããããã·ãå€éšãžã®ãªã¯ãšã¹ããã€ã³ã¿ãŒã»ããããé©åãªèªèšŒããããŒãä»å ããŸãã
ãã®ä»çµã¿ã«ãããèªèšŒæ å ±ã¯ãã¹ãã·ã¹ãã ã«çãŸãããµã³ãããã¯ã¹VMå ã«ä¿åãããããšã¯ãããŸããããšãŒãžã§ã³ãã¯èªèšŒæ å ±ãªãã§APIãªã¯ãšã¹ããè¡ãããããã·ããããééçã«è£å®ããŸãããµã³ãããã¯ã¹ãåé€ããŠããå éšã«èªèšŒæ å ±ãæ®ãããšã¯ãããŸããã
ãµã³ãããã¯ã¹éã®éé¢
ãµã³ãããã¯ã¹å士ãéä¿¡ããããšã¯ã§ããŸãããåVMã¯ç¬èªã®ãã©ã€ããŒããªãããã¯ãŒã¯åå空éãæã£ãŠããŸãããããµã³ãããã¯ã¹å ã®ãšãŒãžã§ã³ãããå¥ã®ãµã³ãããã¯ã¹å ã®ãµãŒãã¹ãã³ã³ããã«ã¢ã¯ã»ã¹ããããšã¯ã§ããŸããã
ãŸãããµã³ãããã¯ã¹ã¯ãã¹ãã® localhost ãµãŒãã¹ã«ãã¢ã¯ã»ã¹ã§ããŸãããVMã®å¢çã«ããããã¹ããã·ã³äžã§åäœããŠãããµãŒãã¹ãžã®çŽæ¥ã¢ã¯ã»ã¹ã¯é®æãããŸãã
ã©ã€ããµã€ã¯ã«
äœæãšå®è¡
docker sandbox run ã¯ãæå®ããããšãŒãžã§ã³ãçšã®ã¯ãŒã¯ã¹ããŒã¹ãæã€VMãåæåããæ¢åã®ãµã³ãããã¯ã¹å
ã§ãšãŒãžã§ã³ããèµ·åããŸããVMãåäœæããããšãªããšãŒãžã§ã³ãã忢ã»åèµ·åã§ãããããã€ã³ã¹ããŒã«ããããã±ãŒãžãDockerã€ã¡ãŒãžãä¿æã§ããŸãã
docker sandbox create ã¯VMã®åæåã®ã¿ãè¡ãããšãŒãžã§ã³ãã¯èªåèµ·åããŸãããããã«ãããç°å¢ã®ã»ããã¢ãããšãšãŒãžã§ã³ãã®å®è¡ãåãé¢ãããšãã§ããŸãã
ç¶æ 管ç
ãµã³ãããã¯ã¹ã¯æç€ºçã«åé€ãããŸã§åç¶ããŸãããšãŒãžã§ã³ãã忢ããŠãVMã¯åé€ãããŸãããã€ãŸãïŒ
-
ã€ã³ã¹ããŒã«æžã¿ã®ããã±ãŒãžã¯åŒãç¶ãå©çšå¯èœã
-
ãã«ãæžã¿ã®ã€ã¡ãŒãžã¯ãã£ãã·ã¥ããããŸãŸã
-
ç°å¢èšå®ã¯å®è¡éã§ä¿æãããã
ãã£ã¹ã¯å®¹éãè§£æŸããã«ã¯ãdocker sandbox rm ã䜿çšããŠãµã³ãããã¯ã¹ãåé€ããŠãã ããã
ä»ã®ææ³ãšã®æ¯èŒ
ãµã³ãããã¯ã¹ãšä»ã®ã¢ãããŒãã®äœ¿ãåãã¯ä»¥äžã®éãã§ãïŒ
| ææ³ | éé¢ã¬ãã« | ãšãŒãžã§ã³ãã®Dockerã¢ã¯ã»ã¹ | ãã¹ããžã®åœ±é¿ | äž»ãªçšé |
|---|---|---|---|---|
| Sandboxes (microVMs) | ãã€ããŒãã€ã¶ãŒã¬ãã« | ãã©ã€ããŒãããŒã¢ã³ | ãªã - å®å šéé¢ | ã³ã³ããããã«ã/å®è¡ããèªåŸåãšãŒãžã§ã³ã |
| ãœã±ããããŠã³ããããã³ã³ãã | ã«ãŒãã«åå空é | ãã¹ãããŒã¢ã³ (å ±æ) | ãã¹ãã®å šã³ã³ãããèŠãã | Docker CLIãå¿ èŠãšããä¿¡é Œã§ããããŒã« |
| Docker-in-Docker (DinD) | å ¥ãåã³ã³ãã | ãã©ã€ããŒãããŒã¢ã³ (è€é) | äžçšåºŠ - ç¹æš©ã¢ãŒããå¿ èŠ | CI/CDç°å¢ |
| ãã¹ãã§ã®çŽæ¥å®è¡ | ãªã | ãã¹ãããŒã¢ã³ | å šãŠ - ã·ã¹ãã ãžçŽæ¥ã¢ã¯ã»ã¹ | ä¿¡é Œã§ãã人éã«ããæåéçº |
ãµã³ãããã¯ã¹ã¯ããªãœãŒã¹ã®ãªãŒããŒãããïŒVM + ããŒã¢ã³ïŒãšåŒãæãã«ãå®å šãªéé¢ãæäŸããŸããDockerã¢ã¯ã»ã¹ãå¿ èŠãšããªã軜éãªããã±ãŒãžã³ã°ã«ã¯éåžžã®ã³ã³ãããããã¹ãç°å¢ãå±éºã«ããããã«èªåŸåãšãŒãžã§ã³ãã«ãã«æ©èœã®Dockerã䜿ããããå Žåã«ã¯ãµã³ãããã¯ã¹ãéžæããŠãã ããã