æŠèŠ
仿¥ã®ããŒã¹ã®éãéçºã®äžçã§ã¯ãCTOãéçºãããŒãžã£ãŒã補åãããŒãžã£ãŒã¯ãæ©èœã𿬠é¥ä¿®æ£ã®ããã®ããè¿ éãªã¿ãŒã³ã¢ã©ãŠã³ããæ±ããŠããŸãã ãåé¡ãããŸããããã¹ããšããªãã¯èšããŸãã ãã³ã³ããã ãã䜿ããŸãã ãããŠãããªãã¯æ£ããã§ãããããã³ã³ããã䜿ãå§ããæ¹æ³ãæãäžããŠèŠå§ãããšãççŽã«èšã£ãŠãããã¯è€éã§ããÂ
æå€§ã®èª²é¡ã® 1 ã€ã¯ãã€ã¡ãŒãžã®æ§ç¯ãã³ã³ãããŒã®å®è¡ãéçšç°å¢ã® kubernetes ã¯ã©ã¹ã¿ãŒã®ããŒã«ã«ã§ã®è€è£œãå®è¡ã§ããããŒã«ã»ãããã€ã³ã¹ããŒã«ããŠã»ããã¢ããããããšã§ãã ãããŠãã³ã³ãããã¯ã©ãŠãã«èŒžéããããšã¯ããŸããããã¯ãŸã£ããå¥ã®è©±ã§ãã
Docker Desktop ãš Docker Hub ã¯ãã€ã¡ãŒãžããã«ãããŠã¯ã©ãŠãã«åºè·ããããã®åºæ¬çãªããŒã«ã»ããã® 2 ã€ã§ãã ãã® 2 éšæ§æã®ã·ãªãŒãºã§ã¯ãDocker Desktop ãã»ããã¢ããããŠã€ã³ã¹ããŒã«ããããã€ãã®ã€ã¡ãŒãžããã«ãããŠãDocker Compose ã䜿çšããŠå®è¡ããŸãã æ¬¡ã«ããããã®ã€ã¡ãŒãžãã¯ã©ãŠãã«åºè·ããèªåãã«ããèšå®ããDocker Hub ã䜿çšããŠã³ãŒããéçšç°å¢ã«ãããã€ããæ¹æ³ã«ã€ããŠèª¬æããŸãã
Docker Desktop
Docker ãã¹ã¯ãããã¯ãéçºçšã³ã³ãã¥ãŒã¿ãŒã§ã³ã³ãããŒã®äœ¿çšãéå§ããæãç°¡åãªæ¹æ³ã§ãã Docker Desktop ã«ã¯ãDocker EngineãDocker CLIãDocker ComposeãKubernetes ãä»å±ããŠããŸãã Docker Desktop ã§ã¯ããªããžããªã®ã¯ããŒã³äœæãmake ãã¡ã€ã«ã®å®è¡ããã«ããšã€ã³ã¹ããŒã«ã®ãšã©ãŒã®ä¿®æ£ã«åœ¹ç«ã€ StackOverflow ã®æ€çŽ¢ã¯ãããŸããã OSçšã®ã€ã¡ãŒãžãããŠã³ããŒãããããã«ã¯ãªãã¯ããã ãã§ã€ã³ã¹ããŒã«ãéå§ã§ããŸãã ããã§ã¯ãããã»ã¹ãç°¡åã«èŠãŠãããŸãããã
ããã«ãŒãã¹ã¯ãããã®ã€ã³ã¹ããŒã«
Docker Desktop 㯠Mac ãš Windows ã§å©çšã§ããŸãã Dockerãã¹ã¯ãããã®ããŒã ããŒãžã«ç§»åããOSãéžæããŸãã

