Note
ãã®ããŒãžã«ã¢ã¯ã»ã¹ããã«ã¯ãæ¿èªãå¿ èŠã§ãã ãµã€ã³ã€ã³ãŸãã¯ãã£ã¬ã¯ããªã®å€æŽã詊ãããšãã§ããŸãã
ãã®ããŒãžã«ã¢ã¯ã»ã¹ããã«ã¯ãæ¿èªãå¿ èŠã§ãã ãã£ã¬ã¯ããªã®å€æŽã詊ãããšãã§ããŸãã
ãã³ã
ãã®ã³ã³ãã³ã㯠eBook ã®ãã³ã³ãããŒåããã .NET ã¢ããªã±ãŒã·ã§ã³ã® .NET ãã€ã¯ããµãŒãã¹ ã¢ãŒããã¯ãã£ãããã®æç²ã§ãã.NET Docs ã§é²èЧã§ããã»ããPDF ãšããŠç¡æããŠã³ããŒããããšããªã³ã©ã€ã³ã§é²èЧã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³éçºã®ã©ã€ã ãµã€ã¯ã«ã¯ãéçºè ã®ã³ã³ãã¥ãŒã¿ãŒããå§ãŸããŸããããã§ãéçºè ã®å¥œã¿ã®èšèªã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãã³ãŒãã£ã³ã°ããããŒã«ã«ã§ãã¹ãããŸãã ãã®ã¯ãŒã¯ãããŒã§ã¯ãéžæããèšèªããã¬ãŒã ã¯ãŒã¯ããã³ãã©ãããã©ãŒã ã«ããããããåžžã« Docker ã³ã³ãããŒãããŒã«ã«ã§éçºããã³ãã¹ãããŸãã
åã³ã³ãã㌠(Docker ã€ã¡ãŒãžã®ã€ã³ã¹ã¿ã³ã¹) ã«ã¯ã次ã®ã³ã³ããŒãã³ããå«ãŸããŠããŸãã
- éžæãããªãã¬ãŒãã£ã³ã° ã·ã¹ãã (Linux ãã£ã¹ããªãã¥ãŒã·ã§ã³ãWindows Nano ServerãWindows Server Core ãªã©)ã
- éçºæã«è¿œå ãããã¡ã€ã« (ãœãŒã¹ ã³ãŒãããã³ã¢ããªã±ãŒã·ã§ã³ ãã€ããªãªã©)ã
- æ§ææ å ± (ç°å¢ã®èšå®ããã³äŸåé¢ä¿ãªã©)ã
Docker ã®ã³ã³ãã㌠ããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ãéçºããããã®ã¯ãŒã¯ãããŒ
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãDocker ã®ã³ã³ãã㌠ããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ã®å åŽã®ã«ãŒãã®éçºã¯ãŒã¯ãããŒã«ã€ããŠèª¬æããŸãã å åŽã®ã«ãŒãã®ã¯ãŒã¯ãããŒã¯ãéçšãžã®å±éãŸã§å«ããããšãã§ãã DevOps ã®ããåºç¯ãªã¯ãŒã¯ãããŒãèæ ®ããŠããªããšããããšã§ã¯ãªããéçºè ã®ã³ã³ãã¥ãŒã¿ãŒäžã§å®è¡ãããéçºäœæ¥ã®ã¿ã«éç¹ã眮ãããŠããŸãã ç°å¢ãèšå®ããåææé ã¯ãäžåºŠã®ã¿å®è¡ããããã®ãªã®ã§å«ãŸããŠããŸããã
ã¢ããªã±ãŒã·ã§ã³ã¯ãèªåã®ãµãŒãã¹ãšè¿œå ã®ã©ã€ãã©ãª (äŸåé¢ä¿) ã§æ§æãããŸãã Docker ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ãããšãã®åºæ¬æé ãæ¬¡ã®å³ 5-1 ã«ç€ºããŸãã
Docker ã¢ããªã®éçºããã»ã¹:1 - ã¢ããªãã³ãŒãã£ã³ã°ããã2- Dockerfile ãæžã蟌ãã3 - Dockerfile ã§å®çŸ©ãããŠããã€ã¡ãŒãžãäœæããã4 - (çç¥å¯èœ) docker-compose.yml ãã¡ã€ã«ã«ãµãŒãã¹ãäœæããã5 - ã³ã³ãããŒãŸã㯠docker-compose ã¢ããªãå®è¡ããã6 - ã¢ããªãŸãã¯ãã€ã¯ããµãŒãã¹ããã¹ãããã7 - ãªããžããªã«ããã·ã¥ããŠç¹°ãè¿ãã
å³ 5-1. Docker ã®ã³ã³ãããŒåãããã¢ããªã±ãŒã·ã§ã³ãéçºããããã®è©³çްãªã¯ãŒã¯ãããŒ
ãã®ã»ã¯ã·ã§ã³ã§ã¯ããã®ããã»ã¹å šäœã«ã€ããŠè©³çްã«èšèŒãããŠãããäž»èŠãªåæé ã¯ãVisual Studio ç°å¢ã«éç¹ã眮ããŠèª¬æãããŠããŸãã
ãšãã£ã¿ãŒ/CLI éçºã¢ãããŒã (Visual Studio Code ãš macOS ãŸã㯠Windows äžã® Docker CLI ãªã©) ã䜿çšããå ŽåãVisual Studio ã䜿çšããå Žåããããéåžžã¯ãã詳现ã«ãã¹ãŠã®æé ãææ¡ããŠããå¿ èŠããããŸãã CLI ç°å¢ã§ã®äœæ¥ã®è©³çްã«ã€ããŠã¯ãé»åæžç±ãContainerized Docker Application lifecycle with Microsoft Platforms and Toolsã (Microsoft ã®ãã©ãããã©ãŒã ããã³ããŒã«ãšã³ã³ãããŒåããã Docker ã¢ããªã±ãŒã·ã§ã³ã®ã©ã€ããµã€ã¯ã«) ãåç §ããŠãã ããã
Visual Studio 2022 以éã䜿çšããŠããå Žåã¯ããããã®æé ã®å€ããèªåçã«åŠçããããããçç£æ§ã倧å¹
ã«åäžããŸãã ããã¯ããã«ãã³ã³ãã㌠ã¢ããªã±ãŒã·ã§ã³ã察象ãšããŠããå Žåã«ç¹ã«åœãŠã¯ãŸããŸãã ããšãã°ãããŠã¹ã 1 åã¯ãªãã¯ããã ãã§ãVisual Studio ã«ãã£ãŠãã¢ããªã±ãŒã·ã§ã³ã«é©ããæ§æã® Dockerfile ãš docker-compose.yml ãã¡ã€ã«ããããžã§ã¯ãã«è¿œå ãããŸãã ãã®ã¢ããªã±ãŒã·ã§ã³ã Visual Studio ã§å®è¡ãããšãDocker ã€ã¡ãŒãžãæ§ç¯ãããDocker ã§çŽæ¥ãã«ãã³ã³ãã㌠ã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããŸãããŸããäžåºŠã«è€æ°ã®ã³ã³ãããŒããããã°ããããšãã§ããŸãã ãããã®æ©èœã«ãããéçºã®é床ãåäžããŸãã
ããããVisual Studio ã«ãã£ãŠããããã®æé ãèªååããããããšãã£ãŠãDocker ã®èåŸã§äœãèµ·ãã£ãŠããã®ãç¥ããªããŠããããšããããã§ã¯ãããŸããã ãããã£ãŠã次ã®ã¬ã€ãã³ã¹ã§ã¯ãã¹ãŠã®æé ã«ã€ããŠè©³ãã説æããŸãã
æé 1. ã³ãŒãã£ã³ã°ãéå§ããŠãåæã¢ããªã±ãŒã·ã§ã³ãŸãã¯ãµãŒãã¹ ããŒã¹ã©ã€ã³ãäœæããŸãã
Docker ã¢ããªã±ãŒã·ã§ã³ã®éçºæ¹æ³ã¯ãDocker ã䜿çšããªãã¢ããªã±ãŒã·ã§ã³ã®éçºæ¹æ³ãšäŒŒãŠããŸãã éãã¯ãDocker çšã®éçºäžã«ãããŒã«ã«ç°å¢ã«ãã㊠Docker ã³ã³ãããŒå ã§å®è¡ããã¢ããªã±ãŒã·ã§ã³ãŸãã¯ãµãŒãã¹ãå±éããã³ãã¹ããããšããããšã§ã (Docker ã«ãã Linux VM ã®ã»ããã¢ããããŸã㯠Windows ã³ã³ãããŒã䜿çšããå Žåã¯çŽæ¥ Windows ã§)ã
Visual Studio ã§ã®ããŒã«ã«ç°å¢ã®ã»ããã¢ãã
æåã«ãæ¬¡ã®æé ã§èª¬æãããWindows çšã® Docker Desktop for Windows ãã€ã³ã¹ããŒã«ãããŠããããšã確èªããŸãã
Docker Desktop for Windows ã䜿ãå§ãã
ããã«ãå³ 5-2 ã«ç€ºãããã«ãASP.NET ããã³ Web éçºã¯ãŒã¯ããŒããã€ã³ã¹ããŒã«ããã Visual Studio 2022 以éãå¿ èŠã§ãã
å³ 5-2 Visual Studio 2022 ã®ã»ããã¢ããæã® ASP.NET ããã³ Web éçºã¯ãŒã¯ããŒãã®éžæ
åçŽãª .NET ã§ã®ã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒãã£ã³ã°ã¯ãã¢ããªã±ãŒã·ã§ã³ã§ Docker ãæå¹ã«ããDocker ã§å±éããŠãã¹ãããåããã§ããå§ããããšãã§ããŸã (ã³ã³ãããŒã䜿çšããèšç»ãããå Žåãé垞㯠.NET Core 以éã§)ã ãã ããå®éã®ç°å¢ãšãªãããšã«å ããåé¡ãæ©ãæ€åºããããããã§ããã ãæ©ã Docker ã§äœæ¥ãéå§ããããšããå§ãããŸãã Docker ã¯ãVisual Studio ã§ã¯ãã»ãšãã©ééçã§ã䜿çšãããããªã£ãŠããããããã®ããã«ããããšãæšå¥šãããŸãããã®æè¯ã®äŸã¯ãVisual Studio ããã®ãã«ãã³ã³ãã㌠ã¢ããªã±ãŒã·ã§ã³ã®ãããã°ã§ãã
远å ã®ãªãœãŒã¹
Windows åã Docker Desktop ã䜿ãå§ãã
https://docs.docker.com/docker-for-windows/Visual Studio
https://visualstudio.microsoft.com/downloads/
æé 2. æ¢åã® .NET åºæ¬ã€ã¡ãŒãžã«é¢é£ãã Dockerfile ãäœæããŸãã
Dockerfile ã¯ãæ§ç¯ããã«ã¹ã¿ã ã€ã¡ãŒãžããšã«å¿ èŠã§ãããŸããVisual Studio ããèªåçã«å±éããå ŽåããDocker CLI (docker run ããã³ docker-compose ã³ãã³ã) ã䜿çšããŠæåã§å±éããå Žåããå±éããã³ã³ãããŒããšã« Dockerfile ãå¿ èŠã§ãã ã¢ããªã±ãŒã·ã§ã³ã«ã«ã¹ã¿ã ãµãŒãã¹ã 1 ã€å«ãŸããŠããå ŽåãDockerfile ã 1 ã€å¿ èŠã§ãã (ãã€ã¯ããµãŒãã¹ ã¢ãŒããã¯ãã£ã®å Žåã®ããã«) ã¢ããªã±ãŒã·ã§ã³ã«è€æ°ã®ãµãŒãã¹ãå«ãŸããå ŽåããµãŒãã¹ããšã« Dockerfile ã 1 ã€å¿ èŠã§ãã
Dockerfile ã¯ãã¢ããªã±ãŒã·ã§ã³ãŸãã¯ãµãŒãã¹ã®ã«ãŒã ãã©ã«ããŒã«ãããŸãã ããã«ã¯ãã³ã³ãããŒã§ã¢ããªã±ãŒã·ã§ã³ãŸãã¯ãµãŒãã¹ãèšå®ããŠå®è¡ããæ¹æ³ã Docker ã«æç€ºããã³ãã³ããå«ãŸããŠããŸãã æåã§ã³ãŒãã« Dockerfile ãäœæãã.NET ã®äŸåé¢ä¿ãšå ±ã«ãããžã§ã¯ãã«è¿œå ã§ããŸãã
Visual Studio ãš Docker çšã®ããŒã«ã§ã¯ããã®ã¿ã¹ã¯ã¯ããŠã¹ãäœåºŠãã¯ãªãã¯ããã®ã¿ã§å®è¡ã§ããŸãã Visual Studio ã§æ°ãããããžã§ã¯ããäœæããå Žåãå³ 5-3 ã«ç€ºãããã«ã Docker ãµããŒããæå¹ã«ãããšããååã®ãªãã·ã§ã³ããããŸãã
å³ 5-3 Visual Studio 2022 ã§æ°ãã ASP.NET Core ãããžã§ã¯ããäœæãããšãã® Docker ãµããŒãã®æå¹å
ãŸããå³ 5-4 ã«ç€ºãããã«ããœãªã¥ãŒã·ã§ã³ ãšã¯ã¹ãããŒã©ãŒã§ãããžã§ã¯ããå³ã¯ãªãã¯ãã [远å ]>[Docker ãµããŒã...] ãéžæããããšã§ãæ¢åã® ASP.NET Core Web ã¢ã㪠ãããžã§ã¯ãã«å¯Ÿã㊠Docker ãµããŒããæå¹ã«ããããšãã§ããŸãã
å³ 5-4 æ¢åã® Visual Studio 2022 ãããžã§ã¯ãã§ã® Docker ãµããŒãã®æå¹å
ãã®æäœã§ãå¿ èŠãªæ§æã®ãããžã§ã¯ãã« Dockerfile ã远å ãããASP.NET Core ãããžã§ã¯ãã§ã®ã¿äœ¿çšã§ããããã«ãªããŸãã
åæ§ã«ãVisual Studio ã§ã¯ãAdd > Container Orchestrator Support... ãªãã·ã§ã³ã䜿çšããŠããœãªã¥ãŒã·ã§ã³å
šäœã«å¯Ÿãã docker-compose.yml ãã¡ã€ã«ã远å ããããšãã§ããŸããæé 4 ã§ã¯ããã®ãªãã·ã§ã³ã«ã€ããŠããã«è©³ããèŠãŠãããŸãã
æ¢åã®å ¬åŒã® .NET Docker ã€ã¡ãŒãžã®äœ¿çš
éåžžãDocker Hub ã¬ãžã¹ããªãªã©ã®å
¬åŒã®ãªããžããªããååŸããåºæ¬ã€ã¡ãŒãžäžã«ãã³ã³ãããŒã®ã«ã¹ã¿ã ã€ã¡ãŒãžããã«ãããŸãã Visual Studio ã§ Docker ã®ãµããŒããæå¹ã«ããå ŽåãèåŸã§ã¯ããããŸãã«çºçããŸãã Dockerfile ã§ã¯ãæ¢åã® dotnet/core/aspnet ã€ã¡ãŒãžã䜿çšããŸãã
éžæãã OS ãšãã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠã䜿çšã§ãã Docker ã€ã¡ãŒãžãšãªããžããªã«ã€ããŠã¯ãæ¢ã«èª¬æããŠããŸãã ããšãã°ãASP.NET Core (Linux ãŸã㯠Windows) ã䜿çšãããå Žåã¯ãmcr.microsoft.com/dotnet/aspnet:8.0 ã®ã€ã¡ãŒãžã䜿çšããŸãã ãã®å Žåã¯ãã³ã³ãããŒã«äœ¿çšããåºæ¬ã® Docker ã€ã¡ãŒãžã®ã¿ãæå®ããå¿
èŠããããŸãã ããã¯ãFROM mcr.microsoft.com/dotnet/aspnet:8.0 ã Dockerfile ã«è¿œå ããããšã§è¡ããŸãã ãã㯠Visual Studio ã«ãã£ãŠèªåçã«å®è¡ãããŸãããããŒãžã§ã³ãæŽæ°ããå Žåã¯ããã®å€ãæŽæ°ããå¿
èŠããããŸãã
ããŒãžã§ã³çªå·ã䜿çšã㊠Docker Hub ã®å ¬åŒã® .NET ã€ã¡ãŒãž ãªããžããªã䜿ããšãåãèšèªæ©èœã (éçºããã¹ããããã³å®çšŒåç°å¢ãªã©ã®) ãã¹ãŠã®ã³ã³ãã¥ãŒã¿ãŒã§äœ¿çšã§ããããã«ãªããŸãã
次ã®äŸã§ã¯ãASP.NET Core ã³ã³ãããŒçšã®ãµã³ãã«ã® Dockerfile ã瀺ããŠããŸãã
FROM mcr.microsoft.com/dotnet/aspnet:8.0
ARG source
WORKDIR /app
EXPOSE 80
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", " MySingleContainerWebApp.dll "]
ãã®å Žåãã€ã¡ãŒãžã¯ãå
¬åŒã® ASP.NET Core Docker ã€ã¡ãŒãž (Linux ããã³ Windows çšãã«ãã¢ãŒããã¯ãã£) ã®ããŒãžã§ã³ 8.0 ã«åºã¥ããŠããŸãã ãã®èšå®ã¯ãFROM mcr.microsoft.com/dotnet/aspnet:8.0 ã§ãã (ãã®ããŒã¹ ã€ã¡ãŒãžã®è©³çްã«ã€ããŠã¯ãASP.NET Core Docker ã€ã¡ãŒãžã®ããŒãžãåç
§ããŠãã ããã) Dockerfile ã§ã¯ãå®è¡æã«äœ¿çšãã TCP ããŒãã§åŸ
ã¡åãããã Docker ã«æç€ºããå¿
èŠããããŸã (ãã®å Žåã¯ãEXPOSE èšå®ã§æå®ããããŒã 80)ã
䜿çšããŠããèšèªãšãã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠã¯ãDockerfile ã«å¥ã®æ§æèšå®ãæå®ã§ããŸãã ããšãã°ã["dotnet", "MySingleContainerWebApp.dll"] ã® ENTRYPOINT è¡ã§ã¯ã.NET ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããã« Docker ã«æç€ºããŸãã SDK ãš .NET CLI (dotnet CLI) ã䜿çšããŠã.NET ã¢ããªã±ãŒã·ã§ã³ããã«ãããã³å®è¡ããŠããå Žåããã®èšå®ã¯ç°ãªããŸãã ã€ãŸããã¢ããªã±ãŒã·ã§ã³ã«éžæããèšèªãšãã©ãããã©ãŒã ã«ãããENTRYPOINT è¡ãšãã®ä»ã®èšå®ã¯å¥ã«ãªããŸãã
远å ã®ãªãœãŒã¹
ASP.NET Core ã¢ããªã±ãŒã·ã§ã³ã® Docker ã€ã¡ãŒãžã®ãã«ã
https://learn.microsoft.com/dotnet/core/docker/building-net-docker-imagesã³ã³ãã ã€ã¡ãŒãžãæ§ç¯ããã Docker ã®å ¬åŒãªããã¥ã¡ã³ãå ã«ãããŸãã
https://docs.docker.com/get-started/docker-concepts/building-images/.NET ã³ã³ãã㌠ã€ã¡ãŒãžãææ°ã®ç¶æ ã«ä¿ã€
https://devblogs.microsoft.com/dotnet/staying-up-to-date-with-net-container-images/.NET ãš Docker ãçµã¿åãããŠäœ¿çšãã - DockerCon 2018 ã®æŽæ°
https://devblogs.microsoft.com/dotnet/using-net-and-docker-together-dockercon-2018-update/
ãã«ãã¢ãŒããã¯ã㣠ã€ã¡ãŒãž ãªããžããªã®äœ¿çš
åäžã®ãªããžããªã«ã¯ãLinux ã€ã¡ãŒãžã Windows ã€ã¡ãŒãžãªã©ã®ãã©ãããã©ãŒã ããªã¢ã³ããå«ããããšãã§ããŸãã ãã®æ©èœã§ã¯ãMicrosoft (åºæ¬ã€ã¡ãŒãžã®äœæè ) ãªã©ã®ãã³ããŒããè€æ°ã®ãã©ãããã©ãŒã (ã€ãŸããLinux ããã³ Windows) ã«å¯Ÿå¿ã§ãããªããžããªã 1 ã€äœæã§ããŸãã ããšãã°ãDocker Hub ã¬ãžã¹ããªã«ãã .NET ãªããžããªã§ã¯ãåããªããžããªåã䜿çšã㊠Linux ãš Windows Nano Server ããµããŒããããŠããŸãã
ã¿ã°ãæå®ããå Žåãæ¬¡ã®å Žåã®ããã«ãæç€ºçã«ãã©ãããã©ãŒã ãæå®ã§ããŸãã
mcr.microsoft.com/dotnet/aspnet:8.0-bullseye-slim
ã¿ãŒã²ãã: Linux ã§ã® .NET 8 ã©ã³ã¿ã€ã ã®ã¿mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-ltsc2022
ã¿ãŒã²ãã: Windows Nano Server ã§ã® .NET 8 ã©ã³ã¿ã€ã ã®ã¿
ããããåãã€ã¡ãŒãžåãæå®ããå Žåãã¿ã°ãåãã§ããæ¬¡ã®äŸã«ç€ºãããã«ããã«ãã¢ãŒããã¯ã㣠ã€ã¡ãŒãž (aspnet ã€ã¡ãŒãžãªã©) ã§ã¯ãå±éãã Docker ãã¹ã OS ã«å¿ããŠãLinux ãŸã㯠Windows ããŒãžã§ã³ã䜿çšãããŸãã
mcr.microsoft.com/dotnet/aspnet:8.0
ãã«ãã¢ãŒããã¯ãã£: Docker ãã¹ã OS ã«å¿ããŠãLinux ãŸã㯠Windows Nano Server ã§ã® .NET 8 ã©ã³ã¿ã€ã ã®ã¿
ãã®å ŽåãWindows ãã¹ãããã€ã¡ãŒãžããã«ããå ŽåãWindows ããªã¢ã³ãããã«ãããåãã€ã¡ãŒãžåã Linux ãã¹ããããã«ãããå ŽåãLinux ããªã¢ã³ãããã«ãããŸãã
Dockerfile ã®ãã«ãã¹ããŒãž ãã«ã
Dockerfile ã¯ããã ã¹ã¯ãªããã«äŒŒãŠããŸãã ã³ãã³ã ã©ã€ã³ããã³ã³ãã¥ãŒã¿ãŒãèšå®ããå¿ èŠããã£ãå Žåã«è¡ãæäœãšäŒŒãŠããŸãã
ããã¯åæã³ã³ããã¹ããèšå®ããåºæ¬ã€ã¡ãŒãžããå§ãŸãããã¹ã OS äžã«ãããã¹ã¿ãŒãã¢ãã ãã¡ã€ã« ã·ã¹ãã ã®ãããªãã®ã§ãã ãã㯠OS ã§ã¯ãããŸããããã³ã³ãããŒå ã® OS "ã®ãããªãã®" ãšèããããšãã§ããŸãã
ã³ãã³ã ã©ã€ã³ãå®è¡ãããã³ã«ã以åã®ãã®ããã®å€æŽãé©çšãããæ°ããã¬ã€ã€ãŒããã¡ã€ã« ã·ã¹ãã ã«äœæããããããã³ã³ãã€ã«æã«çµæã®ãã¡ã€ã« ã·ã¹ãã ãçæãããŸãã
æ°ãããã¹ãŠã®ã¬ã€ã€ãŒã¯ä»¥åã®ãã®ã®äžã« "é 眮ãã"ãã³ãã³ããå®è¡ããããã³ã«çµæã®ã€ã¡ãŒãžã®ãµã€ãºãå¢ãããããã€ã¡ãŒãžã«ã¢ããªã±ãŒã·ã§ã³ã®ãã«ããšçºè¡ã«å¿ èŠãª SDK ãªã©ãå«ããå¿ èŠãããå Žåããã®ã€ã¡ãŒãžãéåžžã«å€§ãããªãå¯èœæ§ããããŸãã
ããã§ãDocker 17.05以éã§å©çšã§ãããã«ãã¹ããŒãžãã«ããç»å Žãããã®åšåãçºæ®ããŸãã
æ žãšãªãæŠå¿µã¯ãDockerfile ã®å®è¡ããã»ã¹ãè€æ°ã®ã¹ããŒãžã«åããããããšã§ããã¹ããŒãžã¯åŸã« 1 ã€ä»¥äžã®ã³ãã³ããç¶ãåæã€ã¡ãŒãžã§ãæåŸã®ã¹ããŒãžã§æçµã€ã¡ãŒãžã®ãµã€ãºã決å®ãããŸãã
ã€ãŸãããã«ãã¹ããŒãž ãã«ãã§ã¯ãäœæäœæ¥ãç°ãªã "ãã§ãŒãº" ã«åå²ããäžéã¹ããŒãžããé¢é£ãããã£ã¬ã¯ããªã®ã¿ãååŸããæçµã€ã¡ãŒãžãçµã¿ç«ãŠãããšãã§ããŸãã ãã®æ©èœã䜿çšããäžè¬çãªæŠç¥ã¯æ¬¡ã®ãšããã§ãã
ã¢ããªã±ãŒã·ã§ã³ããã«ããããã©ã«ããŒã«çºè¡ããããã«å¿ èŠãªãã¹ãŠã®ãã®ãå«ããåºæ¬ç㪠SDK ã€ã¡ãŒãž (倧ããã«é¢ä¿ãªã) ã䜿çšããŸã
ãã®åŸãåºæ¬çãªå°ããã©ã³ã¿ã€ã ã®ã¿ã®ã€ã¡ãŒãžã䜿çšããåã®ã¹ããŒãžããçºè¡ãã©ã«ããŒãã³ããŒããŠãå°ããªæçµã€ã¡ãŒãžãçæããŸãã
ãã«ãã¹ããŒãžãçè§£ããæåã®æ¹æ³ã¯ãããããDockerfile ã詳ããèŠãŠããããšã§ãããããDocker ãµããŒãããããžã§ã¯ãã«è¿œå ãããšãã« Visual Studio ã«ãã£ãŠäœæãããåæã® Dockerfile ããå§ããåŸã§ããã€ãã®æé©åã«ã€ããŠèª¬æããŸãã
åæã® Dockerfile ã¯ã次ã®ããã«ãªããŸãã
1 FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
2 WORKDIR /app
3 EXPOSE 80
4
5 FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
6 WORKDIR /src
7 COPY src/Services/Catalog/Catalog.API/Catalog.API.csproj âŠ
8 COPY src/BuildingBlocks/HealthChecks/src/Microsoft.AspNetCore.HealthChecks âŠ
9 COPY src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks âŠ
10 COPY src/BuildingBlocks/EventBus/IntegrationEventLogEF/ âŠ
11 COPY src/BuildingBlocks/EventBus/EventBus/EventBus.csproj âŠ
12 COPY src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.csproj âŠ
13 COPY src/BuildingBlocks/EventBus/EventBusServiceBus/EventBusServiceBus.csproj âŠ
14 COPY src/BuildingBlocks/WebHostCustomization/WebHost.Customization âŠ
15 COPY src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions âŠ
16 COPY src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions âŠ
17 RUN dotnet restore src/Services/Catalog/Catalog.API/Catalog.API.csproj
18 COPY . .
19 WORKDIR /src/src/Services/Catalog/Catalog.API
20 RUN dotnet build Catalog.API.csproj -c Release -o /app
21
22 FROM build AS publish
23 RUN dotnet publish Catalog.API.csproj -c Release -o /app
24
25 FROM base AS final
26 WORKDIR /app
27 COPY --from=publish /app .
28 ENTRYPOINT ["dotnet", "Catalog.API.dll"]
è¡ããšã®è©³çŽ°ã¯æ¬¡ã®ãšããã§ãã
è¡çªå· 1: "å°ããª" ã©ã³ã¿ã€ã ã®ã¿ã®åºæ¬ã€ã¡ãŒãžã䜿çšããã¹ããŒãžãéå§ããŸããåç §çšã«ãããåºæ¬ãšåŒã³ãŸãã
è¡çªå· 2: ã€ã¡ãŒãžã« /app ãã£ã¬ã¯ããªãäœæããŸãã
è¡çªå· 3: ããŒã 80 ãå ¬éããŸãã
è¡çªå· 5: ãã«ã/çºè¡çšã® "倧ããª" ã€ã¡ãŒãžã䜿çšããŠãæ°ããã¹ããŒãžãéå§ããŸãã åç §çšã«ããã build ãšåŒã³ãŸãã
è¡çªå· 6: ã€ã¡ãŒãžã« /src ãã£ã¬ã¯ããªãäœæããŸãã
è¡çªå· 7: 16 è¡ç®ãŸã§ãåç §ãã .csproj ãããžã§ã¯ã ãã¡ã€ã«ãã³ããŒããåŸã§ããã±ãŒãžã埩å ã§ããããã«ããŸãã
è¡çªå· 17:Catalog.API ãããžã§ã¯ããšåç §ãããžã§ã¯ãçšã®ããã±ãŒãžã埩å ããŸãã
è¡çªå· 18: ã€ã¡ãŒãžã® /src ã« ( .dockerignore ãã¡ã€ã«ã«å«ãŸããŠãããã¡ã€ã«ãšãã£ã¬ã¯ããªãé€ã) ãœãªã¥ãŒã·ã§ã³çšã®ãã¹ãŠã®ãã£ã¬ã¯ã㪠ããªãŒãã³ããŒããŸãã
è¡çªå· 19: çŸåšã®ãã©ã«ããŒã Catalog.API ãããžã§ã¯ãã«å€æŽããŸãã
è¡çªå· 20: ãããžã§ã¯ã (ããã³ãã®ä»ã®ãããžã§ã¯ãã®äŸåé¢ä¿) ããã«ãããã€ã¡ãŒãžå ã§ /app ãã£ã¬ã¯ããªã«åºåããŸãã
è¡çªå· 22: ãã«ãã«ç¶ããæ°ããã¹ããŒãžãéå§ããŸãã åç §çšã«ããã publish ãšåŒã³ãŸãã
è¡çªå· 23: ãããžã§ã¯ã (ããã³äŸåé¢ä¿) ãçºè¡ããã€ã¡ãŒãžã® /app ãã£ã¬ã¯ããªã«åºåããŸãã
è¡çªå· 25:base ã«ç¶ããæ°ããã¹ããŒãžãéå§ããããã final ãšåŒã³ãŸãã
è¡çªå· 26: çŸåšã®ãã£ã¬ã¯ããªã /app ã«å€æŽããŸãã
è¡çªå· 27:publish ã¹ããŒãžãã /app ãã£ã¬ã¯ããªãçŸåšã®ãã£ã¬ã¯ããªã«ã³ããŒããŸãã
è¡çªå· 28: ã³ã³ãããŒã®éå§æã«å®è¡ããã³ãã³ããå®çŸ©ããŸãã
次ã¯ãããã»ã¹å šäœã®ããã©ãŒãã³ã¹ãåäžãããããã®æé©åã«ã€ããŠããã€ãèŠãŠãããŸããeShopOnContainers ã®å ŽåãLinux ã³ã³ãããŒã®å®å šãªãœãªã¥ãŒã·ã§ã³ããã«ãããã«ã¯çŽ 22 å以äžãããããšã«ãªããŸãã
éåžžã«ã·ã³ãã«ãª Docker ã®ã¬ã€ã€ãŒ ãã£ãã·ã¥æ©èœãå©çšããŸããåºæ¬ã€ã¡ãŒãžãšã³ãã³ãããåã«å®è¡ããããã€ããšåãã§ããå Žåã¯ãçµæã®ã¬ã€ã€ãŒã䜿çšããã ãã§æžã¿ãŸããã³ãã³ããå®è¡ããå¿ èŠã¯ãªããããæéãç¯çŽã§ããŸãã
次ã¯ããã«ã ã¹ããŒãžã«ã€ããŠè©³ããèŠãŠãããŸãã5 è¡ç®ãã 6 è¡ç®ãŸã§ã¯ã»ãšãã©åãã§ãããeShopOnContainers ããã®ãã¹ãŠã®ãµãŒãã¹ã«ã€ããŠã¯ã7 è¡ç®ãã 17 è¡ç®ãŸã§ãç°ãªããŸãããããã£ãŠãæ¯åå®è¡ããå¿ èŠããããŸãããããã7 è¡ç®ãã 16 è¡ç®ã次ã®ããã«å€æŽãããšããŸãã
COPY . .
ãã®å Žåããã¹ãŠã®ãµãŒãã¹ã«ã€ããŠãŸã£ããåãã«ãªãããœãªã¥ãŒã·ã§ã³å šäœãã³ããŒããã倧ããªã¬ã€ã€ãŒãäœæãããŸãã
ããããååæ (ããã³ãã¡ã€ã«ã倿Žãããå Žåã¯ãåãã«ãæ) ã«ã®ã¿ãã³ã㌠ããã»ã¹ãå®è¡ãããä»ã®ãã¹ãŠã®ãµãŒãã¹ã§ã¯ãã£ãã·ã¥ã䜿çšãããŸã
äžéã¹ããŒãžã§ãã倧ããªã€ã¡ãŒãžã䜿çšããããããæçµã€ã¡ãŒãž ãµã€ãºã«ã¯åœ±é¿ããŸããã
次ã®å€§å¹
ãªæé©åã¯ã17 è¡ç®ã§å®è¡ããã restore ã³ãã³ãã«é¢ä¿ããŸããããããeShopOnContainers ã®ãã¹ãŠãµãŒãã¹ã«ã€ããŠç°ãªããŸãã ãã®è¡ã次ã®ããã«å€æŽãããšããŸãã
RUN dotnet restore
ãã®å Žåããœãªã¥ãŒã·ã§ã³å šäœã®ããã±ãŒãžã埩å ãããŸããããããããã§ããçŸåšã®æ¹æ³ã§ã¯ 15 åã§ã¯ãªãã1 åã ãè¡ãããŸãã
ãããããã©ã«ããŒã« 1 ã€ã®ãããžã§ã¯ããŸãã¯ãœãªã¥ãŒã·ã§ã³ ãã¡ã€ã«ãããå Žåã«ã®ã¿ãdotnet restore ãå®è¡ãããããããããå®çŸããã®ã¯å°ãè€éã«ãªããŸããããã解決ããããã®æ¹æ³ãç°¡åã«èª¬æãããšã次ã®ããã«ãªããŸãã
次ã®è¡ã .dockerignore ã«è¿œå ããŸãã
*.slnãã¡ã€ã³ ãã©ã«ã㌠ããªãŒã®ãã¹ãŠã®ãœãªã¥ãŒã·ã§ã³ ãã¡ã€ã«ãç¡èŠããŸã!eShopOnContainers-ServicesAndWebApps.slnããã®ãœãªã¥ãŒã·ã§ã³ ãã¡ã€ã«ã®ã¿ãå«ããŸãã
/ignoreprojectextensions:.dcprojãžã®dotnet restoreåŒæ°ãå«ããŸãããããã£ãŠãdocker-compose ãããžã§ã¯ããç¡èŠãããeShopOnContainers-ServicesAndWebApps ãœãªã¥ãŒã·ã§ã³ã®ããã±ãŒãžã®ã¿ã埩å ãããŸãã
æçµçãªæé©åã§ã¯ã20 è¡ç®ãäœåã«ãªããŸãã23 è¡ç®ã§ãã¢ããªã±ãŒã·ã§ã³ããã«ããããæ¬è³ªçã«ã¯ 20 è¡ç®ã®ããåŸã«ç¶ããããå¥ã®ã³ãã³ãã§æéããããããšã«ãªããŸãã
çµæã®ãã¡ã€ã«ã¯æ¬¡ã®ããã«ãªããŸãã
1 FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
2 WORKDIR /app
3 EXPOSE 80
4
5 FROM mcr.microsoft.com/dotnet/sdk:8.0 AS publish
6 WORKDIR /src
7 COPY . .
8 RUN dotnet restore /ignoreprojectextensions:.dcproj
9 WORKDIR /src/src/Services/Catalog/Catalog.API
10 RUN dotnet publish Catalog.API.csproj -c Release -o /app
11
12 FROM base AS final
13 WORKDIR /app
14 COPY --from=publish /app .
15 ENTRYPOINT ["dotnet", "Catalog.API.dll"]
äžããã®åºæ¬ã€ã¡ãŒãžã®äœæ
ç¬èªã® Docker åºæ¬ã€ã¡ãŒãžãäžããäœæããããšãã§ããŸãã ãã®ã·ããªãªã¯ãDocker ãåããŠäœ¿çšãããŠãŒã¶ãŒã«ã¯æšå¥šãããŸããããç¬èªã®åºæ¬ã€ã¡ãŒãžã®ç¹å®ã®ããããèšå®ãããå Žåã«ãããè¡ãããšãã§ããŸãã
远å ã®ãªãœãŒã¹
Multi-arch .NET Core images (ãã«ãã¢ãŒããã¯ãã£ã® .NET Core ã®ã€ã¡ãŒãž)
https://github.com/dotnet/announcements/issues/14Create a base image (åºæ¬ã€ã¡ãŒãžãäœæãã) Docker ã®å ¬åŒãªããã¥ã¡ã³ãã§ãã
https://docs.docker.com/develop/develop-images/baseimages/
æé 3. ã«ã¹ã¿ãã€ãºãã Docker ã€ã¡ãŒãžãäœæããããã«ã¢ããªã±ãŒã·ã§ã³ãŸãã¯ãµãŒãã¹ãåã蟌ã¿ãŸãã
ã¢ããªã±ãŒã·ã§ã³ã®åãµãŒãã¹ã«ã¯ãé¢é£ã€ã¡ãŒãžãäœæããå¿ èŠããããŸãã ã¢ããªã±ãŒã·ã§ã³ã 1 ã€ã®ãµãŒãã¹ãŸã㯠Web ã¢ããªã±ãŒã·ã§ã³ã§æ§æãããŠããå Žåãã€ã¡ãŒãžã¯ 1 ã€ã®ã¿å¿ èŠã§ãã
Docker ã€ã¡ãŒãžã¯ãVisual Studio ãèªåçã«æ§ç¯ããããšã«æ³šæããŠãã ããã æ¬¡ã®æé ã¯ããšãã£ã¿ãŒ/CLI ã¯ãŒã¯ãããŒã«ã®ã¿å¿ èŠã§ãããèåŸã§äœãèµ·ãã£ãŠããã®ã説æããããã«ç€ºããŠããŸãã
éçºè ã¯ãå®å šãªæ©èœãããã·ã¥ã§ãããã(GitHub ãªã©ã®) ãœãŒã¹ç®¡çã·ã¹ãã ã«å€æŽãããŸã§ãããŒã«ã«ã§éçºããã³ãã¹ãããå¿ èŠããããŸãã ã€ãŸããDocker ã€ã¡ãŒãžãäœæããŠããŒã«ã«ã® Docker ãã¹ã (Windows ãŸã㯠Linux VM) ã«ã³ã³ãããŒãå±éãããããã®ããŒã«ã«ã®ã³ã³ãããŒã«å¯ŸããŠå®è¡ããã¹ããããã³ãããã°ãããå¿ èŠãããããšãæå³ããŸãã
Docker CLI ãš Dockerfile ã䜿çšããŠãããŒã«ã«ã®ç°å¢ã«ã«ã¹ã¿ã ã€ã¡ãŒãžãäœæããã«ã¯ãå³ 5-5 ã®ãšãããdocker build ã³ãã³ãã䜿çšããŸãã
å³ 5-5 ã«ã¹ã¿ã Docker ã€ã¡ãŒãžã®äœæ
å¿
èŠã«å¿ããŠããããžã§ã¯ã ãã©ã«ããŒãã docker build ãçŽæ¥å®è¡ãã代ããã«ãdotnet publish ãå®è¡ããŠå¿
èŠãª .NET ã©ã€ãã©ãªãšãã€ããªã䜿çšããŠãå±éå¯èœãªãã©ã«ããŒããŸãçæããŠãããdocker build ã³ãã³ãã䜿çšããŸãã
ããã§ãcesardl/netcore-webapi-microservice-docker:first ãšããååã® Docker ã€ã¡ãŒãžãäœæãããŸãã ãã®å Žåã:first ã¯ç¹å®ã®ããŒãžã§ã³ã衚ãã¿ã°ã§ãã ãã®æé ã¯ãæ§æãã Docker ã¢ããªã±ãŒã·ã§ã³çšã«äœæããå¿
èŠã®ããåã«ã¹ã¿ã ã€ã¡ãŒãžã§ç¹°ãè¿ããŸãã
ã¢ããªã±ãŒã·ã§ã³ãè€æ°ã®ã³ã³ãããŒã§æ§æãããŠããå Žå (ã€ãŸãããã«ãã³ã³ãã㌠ã¢ããªã±ãŒã·ã§ã³ã®å Žå)ãdocker-compose up --build ã³ãã³ãã䜿ã£ãŠãé¢é£ãã docker-compose.yml ãã¡ã€ã«ã§å
¬éãããŠããã¡ã¿ããŒã¿ã䜿çšããŠã1 ã€ã®ã³ãã³ãã§ãã¹ãŠã®é¢é£ã€ã¡ãŒãžããã«ãããããšãã§ããŸãã
å³ 5-6 ã® docker images ã³ãã³ãã䜿çšãããšãããŒã«ã« ãªããžããªã®æ¢åã®ã€ã¡ãŒãžãæ€çŽ¢ã§ããŸãã
å³ 5-6. docker images ã³ãã³ãã䜿çšããæ¢åã®ã€ã¡ãŒãžã®è¡šç€º
Visual Studio ã§ã® Docker ã€ã¡ãŒãžã®äœæ
Visual Studio ã䜿çšããŠãDocker ã®ãµããŒãã§ãããžã§ã¯ããäœæããå Žåãã€ã¡ãŒãžã¯æç€ºçã«ã¯äœæãããŸããã 代ããã«ãF5 (ãŸã㯠Ctrl+F5) ããŒãæŒããDocker ã§ã³ã³ãããŒåãããã¢ããªã±ãŒã·ã§ã³ãŸãã¯ãµãŒãã¹ãå®è¡ããããšã«ãã£ãŠãã€ã¡ãŒãžãäœæãããŸãã ãã®æé 㯠Visual Studio ã§èªåçã«å®è¡ãããã®ã§ãåŠçå 容ãèŠãããšã¯ã§ããŸããããå éšã®åŠçå 容ãç¥ãããšã¯éèŠã§ãã
æé 4. ãã«ã ã³ã³ãã㌠Docker ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ãããšãã® docker-compose.yml ãžã®ãµãŒãã¹ã®å®çŸ©
docker-compose.yml ãã¡ã€ã«ã§ã¯ãå±éçšã®ã³ãã³ãã䜿çšããŠæ§ææžã¿ã®ã¢ããªã±ãŒã·ã§ã³ãšããŠé¢é£ãµãŒãã¹ã®ã»ãããå®çŸ©ã§ããŸãã ãŸãããã®äŸåé¢ä¿ãšã©ã³ã¿ã€ã æ§æãæ§æãããŸãã
docker-compose.yml ãã¡ã€ã«ã䜿çšããå Žåãã¡ã€ã³ãŸãã¯ã«ãŒã ãœãªã¥ãŒã·ã§ã³ ãã©ã«ããŒã«ã次ã®äŸãšé¡äŒŒããå 容ã§ãã¡ã€ã«ãäœæããå¿ èŠããããŸãã
version: '3.4'
services:
webmvc:
image: eshop/web
environment:
- CatalogUrl=http://catalog-api
- OrderingUrl=http://ordering-api
ports:
- "80:80"
depends_on:
- catalog-api
- ordering-api
catalog-api:
image: eshop/catalog-api
environment:
- ConnectionString=Server=sqldata;Port=1433;Database=CatalogDB;âŠ
ports:
- "81:80"
depends_on:
- sqldata
ordering-api:
image: eshop/ordering-api
environment:
- ConnectionString=Server=sqldata;Database=OrderingDb;âŠ
ports:
- "82:80"
extra_hosts:
- "CESARDLBOOKVHD:10.0.75.1"
depends_on:
- sqldata
sqldata:
image: mcr.microsoft.com/mssql/server:latest
environment:
- SA_PASSWORD=[PLACEHOLDER]
- ACCEPT_EULA=Y
ports:
- "5433:1433"
éèŠ
Microsoft ã§ã¯ã䜿çšå¯èœãªæãå®å šãªèªèšŒãããŒã䜿çšããããšããå§ãããŸãã Azure SQL ã«æ¥ç¶ããå Žåã¯ãAzure ãªãœãŒã¹ã®ç®¡ç ID ãæšå¥šãããèªèšŒæ¹æ³ã§ãã
ãã® docker-compose.yml ãã¡ã€ã«ã¯ãç°¡ç¥åãããçµåãããããŒãžã§ã³ã§ãã ããã«ã¯ãåžžã«å¿ èŠãª (ã«ã¹ã¿ã ã€ã¡ãŒãžåãªã©ã®) åã³ã³ãããŒçšã®éçãªæ§æããŒã¿ãšãå±éç°å¢ã«ãã£ãŠã¯ç°ãªãå Žåã®ãããæ¥ç¶æååãªã©ã®æ§ææ å ±ãå«ãŸããŠããŸãã åŸåã®ã»ã¯ã·ã§ã³ã§ã¯ãè€æ°ã® docker-compose ãã¡ã€ã«ã« docker-compose.yml æ§æãåå²ããç°å¢ãšå®è¡ã®çš®é¡ (ãããã°ãŸãã¯ãªãªãŒã¹) ã«å¿ããŠãå€ããªãŒããŒã©ã€ãããæ¹æ³ã«ã€ããŠåŠç¿ããŸãã
docker-compose.yml ãã¡ã€ã«ã®äŸã§ã¯ãwebmvc ãµãŒãã¹ (Web ã¢ããªã±ãŒã·ã§ã³)ã2 ã€ã®ãã€ã¯ããµãŒãã¹ (ordering-api ãš basket-api)ãããã³ 1 ã€ã®ããŒã¿ ãœãŒã¹ ã³ã³ãã㌠(ã³ã³ãããŒãšããŠå®è¡ããã Linux çš SQL Server ã«åºã¥ã sqldata) ãšããã® 4 ã€ã®ãµãŒãã¹ãå®çŸ©ãããŠããŸãã åãµãŒãã¹ã¯ã³ã³ãããŒãšããŠå±éãããã®ã§ãããããã« Docker ã€ã¡ãŒãžãå¿
èŠã§ãã
docker-compose.yml ãã¡ã€ã«ã§ã¯ãã©ã®ã³ã³ãããŒã䜿çšãããŠãããã®ã¿ã§ãªããããããã©ã®ããã«åã
ã«æ§æãããããæå®ãããŠããŸãã ããšãã°ã.yml ãã¡ã€ã«ã® webmvc ã³ã³ãããŒã®å®çŸ©ã¯æ¬¡ã®ããã«ãªããŸãã
ãã«ãæžã¿ã®
eshop/web:latestã€ã¡ãŒãžã䜿çšããŸãã ãã ããdocker-compose ã®å®è¡ã®äžéšãšããŠãdocker-compose ãã¡ã€ã«ã® build: ã»ã¯ã·ã§ã³ã®è¿œå æ§æãå ããã€ã¡ãŒãžããã«ããããããã«æ§æããããšãã§ããŸãã2 ã€ã®ç°å¢å€æ° (CatalogUrl ããã³ OrderingUrl) ãåæåããŸãã
ã³ã³ãããŒäžã®å ¬éãããŠããããŒã 80 ãããã¹ã ã³ã³ãã¥ãŒã¿ãŒäžã®å€éšããŒã 80 ã«è»¢éããŸãã
depends_on èšå®ã䜿çšããŠãã«ã¿ãã°ãšé åºä»ããµãŒãã¹ã« Web ã¢ããªããªã³ã¯ããŸãã ããã«ããããµãŒãã¹ã¯ããããã®ãµãŒãã¹ãéå§ããããŸã§åŸ æ©ããããã«ãªããŸãã
docker-compose.yml ãã¡ã€ã«ã«ã€ããŠã¯ããã€ã¯ããµãŒãã¹ãšãã«ãã³ã³ãã㌠ã¢ããªãå®è£ ããæ¹æ³ã«ã€ããŠèª¬æããåŸã®ã»ã¯ã·ã§ã³ã§ãå確èªããŸãã
Visual Studio ã§ã®docker-compose.ymlã®æäœ
Dockerfile ããããžã§ã¯ãã«è¿œå ããã ãã§ãªããåè¿°ã®ãšãããVisual Studio 2017 (ããŒãžã§ã³ 15.8 以é) ã§ã¯ããœãªã¥ãŒã·ã§ã³ã« Docker Compose ã®ãªãŒã±ã¹ãã¬ãŒã¿ãŒ ãµããŒãã远å ã§ããŸãã
å³ 5-7 ã«ç€ºãããã«ãã³ã³ãã㌠ãªãŒã±ã¹ãã¬ãŒã¿ãŒã®ãµããŒããæåã«è¿œå ãããšãã«ãVisual Studio ã§ãããžã§ã¯ãçšã® Dockerfile ãäœæãããããã€ãã®ã°ããŒãã« docker-compose*.yml ãã¡ã€ã«ãå«ããœãªã¥ãŒã·ã§ã³ã«æ°ãã (ãµãŒãã¹ ã»ã¯ã·ã§ã³) ãããžã§ã¯ããäœæãããŠããããããã®ãã¡ã€ã«ã«ãããžã§ã¯ãã远å ãããŸãã ãã®åŸãdocker-compose.yml ãã¡ã€ã«ãéããè¿œå æ©èœã§æŽæ°ããããšãã§ããŸãã
docker-compose.yml ãã¡ã€ã«ã«å«ãããããžã§ã¯ãããšã«ããã®æäœãç¹°ãè¿ããŸãã
ãã®èšäºã®å·çæç¹ã§ã¯ãVisual Studio ã§ Docker Compose ãªãŒã±ã¹ãã¬ãŒã¿ãŒããµããŒããããŠããŸãã
å³ 5-7 ASP.NET Core ãããžã§ã¯ãã®å³ã¯ãªãã¯ã§ã® Visual Studio 2022 ãžã® Docker ãµããŒãã®è¿œå
Visual Studio ã§ãœãªã¥ãŒã·ã§ã³ã«ãªãŒã±ã¹ãã¬ãŒã¿ãŒ ãµããŒãã远å ãããšãå³ 5-8 ã®ãšããã远å ããã docker-compose.yml ãã¡ã€ã«ãå«ãŸããæ°ããããŒã (docker-compose.dcproj ãããžã§ã¯ã ãã¡ã€ã«) ããœãªã¥ãŒã·ã§ã³ ãšã¯ã¹ãããŒã©ãŒã«è¡šç€ºãããŸãã
å³ 5-8. Visual Studio 2022 ã®ãœãªã¥ãŒã·ã§ã³ ãšã¯ã¹ãããŒã©ãŒã«è¿œå ããã docker-compose ããªãŒ ããŒã
docker-compose up ã³ãã³ãã䜿çšãããšã1 ã€ã® docker-compose.yml ãã¡ã€ã«ã§ããã«ãã³ã³ãã㌠ã¢ããªã±ãŒã·ã§ã³ãå±éããããšãã§ããŸãã ããããVisual Studio ã§ãããã®ã°ã«ãŒãã远å ããããããç°å¢ (éçºãŸãã¯éçš) ãšå®è¡ã®çš®é¡ (ãªãªãŒã¹ãŸãã¯ãããã°) ã«å¿ããŠãå€ããªãŒããŒã©ã€ãã§ããŸãã ãã®æ©èœã¯ãåŸã®ã»ã¯ã·ã§ã³ã§èª¬æããŸãã
æé 5. Docker ã¢ããªã±ãŒã·ã§ã³ã®ãã«ããšå®è¡
ã¢ããªã±ãŒã·ã§ã³ã«ã³ã³ãããŒã 1 ã€ãããªãå ŽåãDocker ãã¹ã (ä»®æ³ãã·ã³ãŸãã¯ç©çãµãŒããŒ) ã«å±éããŠå®è¡ããããšãã§ããŸãã ãã ããã¢ããªã±ãŒã·ã§ã³ã«è€æ°ã®ãµãŒãã¹ãå«ãŸããŠããå Žåãåäžã® CLI ã³ãã³ã (docker-compose up)) ã䜿çšããããèåŸã§ãã®ã³ãã³ãã䜿çšãã Visual Studio ã䜿çšããŠãæ§æãããã¢ããªã±ãŒã·ã§ã³ãšããŠå±éããããšãã§ããŸãã å¥ã®ãªãã·ã§ã³ãèŠãŠã¿ãŸãããã
ãªãã·ã§ã³ A:åäžã³ã³ãã㌠ã¢ããªã±ãŒã·ã§ã³ã®å®è¡
Docker CLI ã®äœ¿çš
å³ 5-9 ã«ç€ºãããã«ãdocker run ã³ãã³ãã䜿çšã㊠Docker ã³ã³ãããŒãå®è¡ã§ããŸãã
docker run -t -d -p 80:5000 cesardl/netcore-webapi-microservice-docker:first
äžèšã®ã³ãã³ãã§ã¯ãå®è¡ããããã³ã«ãæå®ãããã€ã¡ãŒãžããæ°ããã³ã³ãã㌠ã€ã³ã¹ã¿ã³ã¹ãäœæãããŸãã
--name ãã©ã¡ãŒã¿ãŒã䜿çšããŠã³ã³ãããŒã«ååãä»ããŠãããdocker start {name} (ãŸãã¯ã³ã³ãã㌠ID ãããã¯èªåå) ã䜿ã£ãŠãæ¢åã®ã³ã³ãã㌠ã€ã³ã¹ã¿ã³ã¹ãå®è¡ããããšãã§ããŸãã
å³ 5-9 docker run ã³ãã³ãã䜿çšãã Docker ã³ã³ãããŒã®å®è¡
ãã®å Žåããã®ã³ãã³ãã«ãã£ãŠãã³ã³ãããŒã®å éšããŒã 5000 ããã¹ã ã³ã³ãã¥ãŒã¿ãŒã®ããŒã 80 ã«ãã€ã³ããããŸãã ã€ãŸãããã¹ãã¯ããŒã 80 ããªãã¹ã³ããã³ã³ãããŒã®ããŒã 5000 ã«è»¢éããããšãæå³ããŸãã
衚瀺ãããããã·ã¥ã¯ã³ã³ãã㌠ID ã§ããã--name ãªãã·ã§ã³ãæå®ãããŠããªãå Žåã¯ãã©ã³ãã ãªèªã¿åãå¯èœãªååãå²ãåœãŠãããŸãã
Visual Studio ã®äœ¿çš
ã³ã³ãã㌠ãªãŒã±ã¹ãã¬ãŒã¿ãŒã®ãµããŒãã远å ããŠããªãå Žåã¯ãVisual Studio ã§ Ctrl+F5 ããŒãæŒããŠåäžã³ã³ãã㌠ã¢ããªãå®è¡ããããšãã§ããŸãããŸããF5 ããŒã䜿çšããŠãã³ã³ãããŒå ã§ã¢ããªã±ãŒã·ã§ã³ããããã°ããããšãã§ããŸãã ã³ã³ãããŒã¯ãdocker run ã䜿çšããŠããŒã«ã«ã§å®è¡ãããŸãã
ãªãã·ã§ã³ B:ãã«ãã³ã³ãã㌠ã¢ããªã±ãŒã·ã§ã³ã®å®è¡
å€ãã®ãšã³ã¿ãŒãã©ã€ãº ã·ããªãªã§ã¯ãDocker ã¢ããªã±ãŒã·ã§ã³ã¯è€æ°ã®ãµãŒãã¹ã§æ§æãããŠããŸããã€ãŸããå³ 5-10 ã®ããã«ãã«ãã³ã³ãããŒã®ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããå¿ èŠããããŸãã
å³ 5-10 Docker ã³ã³ãããŒãå±éããã VM
Docker CLI ã®äœ¿çš
Docker CLI ã䜿çšããŠãã«ãã³ã³ãã㌠ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããã«ã¯ãdocker-compose up ã³ãã³ãã䜿çšããŸãã ãã®ã³ãã³ãã§ã¯ããã«ãã³ã³ãã㌠ã¢ããªã±ãŒã·ã§ã³ãå±éããããã«ãœãªã¥ãŒã·ã§ã³ ã¬ãã«ã«ãã docker compose.yml ãã¡ã€ã«ã䜿çšããŸãã å³ 5-11 ã¯ãdocker-compose.yml ãã¡ã€ã«ãå«ããã¡ã€ã³ ãœãªã¥ãŒã·ã§ã³ ãã£ã¬ã¯ããªããã³ãã³ããå®è¡ããçµæã瀺ããŠããŸãã
å³ 5-11 docker-compose up ã³ãã³ãã®å®è¡çµæã®äŸ
docker-compose up ã³ãã³ããå®è¡ãããšãå³ 5-10 ã«ç€ºãããã«ãã¢ããªã±ãŒã·ã§ã³ãšãã®é¢é£ã³ã³ãããŒã Docker ãã¹ãã«å±éãããŸãã
Visual Studio ã®äœ¿çš
Visual Studio 2019 ã䜿çšãããã«ãã³ã³ãã㌠ã¢ããªã±ãŒã·ã§ã³ã®å®è¡ã¯éåžžã«ç°¡åã§ãã Ctrl+F5 ããŒãæŒããŠå®è¡ããããF5 ããŒãæŒããŠãããã°ããã ãã§ãããã®å Žåãéåžžã©ãããdocker-compose ãã¹ã¿ãŒãã¢ãã ãããžã§ã¯ããšããŠèšå®ããŸãã å¿ èŠãªãã¹ãŠã®ã»ããã¢ãã㯠Visual Studio ã«ãã£ãŠåŠçããããããæ¢ã«æ¥ç¶ãããŠãããããã¬ãŒã䜿çšããŠãéåžžã©ããã«ãã¬ãŒã¯ãã€ã³ããäœæããæçµçã« "ãªã¢ãŒã ãµãŒããŒ" ã§å®è¡ãããç¬ç«ããããã»ã¹ã«ãªããã®ãç°¡åã«ãããã°ã§ããŸãã
æ¢ã«èª¬æãããšããããœãªã¥ãŒã·ã§ã³å ã®ãããžã§ã¯ãã« Docker ãœãªã¥ãŒã·ã§ã³ã®ãµããŒãã远å ãããã³ã«ããã®ãããžã§ã¯ãã¯ãã°ããŒãã« (ãœãªã¥ãŒã·ã§ã³ ã¬ãã«) docker-compose.yml ãã¡ã€ã«ã«æ§æãããäžåºŠã«ãœãªã¥ãŒã·ã§ã³å šäœãå®è¡ãŸãã¯ãããã°ã§ããããã«ãªããŸãã Visual Studio ã§ã¯ãDocker ãœãªã¥ãŒã·ã§ã³ã®ãµããŒããæå¹ã«ãªã£ãŠãããããžã§ã¯ãããšã« 1 ã€ã®ã³ã³ãããŒãèµ·åãããå éšã®ãã¹ãŠã®æé ããŠãŒã¶ãŒã®ããã«å®è¡ããŠãããŸã (dotnet publishãdocker build ãªã©)ã
é¢åãªäœæ¥ããã¹ãŠèŠãŠã¿ãå Žåã¯ã以äžã®ãã¡ã€ã«ãåç §ããŸãã
{root solution folder}\obj\Docker\docker-compose.vs.debug.g.yml
ããã§éèŠãªã®ã¯ãå³ 5-12 ã«ç€ºãããã«ãVisual Studio 2019 ã«ã¯ãF5 ã®ã¢ã¯ã·ã§ã³çšã«è¿œå ã® Docker ã³ãã³ããããããšã§ãã ãã®ãªãã·ã§ã³ã§ã¯ããœãªã¥ãŒã·ã§ã³ ã¬ãã«ã§ docker-compose.yml ãã¡ã€ã«ã«å®çŸ©ãããŠãããã¹ãŠã®ã³ã³ãããŒãå®è¡ããŠããã«ãã³ã³ãã㌠ã¢ããªã±ãŒã·ã§ã³ãå®è¡ãŸãã¯ãããã°ã§ããŸãã ãã«ãã³ã³ãã㌠ãœãªã¥ãŒã·ã§ã³ããããã°ã§ãããšããããšã¯ãç°ãªããããžã§ã¯ã (ã³ã³ãããŒ) ã«ãããããã¬ãŒã¯ãã€ã³ããèšå®ã§ã (ããã€ããã¬ãŒã¯ãã€ã³ããèšå®ã§ã)ãVisual Studio ã§ãããã°ããéãå¥ã®ãããžã§ã¯ãã«å®çŸ©ãããå¥ã®ã³ã³ãããŒã§å®è¡ãããŠãããã¬ãŒã¯ãã€ã³ãã§åæ¢ãããããšãæå³ããŸãã
å³ 5-12 Visual Studio 2022 ã§ã®ãã«ãã³ã³ãã㌠ã¢ããªã®å®è¡
远å ã®ãªãœãŒã¹
-
ãªã¢ãŒã Docker ãã¹ãã« ASP.NET ã³ã³ãããŒãé
眮ãã
https://learn.microsoft.com/visualstudio/containers/hosting-web-apps-in-docker
ãªãŒã±ã¹ãã¬ãŒã¿ãŒã䜿çšãããã¹ããšå±éã«é¢ããæ³šæäºé
docker-compose up ããã³ docker run ã³ãã³ã (ãŸã㯠Visual Studio ã§ã®ã³ã³ãããŒã®å®è¡ããã³ãããã°) ã䜿çšããŠãéçºç°å¢ã§ã³ã³ãããŒãååã«ãã¹ãã§ããŸãã ããããKubernetes ã Service Fabric ãªã©ã®ãªãŒã±ã¹ãã¬ãŒã¿ãŒãã¿ãŒã²ããã«ããå¿ èŠããããéçšã§ã®å±éã«ã¯ãã®æ¹æ³ã䜿çšããªãã§ãã ããã Kubernetes ã䜿çšããŠããå Žåã¯ããããã䜿ã£ãŠã³ã³ãããŒãšãµãŒãã¹ãæŽçãããããããããã¯ãŒã¯æ¥ç¶ããå¿ èŠããããŸãã å±éã䜿çšããŠããããã®äœæãšå€æŽãæŽçããããšãã§ããŸãã
æé 6. ããŒã«ã« Docker ãã¹ãã䜿çšãã Docker ã¢ããªã±ãŒã·ã§ã³ã®ãã¹ã
ãã®æé ã¯ãã¢ããªã±ãŒã·ã§ã³ã§äœãå®è¡ãããŠãããã«ãã£ãŠç°ãªããŸãã åäžã®ã³ã³ãããŒãŸãã¯ãµãŒãã¹ãšããŠå±éãããåçŽãª .NET Web ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãå³ 5-13 ã«ç€ºãããã«ãDocker ãã¹ãã§ãã©ãŠã¶ãŒãéããŠãµã€ãã«ç§»åããããšã«ããããµãŒãã¹ã«ã¢ã¯ã»ã¹ã§ããŸãã (Dockerfile ã®æ§æã§ãã³ã³ãããŒããã¹ãã® 80 以å€ã®ããŒãã«ããããããå Žåããã® URL ã«ãã¹ã ãã¹ããå«ããŸãã)
å³ 5-13 localhost ã䜿çšããããŒã«ã«ã§ã® Docker ã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãäŸ
localhost ã Docker ãã¹ã IP ããã€ã³ãããŠããªãå Žå (Docker CE ã䜿çšããŠããå Žåãæ¢å®ã§ã¯ããã€ã³ãããŠããå¿ èŠããããŸã)ããµãŒãã¹ã«ç§»åããã«ã¯ãã³ã³ãã¥ãŒã¿ãŒã®ãããã¯ãŒã¯ ã«ãŒãã® IP ã¢ãã¬ã¹ã䜿çšããŸãã
ãã©ãŠã¶ãŒã®ãã® URL ã§ã¯ã説æããŠããç¹å®ã®ã³ã³ãããŒã®äŸã«ãããŒã 80 ã䜿çšããŠããŸãã ãã ããåã®æé ã§èª¬æãããšãããdocker run ã³ãã³ãã§å±éããããšãããèŠæ±ã¯å éšã§ããŒã 5000 ã«ãªãã€ã¬ã¯ããããŠããŸãã
å³ 5-14 ã®ãšãããã¿ãŒããã«ããã«ãŒã«ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ããã¹ãããããšãå¯èœã§ãã Windows ã® Docker ã€ã³ã¹ããŒã«ã§ã¯ãæ¢å®ã® Docker ãã¹ã IP ã¯åžžã«ãã³ã³ãã¥ãŒã¿ãŒã®å®éã® IP ã¢ãã¬ã¹ã« 10.0.75.1 ãå ãããã®ãšãªããŸãã
å³ 5-14 ã«ãŒã«ã䜿çšããããŒã«ã«ã§ã® Docker ã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãäŸ
Visual Studio ã䜿çšããã³ã³ãããŒã®ãã¹ããšãããã°
Visual Studio ã䜿çšããŠã³ã³ãããŒãå®è¡ããã³ãããã°ããå Žåãã³ã³ãããŒãªãã§å®è¡ããå Žåãšã»ãŒåãæ¹æ³ã§ .NET ã¢ããªã±ãŒã·ã§ã³ããããã°ã§ããŸãã
Visual Studio ã䜿çšããªããããã°ããã³ãã¹ã
ãšãã£ã¿ãŒ/CLI ã¢ãããŒãã䜿çšããŠéçºããå Žåãã³ã³ãããŒã®ãããã°ã¯ããé£ãããªãããããã¬ãŒã¹ãçæããŠãããã°ããããšããå§ãããŸãã
远å ã®ãªãœãŒã¹
ã¯ã€ã㯠ã¹ã¿ãŒã: Visual Studio ã§ã® Dockerã
https://learn.microsoft.com/visualstudio/containers/container-toolsããŒã«ã«ã® Docker ã³ã³ãããŒã§ã®ã¢ããªã®ãããã°
https://learn.microsoft.com/visualstudio/containers/edit-and-refresh
Visual Studio ã§ã®ã³ã³ãããŒéçºã®ç°¡ç¥ã¯ãŒã¯ãããŒ
Visual Studio ã䜿çšããã¯ãŒã¯ãããŒã¯ããšãã£ã¿ãŒ/CLI ã¢ãããŒãã䜿çšããã¯ãŒã¯ãããŒããããå®éã¯ããã«ç°¡åã«ãªããŸãã Dockerfile ãš docker-compose.yml ãã¡ã€ã«ã«é¢ä¿ãã Docker ã§å¿ èŠãªå€ãã®æé ã¯ãå³ 5-15 ã®ãšãããVisual Studio ã§ã¯èåŸã§å®è¡ãããããç°¡ç¥åãããŸãã
Docker ã¢ããªã®éçºããã»ã¹:1 - ã¢ããªãã³ãŒãã£ã³ã°ããã2- Dockerfile ãæžã蟌ãã3 - Dockerfile ã§å®çŸ©ãããŠããã€ã¡ãŒãžãäœæããã4 - (çç¥å¯èœ) docker-compose.yml ãã¡ã€ã«ã«ãµãŒãã¹ãäœæããã5 - ã³ã³ãããŒãŸã㯠docker-compose ã¢ããªãå®è¡ããã6 - ã¢ããªãŸãã¯ãã€ã¯ããµãŒãã¹ããã¹ãããã7 - ãªããžããªã«ããã·ã¥ããŠç¹°ãè¿ãã
å³ 5-15ã Visual Studio ã§ã®éçºã®ç°¡ç¥ã¯ãŒã¯ãããŒ
ããã«å ãã(ãããžã§ã¯ãã« Docker ã®ãµããŒãã远å ãã) æé 2 ããäžåºŠã®ã¿å®è¡ããå¿ èŠããããŸãã ã€ãŸããã¯ãŒã¯ãããŒã¯ãä»ã®ä»»æã®éçºã« .NET ã䜿çšããå Žåã®éåžžã®éçºã¿ã¹ã¯ãšäŒŒããã®ã«ãªããŸãã èåŸã§äœãèµ·ãã£ãŠããã®ã (ã€ã¡ãŒãžã®ãã«ã ããã»ã¹ã䜿çšããŠããåºæ¬ã€ã¡ãŒãžãã³ã³ãããŒã®å±éãªã©) ãçè§£ããŠããå¿ èŠããããåäœãã«ã¹ã¿ãã€ãºããã®ã« Dockerfile ãŸã㯠docker-compose.yml ãã¡ã€ã«ãç·šéããå¿ èŠãããå ŽåããããŸãã ããããå€ãã®äœæ¥ã¯ Visual Studio ã䜿çšããããšã§å€§å¹ ã«ç°¡ç¥åããããŠãŒã¶ãŒã®çç£æ§ãåäžãããŸãã
Dockerfile ã§ PowerShell ã³ãã³ãã䜿çšã㊠Windows ã³ã³ãããŒãèšå®ãã
Windows ã³ã³ãããŒã¯ãæ¢åã® Windows ã¢ããªã±ãŒã·ã§ã³ã Docker ã€ã¡ãŒãžã«å€æããŠãDocker ãšã³ã·ã¹ãã ã®æ®ããšåãããŒã«ã§å±éã§ããŸãã Windows ã³ã³ãããŒã䜿çšããã«ã¯ã次ã®äŸã®ããã«ãDockerfile ã§ PowerShell ã³ãã³ããå®è¡ããŸãã
FROM mcr.microsoft.com/windows/servercore
LABEL Description="IIS" Vendor="Microsoft" Version="10"
RUN powershell -Command Add-WindowsFeature Web-Server
CMD [ "ping", "localhost", "-t" ]
ãã®å Žåã¯ãWindows Server Core åºæ¬ã€ã¡ãŒãž (FROM èšå®) ã䜿çšããŠãPowerShell ã³ãã³ã (RUN èšå®) ã§ IIS ãã€ã³ã¹ããŒã«ããŠããŸãã åæ§ã«ãPowerShell ã³ãã³ãã䜿çšããŠãASP.NET 4.xã.NET Framework 4.6ããŸãã¯ãã®ä»ã®ä»»æã® Windows ãœãããŠã§ã¢ãªã©ã®è¿œå ã³ã³ããŒãã³ããèšå®ããããšãã§ããŸãã ããšãã°ãDockerfile ã®æ¬¡ã®ã³ãã³ãã§ã¯ãASP.NET 4.5 ãèšå®ãããŸãã
RUN powershell add-windowsfeature web-asp-net45
远å ã®ãªãœãŒã¹
- aspnet-docker/Dockerfileã Windows ã®æ©èœãå«ããããã« Dockerfile ããå®è¡ãã PowerShell ã³ãã³ãã®äŸã
https://github.com/Microsoft/aspnet-docker/blob/master/4.7.1-windowsservercore-ltsc2016/runtime/Dockerfile