ããŠã³ããŒããå®äºããããç»åãããã«ã¯ãªãã¯ããæç€ºã«åŸã£ãŠDockerãã¹ã¯ããããã€ã³ã¹ããŒã«ããŸãã ç¹å®ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãžã®ã€ã³ã¹ããŒã«ã®è©³çްã«ã€ããŠã¯ã以äžã®ãªã³ã¯ãã¯ãªãã¯ããŠãã ããã
- Macã«ããã«ãŒãã¹ã¯ããããã€ã³ã¹ããŒã«ãã
- Docker Desktop on Windows ã®ã€ã³ã¹ããŒã«
Docker Desktop UI ã®æŠèŠ
Docker DesktopãããŠã³ããŒãããŠã€ã³ã¹ããŒã«ããã¯ãžã©ã®ã¢ã€ã³ã³ãå®å®ããããæºåã¯å®äºã§ãã ã䜿ãã®ãã·ã³ã§ Docker Desktop ãå®è¡ãããŠããŸãã
ããã·ã¥ããŒã
ããã§ã¯ãDockerããã·ã¥ããŒããéããŠèŠãŠã¿ãŸãããã
Dockerã¢ã€ã³ã³ãã¯ãªãã¯ããããããããŠã³ã¡ãã¥ãŒãã[ãã¹ã¯ããã]ãéžæããŸãã

次ã®ãŠã£ã³ããŠãéããŸãã

ã芧ã®ãšãããçŸæç¹ã§ã¯å®è¡äžã®ã³ã³ãããŒã¯ãããŸããã ããã«ä¿®æ£ããŸãããä»ã®ãšãããããã·ã¥ããŒãã®ç°¡åãªãã¢ãŒãèŠãŠã¿ãŸãããã
ããã«ãŒIDã§ãã°ã€ã³
æåã«ããããã®ã¯ãDockerIDã§ãã°ã€ã³ããããšã§ãã ãŸã ãæã¡ã§ãªãå Žåã¯ã Docker Hub ã«ã¢ã¯ã»ã¹ããŠãµã€ã³ã¢ããããŠãã ããã ã©ãããåŸ ã¡ãŸãã 😁
ããŠãããã·ã¥ããŒãã®å³äžé ã«ã[ãµã€ã³ã€ã³]ãã¿ã³ã衚瀺ãããŸãã ãããã¯ãªãã¯ããŠãDocker IDãšãã¹ã¯ãŒããå ¥åããŸãã 代ããã« Docker ID ã衚瀺ãããŠããå Žåã¯ãæ¢ã«ãã°ã€ã³ããŠããŸãã
èšå®

次ã«ãDockerãã¹ã¯ãããã§æ§æã§ããèšå®ãèŠãŠã¿ãŸãããã ãŠã£ã³ããŠã®å³äžé ã«ããèšå®ã¢ã€ã³ã³ãã¯ãªãã¯ãããšã[èšå®]ç»é¢ã衚瀺ãããŸãã
å šè¬
ãã®ã¿ãã®äžã«ã¯ããã·ã³ãžã®ãã°ã€ã³æã® Docker Desktop ã®èµ·åãæŽæ°ããã°ã©ã ã®èªåãã§ãã¯ãããã¯ã¢ãããžã® Docker Desktop VM ã®çµã¿èŸŒã¿ãDocker Desktop ã䜿çšçµ±èšã Docker ã«éä¿¡ãããã©ãããªã©ã®äžè¬çãªèšå®ã衚瀺ãããŸãã
ãããã®ããã©ã«ãèšå®ã¯åé¡ãããŸããã é«åºŠãªã€ã¡ãŒãžãã«ããå®è¡ããŠããŠãäœæ¥ã€ã¡ãŒãžãããã¯ã¢ããããå¿ èŠããªãéããå®éã«å€æŽããå¿ èŠã¯ãããŸããã ãŸãã¯ãDockerãã¹ã¯ããããèµ·åããã¿ã€ãã³ã°ããã现ããå¶åŸ¡ããå¿ èŠããããŸãã
ãªãœãŒã¹
次ã«ã[ãªãœãŒã¹] ã¿ããèŠãŠã¿ãŸãããã ãã®ã¿ããšãã®ãµãã¿ãã§ã¯ãDocker ç°å¢ã«å²ãåœãŠããããªãœãŒã¹ãå¶åŸ¡ã§ããŸãã ãããã®ããã©ã«ãèšå®ã¯ãéå§ããã®ã«ååã§ãã 倿°ã®ã€ã¡ãŒãžãæ§ç¯ããããäžåºŠã«å€æ°ã®ã³ã³ãããŒãå®è¡ãããããå Žåã¯ãCPUãã¡ã¢ãªãRAMã®æ°ãå¢ããããšããå§ãããŸãã ãããã®èšå®ã®è©³çްã«ã€ããŠã¯ã ããã¥ã¡ã³ããåç §ããŠãã ããã
Docker Engine
Dockerãšã³ãžã³ã®å®è¡æ¹æ³ã«ããã«é«åºŠãªå€æŽãå ããå Žåã¯ããããã¿ãã§ãã Docker Engine ããŒã¢ã³ã¯ãLinux ã·ã¹ãã äžã«ãã daemon.json ãã¡ã€ã« /etc/docker/daemon.json ã䜿çšããŠæ§æãããŸãã ãã ããDockerãã¹ã¯ãããã䜿çšããå Žåã¯ãæäŸãããŠããããã¹ãé åã«æ§æèšå®ã远å ããŸãã ãããã®èšå®ã¯ãDocker Desktop ã§äœ¿çšããã Docker ãšã³ãžã³ã«æž¡ãããŸãã 䜿çšå¯èœãªãã¹ãŠã®æ§æã«ã€ããŠã¯ã ããã¥ã¡ã³ããåç
§ããŠãã ããã
ã³ãã³ãã©ã€ã³
CLI ã®å®éšçãªæ©èœã®ãªã³ãšãªãã¯ãã¹ã€ãããåãæ¿ããã®ãšåããããç°¡åã§ãã ãããã®æ©èœã¯ããã¹ããšãã£ãŒãããã¯ã®ã¿ãç®çãšããŠããŸãã ãããã£ãŠãçç£ã®ããã«ãããã«äŸåããªãã§ãã ããã ãããã¯ãå°æ¥ã®ãã«ãã§å€æŽãŸãã¯åé€ãããå¯èœæ§ããããŸãã
ãã«ãã«å«ãŸããå®éšçãªæ©èœã®è©³çްã«ã€ããŠã¯ã ãã®ããã¥ã¡ã³ã ããŒãžãåç §ããŠãã ããã
Kubernetes
Docker Desktop ã«ã¯ã¹ã¿ã³ãã¢ãã³ã® Kubernetes ãµãŒããŒãšã¯ã©ã€ã¢ã³ããä»å±ããŠãããDocker CLI ãšçµ±åãããŠããŸãã ãã®ã¿ãã§ã¯ããã® Kubernetes ãæå¹ãŸãã¯ç¡å¹ã«ã§ããŸãã ãã® Kubernetes ã®ã€ã³ã¹ã¿ã³ã¹ã¯æ§æã§ããã1 ã€ã®åäžããŒã ã¯ã©ã¹ã¿ãŒãä»å±ããŠããŸãã
Kubernetes ãµãŒããŒã¯ Docker ã³ã³ãããŒå ã§å®è¡ãããããŒã«ã« ãã¹ãã®ã¿ãç®çãšããŠããŸãã Kubernetes ã®ãµããŒããæå¹ã«ãªã£ãŠããå Žåã¯ãã¯ãŒã¯ããŒãã䞊è¡ããŠãKubernetesãSwarmãããã³ã¹ã¿ã³ãã¢ãã³ ã³ã³ãããŒãšããŠãããã€ã§ããŸãã Kubernetes ãµãŒããŒãæå¹ãŸãã¯ç¡å¹ã«ããŠããä»ã®ã¯ãŒã¯ããŒãã«ã¯åœ±é¿ããŸããã
ãã©ãã«ã·ã¥ãŒãã£ã³ã°
ãã©ãã«ã·ã¥ãŒãã£ã³ã°ç»é¢ã«ç§»ããŸãããã ãŠã£ã³ããŠã®å³äžé ã«ãããã¢ã€ã³ã³ãã¯ãªãã¯ãããšã次ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°ç»é¢ã衚瀺ãããŸãã

ããã§ãDockerãã¹ã¯ãããã®åèµ·åã蚺æã®å®è¡ãæ©èœã®ãªã»ãããããã³Dockerãã¹ã¯ãããã®ã¢ã³ã€ã³ã¹ããŒã«ãè¡ãããšãã§ããŸãã
ã€ã¡ãŒãžã®æ§ç¯ãšã³ã³ãããŒã®å®è¡
Docker Desktop ãã€ã³ã¹ããŒã«ãããUI ã®æŠèŠãããã£ãã®ã§ãå®è¡ã㊠Hub ã«åºè·ã§ãã Docker ã€ã¡ãŒãžãäœæããŸãããã
Docker ã¯ãã·ã¹ãã äžã§ããŒã¢ã³ãšããŠå®è¡ããããšã³ãžã³ãšãããŒã¢ã³ã«ã³ãã³ããéä¿¡ããŠã€ã¡ãŒãžãšã³ã³ãããŒããã«ããåºè·ãå®è¡ãã CLI ã® 2 ã€ã®äž»èŠã³ã³ããŒãã³ãã§æ§æãããŠããŸãã
ãã®èšäºã§ã¯ã䞻㫠CLI ãä»ã㊠Docker ãšå¯Ÿè©±ããŸãã
ã€ã¡ãŒãžãšã³ã³ããã®éã
ã³ã³ããã¯ãä»ã®ããã»ã¹ãšåæ§ã«ãã·ã¹ãã äžã§å®è¡ãããŠããããã»ã¹ã§ãã ãã ãã"ã³ã³ãããŒ" ããã»ã¹ãš "éåžžã®" ããã»ã¹ã®éãã¯ãã³ã³ãã㌠ããã»ã¹ããµã³ãããã¯ã¹åãããŠããããã·ã¹ãã äžã®ä»ã®ãªãœãŒã¹ããåé¢ãããŠããããšã§ããÂ
ãã®åé¢ã®äž»èŠãªéšåã®1ã€ã¯ãã¡ã€ã«ã·ã¹ãã ã§ãã åã³ã³ãããŒã«ã¯ãDocker ã€ã¡ãŒãžããäœæãããç¬èªã®ãã©ã€ããŒã ãã¡ã€ã« ã·ã¹ãã ãäžããããŸãã ãã®Dockerã€ã¡ãŒãžã¯ãã³ãŒããã©ã€ãã©ãªãæ§æãã¡ã€ã«ãç°å¢å€æ°ãã©ã³ã¿ã€ã ãªã©ãããã»ã¹ãå®è¡ããããã«ãã¹ãŠãããã±ãŒãžåãããŠããå Žæã§ãã
ããã«ãŒã€ã¡ãŒãžã®äœæ
ãã¢ã³ã¹ãã¬ãŒã·ã§ã³ã®ç®çã§äœ¿çšããå°ããªããŒã.jsã¢ããªã±ãŒã·ã§ã³ããŸãšããŸããããã©ã®Webã¢ããªã±ãŒã·ã§ã³ãããããã説æããã®ãšåãååã«åŸããŸãã ç¬èªã®ã¢ããªã±ãŒã·ã§ã³ãèªç±ã«äœ¿çšããŠããã©ããŒããŠãã ããã
ãŸããGitHub ããã¢ããªã±ãŒã·ã§ã³ãè€è£œããŸãããã
$ git clone git@github.com:pmckeetx/projectz.git
ä»»æã®ããã¹ããšãã£ã¿ã§ãããžã§ã¯ããéããŸãã ã¢ããªã±ãŒã·ã§ã³ã React ã§èšè¿°ããã UI ãš.js Node.jsããã³ Express ã§èšè¿°ãããããã¯ãšã³ã ãµãŒãã¹ã§æ§æãããŠããããšãããããŸãã

äŸåé¢ä¿ãã€ã³ã¹ããŒã«ããã¢ããªã±ãŒã·ã§ã³ãããŒã«ã«ã§å®è¡ããŠããã¹ãŠãæ©èœããŠããããšã確èªããŸãããã
ãæ°ã«å
¥ãã®ã¿ãŒããã« cd ãéãããããžã§ã¯ãã®ã«ãŒããã£ã¬ã¯ããªã«ç§»åããŸãã
$ cdãµãŒãã¹
$ npm ã€ã³ã¹ããŒã«Â
次ã«ãUI ã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŸãããã
$ cd ../ui
$ npm ã€ã³ã¹ããŒã«
ãŸããããžã§ã¯ã services ãå§ããŸãããã æ°ããã¿ãŒããã«ãŠã£ã³ããŠãéã cd ããµãŒãã¹ãã£ã¬ã¯ããªã«ç§»åããŸãã ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããã«ã¯ã次ã®ã³ãã³ããå®è¡ããŸãã
$ npm å®è¡éå§
å ã®ã¿ãŒããã« ãŠã£ã³ããŠã§ãUI ãèµ·åããŸãã UI ãèµ·åããã«ã¯ã次ã®ã³ãã³ããå®è¡ããŸãã
$ npm å®è¡éå§
ãã©ãŠã¶ãŠã£ã³ããŠãèªåçã«éããªãå Žåã¯ããæ°ã«å ¥ãã®ãã©ãŠã¶ãèµ·åã㊠http://localhost:3000/ ã«ç§»åããŸã
次ã®ç»é¢ã衚瀺ãããŸãã

ãããžã§ã¯ãã®äžèЧã衚瀺ãããªãå ŽåããŸãã¯ãšã©ãŒ ã¡ãã»ãŒãžã衚瀺ãããå Žåã¯ã services ãããžã§ã¯ããå®è¡ãããŠããããšã確èªããŠãã ããã
ããŠãçŽ æŽããããç§ãã¡ã¯ãã¹ãŠãã»ããã¢ããããŠå®è¡ããŸããã
ããã«ãŒãã¡ã€ã«
ã€ã¡ãŒãžããã«ãããåã«ããµãŒãã¹ ã€ã¡ãŒãžã®ãã«ãã«äœ¿çšãã Dockerfile ãç°¡åã«èŠãŠã¿ãŸãããã
ããã¹ã ãšãã£ã¿ãŒã§ããµãŒãã¹ ãããžã§ã¯ããéããŸã Dockerfile ã æ¬¡ã®ããã«è¡šç€ºãããŸãã
FROM node:lts
ARG NODE_ENV=production
ENV NODE_ENV $NODE_ENV
WORKDIR /code
ARG PORT=80
ENV PORT $PORT
COPY package.json /code/package.json
COPY package-lock.json /code/package-lock.json
RUN npm ci
COPY . /code
CMD [ "node", "src/server.js" ]
Dockerfile ã¯åºæ¬çã«ãã€ã¡ãŒãžããã«ãããæ¹æ³ã Docker ã«æç€ºããã·ã§ã«ã¹ã¯ãªããã§ãã
FROM node:lts
ãã¡ã€ã«ã®æåã®è¡ã¯ãããŒã.jsã®é·æãµããŒããåºæ¬ã€ã¡ãŒãžãšããŠäœ¿çšããããšãDockerã«äŒããŠããŸãã
ARG NODE_ENV=production
ENV NODE_ENV $NODE_ENV
次ã«ããã«ãåŒæ°ãäœæããããã©ã«ãå€ããproductionãã«èšå®ããŠããã ç°å¢å€æ° ã ãã«ãåŒæ° ã§ NODE_ENV èšå®ãããå€ã«èšå®ããŸã NODE_ENV ã
WORKDIR /code
次ã«ããšããååã® code ãã£ã¬ã¯ããªãäœæããããã äœæ¥ãã£ã¬ã¯ããªãšããŠäœ¿çšããããã«Dockerã«æç€ºããŸãã ãã®ãã£ã¬ã¯ããªã§ã¯ã次ã®ã³ãã³ãCOPYRUNãšã³ãã³ããå®è¡ãããŸãã
ARG PORT=80
ENV PORT $PORT
ããã§ã¯ãå¥ã®ãã«ãåŒæ°ãäœæããå€ãšããŠ80ãå²ãåœãŠãŠããŸãã æ¬¡ã«ããã®ãã«ãåŒæ°ã䜿çšã㊠PORT ç°å¢å€æ°ãèšå®ããŸãã
COPY package.json /code/package.json
COPY package-lock.json /code/package-lock.json
RUN npm ci
ãããã® COPY ã³ãã³ãã¯ã package*.json ãã¡ã€ã«ãã€ã¡ãŒãžã«è¿œå ããããŒã.jsäŸåé¢ä¿ãã€ã³ã¹ããŒã«ããããã«äœ¿çšãããŸã npm ci ã
COPY . /code
次ã«ãã¢ããªã±ãŒã·ã§ã³ ã³ãŒããã€ã¡ãŒãžã«ã³ããŒããŸãã
ã¯ã€ãã¯ããŒã:ããã«ãŒãã¡ã€ã«ã¯äžããäžã«å®è¡ãããŸãã åã³ãã³ãã¯ãæåã«ãã£ãã·ã¥ã«å¯ŸããŠãã§ãã¯ãããŸãã ãã£ãã·ã¥ã§äœã倿ŽãããŠããªãå ŽåãDocker ã¯ã³ãã³ããå®è¡ãã代ããã«ãã£ãã·ã¥ã䜿çšããŸãã äžæ¹ãäœãã倿Žãããå Žåããã£ãã·ã¥ã¯ç¡å¹ã«ãªããåŸç¶ã®ãã¹ãŠã®ãã£ãã·ã¥ã¬ã€ã€ãŒãç¡å¹ã«ãªãã察å¿ããã³ãã³ããå®è¡ãããŸãã ãããã£ãŠãå¯èœãªéãæéã®ãã«ããè¡ãããã¹ãŠã®ã€ã¡ãŒãžãã«ãã§ãã£ãã·ã¥å šäœãç¡å¹ã«ããããªãå Žåã¯ãæã倿Žãããã³ãã³ããDockerfileã®ã§ããã ãäžçªäžã«é 眮ããå¿ èŠããããŸãã
ããšãã°ããœãŒã¹ã³ãŒãã¯ãã¡ã€ã«ã«ã¢ãžã¥ãŒã«package.jsonã远å ãããããã¯ããã«é »ç¹ã«å€æŽãããããããœãŒã¹ã³ãŒããã³ããŒããåã«andãã¡ã€ã«ãã€ã¡ãŒãžã«ã³ããŒããŸããpackage.json package-lock.jsonÂ
CMD [ "node", "src/server.js" ]
Dockerfile ã®æåŸã®è¡ã¯ãã€ã¡ãŒãžã®èµ·åæã«å®è¡ããã³ãã³ãã Docker ã«æç€ºããŸãã ãã®å Žåãæ¬¡ã®ã³ãã³ããå®è¡ããŸãã node src/server.js
ã€ã¡ãŒãžã®ãã«ã
ããã§ãããã«ãŒãã¡ã€ã«ãçè§£ããŸããã Docker ã«ã€ã¡ãŒãžããã«ããããŸãããã
ãµãŒãã¹ ãã£ã¬ã¯ããªã®ã«ãŒãã§ã次ã®ã³ãã³ããå®è¡ããŸãã
$ docker build --tag projectz-svc .
ããã«ãããDockerã¯ãçŸåšã®ãã£ã¬ã¯ããªã«ããã䜿çšã㊠Dockerfile ã€ã¡ãŒãžããã«ããããã®ã€ã¡ãŒãžã«ã¿ã°ãä»ããããã«æç€ºãããŸãã projectz-svc
Docker ãã€ã¡ãŒãžã®ãã«ããå®äºãããšãåæ§ã®åºåã衚瀺ãããŸãã
922d1db89268 ã®æ§ç¯ã«æåããŸãã
ãããžã§ã¯ãz-svcã®ã¿ã°ãæ£åžžã«èšå®ãããŸãã
次ã«ãã³ã³ãããŒãå®è¡ããŠãã³ã³ãããŒã«æ¥ç¶ã§ããããšã確èªããŸãããã æ¬¡ã®ã³ãã³ããå®è¡ããŠã€ã¡ãŒãžãèµ·åããããŒã 8080 ãã³ã³ãããŒå ã®ããŒã 80 ã«æ¥ç¶ããŸãã
$ docker run -it --rm --name services -p 8080:80 projectz-svc
ã¿ãŒããã«ã«æ¬¡ã®ããã«åºåãããŸãã
ããŒãã§ãªãã¹ã³:80
ãã©ãŠã¶ãéããhttp://localhost:8080/services/projects ã«ç§»åããŸã
ãã¹ãŠãããŸãããã°ããã©ãŠã¶ âGET /services/projectsâ ã«è¿ãããã¿ãŒããã«ã«å°å·ãããäžé£ã®jsonã衚瀺ãããŸãã

ããã³ããšã³ã UI ã«ã€ããŠãåãããšãããŸãããã çŸæç¹ã§ã¯ Dockerfile ã«ã€ããŠã¯èª¬æããŸããããã¯ã©ãŠããžã®ããã·ã¥ã«ã€ããŠã¯åæ€èšããŸãã
ã¿ãŒããã«ã§UIãœãŒã¹ãã£ã¬ã¯ããªã«ç§»åããæ¬¡ã®ã³ãã³ããå®è¡ããŸãã
$ docker build --tag projectz-ui .
$ docker run -it --rm --name ui -p 3000:80 projectz-ui
ããäžåºŠããæ°ã«å ¥ãã®ãã©ãŠã¶ãéããŠãhttp://localhost:3000/ ã«ç§»åããŸã

ãããïŒïŒïŒ
ããŠããã®èšäºã®åé ã§ãDocker Desktop UI ã«ã€ããŠèª¬æããŸããã ãã®æç¹ã§ã¯ãã³ã³ããã¯çšŒåããŠããŸããã§ããã Windowsã®éç¥é å(ãŸãã¯ã·ã¹ãã ãã¬ã€)ãŸãã¯Macã®ã¡ãã¥ãŒããŒã«ããã¯ãžã©ã®ã¢ã€ã³ã³(
)ãã¯ãªãã¯ããŠãDockerããã·ã¥ããŒããéããŸãã
ããã§ã2ã€ã®ã³ã³ãããå®è¡ãããŠããããšãããããŸãã

ããããå®è¡ãããŠããªãå Žåã¯ãã¿ãŒããã«ã§æ¬¡ã®ã³ãã³ããåå®è¡ããŠãã ããã
$ docker run -it --rm --name services -p 8080:80 projectz-svc
$ docker run -it --rm --name ui -p 3000:80 projectz-ui
ç»åã®1ã€ã«ããŠã¹ãåããããšããã¿ã³ã衚瀺ãããŸãã

ãããã®ãã¿ã³ã䜿çšãããšãæ¬¡ã®æäœãå®è¡ã§ããŸãã
- ãã©ãŠã¶ãŒã§éã â ã³ã³ãããŒãããŒããå ¬éããŠããå Žåã¯ããã®ãã¿ã³ãã¯ãªãã¯ããŠãã©ãŠã¶ãŒã§ã¢ããªã±ãŒã·ã§ã³ãéãããšãã§ããŸãã
- CLI âãã®ãã¿ã³ã¯ã¿ãŒããã«ã§å®è¡ãããŸã
docker execã - 忢/éå§ â ã³ã³ãããŒãéå§ããã³åæ¢ã§ããŸãã
- åèµ·å â ã³ã³ãããåèµ·åããããšãã§ããŸãã
- åé€ â ã³ã³ãããåé€ããããšãã§ããŸãã
次ã«ãuiã³ã³ãããã¯ãªãã¯ããŠããã®è©³çްããŒãžã衚瀺ããŸãã

詳现ç»é¢ã§ã¯ãã³ã³ãã㌠ãã°ã®è¡šç€ºãã³ã³ãããŒã®æ€æ»ãCPU 䜿çšçãã¡ã¢ãªäœ¿çšéããã£ã¹ã¯ã®èªã¿åã/æžã蟌ã¿ããããã¯ãŒã¯ I/O ãªã©ã®çµ±èšæ å ±ã®è¡šç€ºãè¡ãããšãã§ããŸãã
Docker-compose
ããã§ã¯ãdocker-composeã䜿çšããŠãããããå°ãç°¡åã«è¡ãæ¹æ³ãèŠãŠã¿ãŸãããã docker-composeã䜿çšãããšãäž¡æ¹ã®ã¢ããªã±ãŒã·ã§ã³ã1ã€ã®ãã¡ã€ã«ã§æ§æãã1ã€ã®ã³ãã³ãã§äž¡æ¹ãèµ·åã§ããŸãã
git ãªããžããªã®ã«ãŒããèŠããšããã¡ã€ã«ã衚瀺ãããŸã docker-compose.yml ã ããã¹ããšãã£ã¿ã§ãã®ãã¡ã€ã«ãéããŠãèŠãŠã¿ãŸãããã
version: "3.7"
services:
ui:
image: projectz-ui
build:
context: ./ui
args:
NODE_ENV: production
REACT_APP_SERVICE_HOST: http://localhost:8080
ports:
- "3000:80"
services:
image: projectz-svc
build:
context: ./services
args:
NODE_ENV: production
PORT: "80"
ports:
- "8080:80"
ãã®ãã¡ã€ã«ã¯ãåã® 2 ã€ã®ã³ãã³ãã«æž¡ãããã¹ãŠã®ãã©ã¡ãŒã¿ãŒãçµã¿åãããŠããµãŒãã¹ããã«ãããŠå®è¡ããŸãã
ãŸã è¡ã£ãŠããªãå Žåã¯ã以åã«éå§ãããµãŒãã¹ãšUIã³ã³ããã忢ããŠåé€ããŸãã
$ ããã«ãŒåæ¢ãµãŒãã¹
$ ããã«ãŒã¹ãããUI
ããã§ã¯ãdocker-composeã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸãããã git ãªããžããªã®ã«ãŒãã«ããããšã確èªããæ¬¡ã®ã³ãã³ããå®è¡ããŸãã
$ docker-compose up --build
Docker-composeã¯ã€ã¡ãŒãžããã«ããããããã«ã¿ã°ãä»ããŸãã ãããå®äºãããšãcompose 㯠UI ã¢ããªã±ãŒã·ã§ã³çšãšãµãŒãã¹ ã¢ããªã±ãŒã·ã§ã³çšã® 2 ã€ã®ã³ã³ãããŒãèµ·åããŸãã
Dockerãã¹ã¯ãããããã·ã¥ããŒãç»é¢ãéããšãå®è¡ãããŠãã projectz ããšãããããŸãã
ãå±éãã projectz ãšã2ã€ã®ã³ã³ãããå®è¡ãããŠããããšãããããŸãã

ããããã®ã³ã³ãããã¯ãªãã¯ãããšã以åãšåã詳现ç»é¢ã«ã¢ã¯ã»ã¹ã§ããŸãã
Docker-composeã¯ã以åã®ããã«åå人 docker build ãš docker run ã³ãã³ããå®è¡ããããã倧å¹
ã«æ¹åãããŠããŸãã ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŠããæ°çŸã®ãµãŒãã¹ãŸãã¯æ°çŸã®ãã€ã¯ããµãŒãã¹ããããåã
ã®ã³ã³ãããŒãäžåºŠã« 1 ã€ãã€èµ·åããå¿
èŠããããšæ³åããŠã¿ãŠãã ããã docker-composeã䜿çšãããšã1ã€ã®ã³ãã³ãã§ã¢ããªã±ãŒã·ã§ã³ãæ§æããåŒæ°ãäœæãããã¹ãŠã®ãµãŒãã¹ãéå§ã§ããŸãã
次ã®ã¹ããã
Docker ãã¹ã¯ãããã®äœ¿ç𿹿³ã®è©³çްã«ã€ããŠã¯ã次ã®ãªãœãŒã¹ãåç §ããŠãã ãããÂ
ãã®ã·ãªãŒãºã®ããŒã II ã§ã¯ãDocker Hub ã䜿çšããŠã€ã¡ãŒãžãæ§ç¯ããèªåãã¹ããå®è¡ããã€ã¡ãŒãžãã¯ã©ãŠãã«ããã·ã¥ããŸãã
Â