ãã®èšäºã¯ããªãŒãã³ãœãŒã¹ã®ã³ã©ãã¬ãŒã·ã§ã³ã®çµæã§ãã äž ããã¯ããŒããŒãã§ã¹ã2022ããããžã§ã¯ãã¯Black Forest DockerããŒãã¢ããã°ã«ãŒãã§çºè¡šãããããŒãã¢ããã°ã«ãŒãã®ã¡ã³ããŒãä»ã®ããã¯ããŒããŒãã§ã¹ãã®è²¢ç®è ããè²¢ç®ãåããŸããã GitHub ãªããžããªã®ã»ãšãã©ãã¹ãŠã®ã³ãŒãã¯ãStefan RufãHimanshu KandpalãSreekesh Iyer ã«ãã£ãŠæžãããŠããŸãã
MEAN ã¹ã¿ãã¯ã¯ãWeb ã¢ããªã±ãŒã·ã§ã³ã®éçºã«äœ¿çšããããæ¥æé·ããŠãããªãŒãã³ãœãŒã¹ã® JavaScript ã¹ã¿ãã¯ã§ãã MEANã¯ã MongoDBã Express.jsãå ç¢ãªãã¯ãããžãŒã®å€æ§ãªã³ã¬ã¯ã·ã§ã³ã§ãã è§åºŠãããã³ ããŒã.js â ã¹ã±ãŒã©ãã«ãªWebã¢ããªã±ãŒã·ã§ã³ã®éçºçšãÂ
ã¹ã¿ãã¯ã¯ãéçºããã»ã¹å šäœã§åäžã®èšèªã§äœæ¥ã§ããå€ãã®æè»æ§ãšã¹ã±ãŒã©ããªãã£ãæäŸãããããWebéçºè ã«äººæ°ã®ããéžæè¢ã§ãã NodeãExpressãAngularã¯ã Stack Overflowã®2022幎éçºè 調æ»ã§äººæ°ã®ãããã¬ãŒã ã¯ãŒã¯ãŸãã¯ãã¯ãããžãŒãšããŠãããã®åº§ãç²åŸããŸããã
ãã®èšäºã§ã¯ãäŸãšããŠã€ãã³ãæçš¿ã¢ããªã䜿çšã㊠MEAN ã¹ã¿ãã¯ãã©ã®ããã«æ©èœãããã«ã€ããŠèª¬æããŸãã

MEAN ã¹ã¿ãã¯ã¯ã©ã®ããã«æ©èœããŸãã?
MEAN ã¯ã次㮠4 ã€ã®ã³ã³ããŒãã³ãã§æ§æãããŸãã
- MongoDB â NoSQL ããŒã¿ããŒã¹Â
- ExpressJS â NodeJS çšã®ããã¯ãšã³ããŠã§ãã¢ããªã±ãŒã·ã§ã³ãã¬ãŒã ã¯ãŒã¯
- Angular â åçãªã·ã³ã°ã«ããŒãžã®ãŠã§ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã® JavaScript ããŒã¹ã®ããã³ããšã³ããŠã§ãéçºãã¬ãŒã ã¯ãŒã¯
- NodeJS â ãšãããããã©ãŠã¶ã®å€éšã§ JavaScript ã³ãŒããå®è¡ã§ããããã«ãã JavaScript ã©ã³ã¿ã€ã ç°å¢
ããã§ã¯ãããŸããŸãªã³ã³ããŒãã³ããã©ã®ããã«é£æºããããç°¡åã«èª¬æããŸãã
- ãŠãŒã¶ãŒã¯ãAngularã³ã³ããŒãã³ãã§æ§ç¯ãããWebãã©ãŠã¶ãŒãä»ããŠããã³ããšã³ããšå¯Ÿè©±ããŸããÂ
- ããã¯ãšã³ããµãŒããŒã¯ãNodeJSäžã§å®è¡ãããŠããExpressJSãä»ããŠããã³ããšã³ãã³ã³ãã³ããé ä¿¡ããŸãã
- ããŒã¿ã¯ãããã³ããšã³ãã«æ»ãåã«MongoDBããŒã¿ããŒã¹ãããã§ãããããŸãã ããã§ã¯ãã¢ããªã±ãŒã·ã§ã³ããŠãŒã¶ãŒã«è¡šç€ºããŸãã
- ããŒã¿å€æŽèŠæ±ãåŒãèµ·ãã察話ã¯ãã¹ãŠãããŒãããŒã¹ã® Express ãµãŒããŒã«éä¿¡ãããŸãã
ãªãMEANã¹ã¿ãã¯ã¯ããã»ã©äººæ°ãããã®ã§ãã?
MEAN ã¹ã¿ãã¯ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ã€ã¢ã³ãåŽãšãµãŒããŒåŽã®äž¡æ¹ã«åãèšèªã䜿çšããããã«ã¹ã¿ãã¯ã® JavaScript Web ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«ãã䜿çšãããŸãã ãã®ã¢ãããŒãã«ãããéçºãããå¹ççã§äžè²«æ§ã®ãããã®ã«ãªããéçºè ã¯ã¢ããªã±ãŒã·ã§ã³ã®ããã³ããšã³ããšããã¯ãšã³ãã®äž¡æ¹ã§äœæ¥ãããããªããŸãã
MEAN ã¹ã¿ãã¯ã¯ã次ã®ãããªããã€ãã®çç±ã§äººæ°ããããŸãã
- ç°¡åãªåŠç¿æ²ç· -- JavaScript ãš JSON ãäœ¿ãæ £ããŠããã°ãç°¡åã«å§ããããšãã§ããã MEANã®æ§é ã«ãããJavaScriptãšJSONã ãã§3å±€ã¢ãŒããã¯ãã£(ããã³ããšã³ããããã¯ãšã³ããããŒã¿ããŒã¹)ãç°¡åã«æ§ç¯ã§ããŸãã
- ã¢ãã«ãã¥ãŒã¢ãŒããã¯ã㣠â MEAN㯠ã¢ãã«ãã¥ãŒã³ã³ãããŒã©ã¢ãŒããã¯ãã£ããµããŒããã ã¹ã ãŒãºã§ã·ãŒã ã¬ã¹ãªéçºããã»ã¹ããµããŒãããŸãã
- ã³ã³ããã¹ãã®åãæ¿ããåæž â MEAN ã¯ããã³ããšã³ããšããã¯ãšã³ãã®äž¡æ¹ã®éçºã« JavaScript ã䜿çšãããããéçºè ã¯èšèªã®åãæ¿ãã«ã€ããŠå¿é ããå¿ èŠã¯ãããŸããã ãã®æ©èœã«ãããéçºå¹çãåäžããŸãã
- ãªãŒãã³ãœãŒã¹ãšæŽ»çºãªã³ãã¥ããã£ãµããŒã â MEAN ã¹ã¿ãã¯ã¯çŽç²ã«ãªãŒãã³ãœãŒã¹ã§ãã ãã¹ãŠã®éçºè ã¯ãå ç¢ãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã ãã®ãã¬ãŒã ã¯ãŒã¯ã¯ãã³ãŒãã£ã³ã°å¹çãåäžãããããè¿ éãªã¢ããªéçºãä¿é²ããŸãã
ã€ãã³ãæçš¿ã¢ããªã®å®è¡
ã€ãã³ãæçš¿ã¢ããªã®äž»ãªã³ã³ããŒãã³ãã¯æ¬¡ã®ãšããã§ãã
- ã¢ã³ãŽãã
- ãšã¯ã¹ãã¬ã¹.js
- è§åºŠ
- ããŒã.js
- Docker Desktop
ã€ãã³ãæçš¿ã¢ããªã®ãããã€ã¯è¿ éãªããã»ã¹ã§ãã ãŸãã ãªããžããªã®ã¯ããŒã³ãäœæãã ã¯ã©ã€ã¢ã³ããšããã¯ãšã³ããèšå®ããŠãããã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸããÂ
次ã«ãæ¬¡ã®æé ãå®è¡ããŸãã
git clone https://github.com/dockersamples/events
cd events/backend
npm install
npm run dev
ã€ãã³ãæçš¿ã¢ããªã®å€§ãŸããªæµã
ã€ãã³ãæçš¿ã¢ããªãä»ããæ å ±ã®æµããå³ 1 ã«ç€ºããæ¬¡ã®æé ã§èª¬æããŸãã

- ãŠãŒã¶ãŒããã©ãŠã¶ã§ã€ãã³ãæçš¿ã¢ããªã®Webãµã€ãã«ã¢ã¯ã»ã¹ããŸãã
- ããã³ããšã³ããã¬ãŒã ã¯ãŒã¯ã§ããAngularJSã¯ãå¿ èŠãªHTMLãCSSãããã³JavaScriptãã¡ã€ã«ããµãŒããŒããååŸããWebãµã€ãã®åæãã¥ãŒãã¬ã³ããªã³ã°ããŸãã
- ãŠãŒã¶ãŒãã€ãã³ãã®ãªã¹ãã衚瀺ããããæ°ããã€ãã³ããäœæãããããå ŽåãAngularJSã¯ããã¯ãšã³ããµãŒããŒã«HTTPãªã¯ãšã¹ããéä¿¡ããŸãã
- ããã¯ãšã³ã Web ãã¬ãŒã ã¯ãŒã¯ã§ãã Express.js ã¯ãèŠæ±ãåä¿¡ããŠåŠçããŸãã ãã®æé ã«ã¯ãMongoDB ããŒã¿ããŒã¹ãšå¯Ÿè©±ããŠããŒã¿ãååŸãŸãã¯æ ŒçŽããããã³ããšã³ããããŒã¿ã«ã¢ã¯ã»ã¹ããããã® API ãæäŸããããšãå«ãŸããŸãã
- ããã¯ãšã³ã ãµãŒããŒã¯ããã³ããšã³ãã«å¿çãéä¿¡ããAngularJS ã¯ãããåä¿¡ããŠãã¥ãŒã®æŽæ°ã«äœ¿çšããŸãã
- ãŠãŒã¶ãŒãæ°ããã€ãã³ããäœæãããšãAngularJS ã¯ããã¯ãšã³ã ãµãŒããŒã« POST èŠæ±ãéä¿¡ããExpress.js ã¯ãããåä¿¡ããŠåŠçããŸãã ãšã¯ã¹ãã¬ã¹.js æ°ããã€ãã³ãã MongoDB ããŒã¿ããŒã¹ã«ä¿åããŸãã
- ããã¯ãšã³ããµãŒããŒã¯ããã³ããšã³ãã«ç¢ºèªå¿çãéä¿¡ããAngularJSã¯ãããåä¿¡ããŠãã¥ãŒãæŽæ°ããæ°ããã€ãã³ãã衚瀺ããããã«äœ¿çšããŸãã
- JavaScript ã©ã³ã¿ã€ã ã§ãã Node.js ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãµãŒããŒåŽããžãã¯ãåŠçãããªã¢ã«ã¿ã€ã ã®æŽæ°ãå¯èœã«ããŸãã ããã«ã¯ãExpress.js ãµãŒããŒã®å®è¡ãWebSocket ã䜿çšãããªã¢ã«ã¿ã€ã æŽæ°ã®åŠçãããã³ãã®ä»ã®ãµãŒããŒåŽã¿ã¹ã¯ã®åŠçãå«ãŸããŸãã
ãã®åŸããã©ãŠã¶ã® http://localhost:80 ã§ã€ãã³ãæçš¿ã«ã¢ã¯ã»ã¹ã§ããŸã(å³2)ã

[ æ°ããã€ãã³ãã®è¿œå ] ãéžæããŠè©³çްã远å ããŸã (å³ 3)ã

ã€ãã³ãã®è©³çްãä¿åããŠãæçµçµæã確èªããŸã(å³4)ã

MEAN ã¹ã¿ãã¯ãã³ã³ããåããçç±
MEAN ã¹ã¿ãã¯ãã³ã³ãããŒåããããšã§ãã¢ããªã±ãŒã·ã§ã³ã®äžè²«æ§ããããç§»æ€æ§ãé«ããç°¡åã«æ¡åŒµã§ããç°å¢ãå®çŸããã»ãã¥ãªãã£ãšãããã€ã®å®¹æããåäžããŸãã MEAN ã¹ã¿ãã¯ãã³ã³ãããŒåããããšã«ã¯ã次ã®ãããªããã€ãã®å©ç¹ããããŸãã
- äžè²«æ§ïŒ ã³ã³ãããŒåã«ãããã¢ããªã±ãŒã·ã§ã³ã®ç°å¢ãããŸããŸãªéçºç°å¢ããã¹ãç°å¢ãããã³éçšç°å¢ã§äžè²«ããŠããããšãä¿èšŒãããŸãã ãã®ã¢ãããŒãã«ãããäŸåé¢ä¿ãæ§æã®ããŒãžã§ã³ãç°ãªããªã©ãç°å¢ã®éãããçºçããå¯èœæ§ã®ããåé¡ãæé€ãããŸãã
- ããŒã¿ããªãã£ïŒ ã³ã³ããã¯ããŒã¿ãã«ã«èšèšãããŠãããããç°ãªãç°å¢éã§ç°¡åã«ç§»åã§ããŸãã ãã®æ©èœã«ãããMEAN ã¹ã¿ãã¯ã¢ããªã±ãŒã·ã§ã³ããªã³ãã¬ãã¹ãã¯ã©ãŠããªã©ã®ããŸããŸãªç°å¢ã«ç°¡åã«ãããã€ã§ããŸãã
- éé¢ïŒ ã³ã³ãããŒã¯ãã¢ããªã±ãŒã·ã§ã³ãšãã¹ãç°å¢ã®éã®åé¢ã¬ãã«ãæäŸããŸãã ãããã£ãŠãã¢ããªã±ãŒã·ã§ã³ã¯å¿ èŠãªãªãœãŒã¹ã«ã®ã¿ã¢ã¯ã»ã¹ã§ããåããã¹ãäžã§å®è¡ãããŠããä»ã®ã¢ããªã±ãŒã·ã§ã³ã«å¹²æžããããšã¯ãããŸããã
- æ¡åŒµæ§: ã³ã³ããã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããŒãºã«å¿ããŠç°¡åã«ã¹ã±ãŒã«ã¢ãããŸãã¯ã¹ã±ãŒã«ããŠã³ã§ããããããªãœãŒã¹ã®ããå¹ççãªäœ¿çšãšããã©ãŒãã³ã¹ã®åäžã«ã€ãªãããŸãã
ã€ãã³ãæçš¿ã¢ããªã®ã³ã³ããå
Docker ã¯ãMEAN ã¹ã¿ãã¯ãã³ã³ããåããã®ã«åœ¹ç«ã¡ãã€ãã³ãæçš¿ã¢ããªã±ãŒã·ã§ã³ãã©ã³ã¿ã€ã ãæ§æãããã³ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¬ãã«ã®äŸåé¢ä¿å šäœããã³ãã«ã§ããŸãã ã³ã³ããã«ã¯ãã¯ãã¹ãã©ãããã©ãŒã ã®ãã«ãã¢ãŒããã¯ãã£Webã¢ããªã±ãŒã·ã§ã³ãåºè·ããããã«å¿ èŠãªãã¹ãŠã®ãã®ãå«ãŸããŸããÂ
Docker å ¬åŒã€ã¡ãŒãžã䜿çšããŠãDocker ã³ã³ãããŒå ã§ãã®ã¢ããªãå®è¡ããæ¹æ³ã«ã€ããŠèª¬æããŸãã ãŸãã Dockerãã¹ã¯ããããããŠã³ããŒãã㊠ãã€ã³ã¹ããŒã«ããã»ã¹ãå®äºããå¿ èŠããããŸãã ãã®æé ã«ã¯ãDocker CLIãDocker Composeãããã³ãŠãŒã¶ãŒãã¬ã³ããªãŒãªç®¡ç UI ãå«ãŸããŠãããããããåŸã§åœ¹ç«ã¡ãŸãã
Docker ã¯ã Dockerfile ã䜿çšããŠåã€ã¡ãŒãžã®ã¬ã€ã€ãŒãäœæããŸãã åã¬ã€ã€ãŒã«ã¯ãåºæ¬ã€ã¡ãŒãžã®æšæºæ§æã«èµ·å ããéèŠãªå€æŽãæ ŒçŽãããŸãã æ¬¡ã«ããããžã§ã¯ã ãªããžããªã®ã«ãŒãã«ç©ºã® Dockerfile ãäœæããŸãã
Angularããã³ããšã³ãã®ã³ã³ããå
Angularããã³ããšã³ããã³ã³ããåããããã®ãã«ãã¹ããŒãžDockerfileãæ§ç¯ããŸããÂ
Dockerfile ã¯ãDocker ã³ã³ãã㌠ã€ã¡ãŒãžãã¢ã»ã³ãã«ããããã®æé ãå«ããã¬ãŒã³ããã¹ã ãã¡ã€ã«ã§ãã Dockerãã³ãã³ãã䜿çšããŠã€ã¡ãŒãžããã«ããããšããããã®åœä»€ã docker build èªã¿åãããŠå®è¡ãããæçµçãªã€ã¡ãŒãžãäœæãããŸããÂ
ãã«ãã¹ããŒãž ãã«ãã§ã¯ãDocker ãã«ãã§ã³ã³ãã€ã«ãããã±ãŒãžåãåäœãã¹ãã« 1 ã€ã®åºæ¬ã€ã¡ãŒãžã䜿çšã§ããŸãã å¥ã®ã€ã¡ãŒãžã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã©ã³ã¿ã€ã ãä¿æããŸãã ãã®èšå®ã«ãããæçµçãªã€ã¡ãŒãžã®ã»ãã¥ãªãã£ã匷åããããããããªã³ããçž®å°ãããŸã (éçºããŒã«ããããã° ããŒã«ãå«ãŸããŠããªããã)ãÂ
ã¢ããªã±ãŒã·ã§ã³ã® Dockerfile ãäœæããããã»ã¹ãèŠãŠãããŸãããã ãŸããããã³ããšã³ã ã¢ããªã®ã«ãŒãã«åå Dockerfile ãæã€æ¬¡ã®ç©ºã®ãã¡ã€ã«ãäœæããŸãã
touch Dockerfile
次ã«ãDockerfile ãã¡ã€ã«ã§åºæ¬ã€ã¡ãŒãžãå®çŸ©ããå¿ èŠããããŸãã ããã§ã¯ã ããŒãããã«ãŒå ¬åŒã€ã¡ãŒãžã®å®å®ããLTSããŒãžã§ã³ãéžæããŸããã ãã®ã€ã¡ãŒãžã«ã¯ãNode.js ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããã«å¿ èŠãªãã¹ãŠã®ããŒã«ãšããã±ãŒãžãä»å±ããŠããŸãã
FROM node:lts-alpine AS build
次ã«ãã€ã¡ãŒãžã®ã¢ããªã±ãŒã·ã§ã³ ã³ãŒããæ ŒçŽãããã£ã¬ã¯ããªãäœæããŸãããã ããã¯ãã¢ããªã±ãŒã·ã§ã³ã®äœæ¥ãã£ã¬ã¯ããªãšããŠæ©èœããŸãã
WORKDIR /usr/src/app
æ¬¡ã®æé COPY ã§ã¯ã package.json ãã¹ã ã³ã³ãã¥ãŒã¿ãŒããã³ã³ãã㌠ã€ã¡ãŒãžã« and src ãã¡ã€ã«ãã³ããŒããŸããÂ
ãã®ã³ãã³ã㯠COPY 2 ã€ã®ãã©ã¡ãŒã¿ãŒãåããŸãã 1 ã€ç®ã¯ãã€ã¡ãŒãžã«ã³ããŒãããã¡ã€ã«ã Docker ã«æç€ºããŸãã 2ã€ç®ã¯ããããã®ãã¡ã€ã«ãã³ããŒããå ŽæãDockerã«æç€ºããŸãã ãšããäœæ¥ãã£ã¬ã¯ã㪠/usr/src/appã«ãã¹ãŠãã³ããŒããŸãã
COPY package.json .
COPY package-lock.json .
RUN npm ci
次ã«ããœãŒã¹ã³ãŒããã€ã¡ãŒãžã«è¿œå ããå¿
èŠããããŸãã ãã®ã³ãã³ãã¯ã以åã«ãã¡ã€ã«ã§è¡ã£ã package.json ã®ãšåãããã«äœ¿çšããŸã COPY ãÂ
æèšïŒ Docker ã€ã¡ãŒãžããã«ããããšãã«ã package.json ã¢ããªã±ãŒã·ã§ã³ ã³ãŒããšã¯å¥ã«ãã¡ã€ã«ãã³ããŒããã®ãäžè¬çã§ãã ãã®æé ã«ãããDocker ã¯ã¢ããªã±ãŒã·ã§ã³ ã³ãŒã ã¬ã€ã€ãŒãšã¯å¥ã«node_modulesã¬ã€ã€ãŒããã£ãã·ã¥ã§ãããããDocker ã®ãã«ã ããã»ã¹ã倧å¹
ã«é«éåãããéçºã¯ãŒã¯ãããŒãæ¹åã§ããŸãã
COPY . .
次ã«ãã䜿çšã㊠npm run build ã以äžãã package.jsonãã«ãã¹ã¯ãªãããå®è¡ããŸãã
RUN npm run build
次ã®ã¹ãããã§ã¯ãNginxã€ã¡ãŒãžãããŒã¹ãšããŠäœ¿çšãããã¡ã€ã«ã /etc/nginx ãã£ã¬ã¯ããªã«ã³ããŒãã nginx.conf ãã«ãã®ç¬¬2段éãæå®ããå¿
èŠããããŸãããŸããã³ã³ãã€ã«ããã TypeScript ã³ãŒãããã«ã ã¹ããŒãžãããã£ã¬ã¯ããªã«ã³ããŒããŸã /usr/share/nginx/html ã
FROM nginx:stable-alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=build /usr/src/app/dist/events /usr/share/nginx/html
æåŸã«ããã®åœä»€ã¯ EXPOSE ãã³ã³ãããå®è¡æã«ãªãã¹ã³ããããŒããDockerã«æç€ºããŸãã ããŒãã TCP ãš UDP ã®ã©ã¡ãã§ãªãã¹ã³ããããæå®ã§ããŸãã ãããã³ã«ãæå®ãããŠããªãå Žåã®æ¢å®å€ã¯ TCP ã§ãã
EXPOSE 80
ãããç§ãã¡ã®å®å šãª ããã«ãŒãã¡ã€ã«ã§ã:
# Builder container to compile typescript
FROM node:lts-alpine AS build
WORKDIR /usr/src/app
# Install dependencies
COPY package.json .
COPY package-lock.json .
RUN npm ci
# Copy the application source
COPY . .
# Build typescript
RUN npm run build
FROM nginx:stable-alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=build /usr/src/app/dist/events /usr/share/nginx/html
EXPOSE 80
ããã§ã¯ãã€ã¡ãŒãžãæ§ç¯ããŸãããã docker build äžèšã®ããã«ã³ãã³ããå®è¡ããŸããããã©ã°ã䜿çšããŸã -f Dockerfile ããã®ãã©ã°ã¯ã -f ããã«ãŒãã¡ã€ã«åãæå®ããŸãã "." ã³ãã³ãã¯ãçŸåšã®ãã£ã¬ã¯ããªããã«ã ã³ã³ããã¹ããšããŠäœ¿çšããstdin ãã Dockerfile ãèªã¿åããŸãã -t çµæã®ç»åã«ã¿ã°ãä»ããŸãã
docker build . -f Dockerfile -t events-fe:1
ããŒã.jsããã¯ãšã³ãã®ã³ã³ããå
次ã®ã¹ããããšããŠãããã¯ãšã³ãçšã® Dockerfile ãäœæããããã»ã¹ãèŠãŠãããŸãããã ãŸããããã¯ãšã³ã Node ã¢ããªã®ã«ãŒãã«æ¬¡ã®ç©º Dockerfile ãäœæããŸãã
# Builder container to compile typescript
FROM node:lts-alpine AS build
WORKDIR /usr/src/app
# Install dependencies
COPY package.json .
COPY package-lock.json .
RUN npm ci
# Copy the application source
COPY . .
# Build typescript
RUN npm run build
FROM node:lts-alpine
WORKDIR /app
COPY package.json .
COPY package-lock.json .
COPY .env.production .env
RUN npm ci --production
COPY --from=build /usr/src/app/dist /app
EXPOSE 8000
CMD [ "node", "src/index.js"]
ãã® Dockerfile ã¯ãã³ã³ãããŒåãããç°å¢ã§ TypeScript ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããŠå®è¡ããã®ã«åœ¹ç«ã¡ãéçºè ã¯ã¢ããªã±ãŒã·ã§ã³ãããç°¡åã«ããã±ãŒãžåããŠé åžã§ããŸãã
ãšããååã® buildãã«ã ããã»ã¹ã®æåã®ã¹ããŒãžã¯ãå
¬åŒã® Node .js LTS Alpine Docker ã€ã¡ãŒãžã«åºã¥ããŠããŸãã äœæ¥ãã£ã¬ã¯ã㪠/usr/src/app ãèšå®ããã³ãã³ã package-lock.json ã§ npm ci äŸåé¢ä¿ãã€ã³ã¹ããŒã«ããããã®ãã¡ã€ã«ãšãã¡ã€ã«ãã³ã㌠package.json ããŸããæ¬¡ã«ãã¢ããªã±ãŒã·ã§ã³ã®ãœãŒã¹ ã³ãŒãå
šäœãã³ããŒããã³ãã³ãã䜿çšã㊠TypeScript ã npm run build ãã«ãããŸãã
ãšããååã® productionãã«ã ããã»ã¹ã®ç¬¬ 2 段éã§ã¯ãå
¬åŒã® Node.js LTS Alpine Docker ã€ã¡ãŒãžã䜿çšãããŸãã äœæ¥ãã£ã¬ã¯ã㪠/app ã ã«èšå®ãã ãã³ããŒããŸãã package.jsonpackage-lock.json, ãš .env.production ãã¡ã€ã«ã 次ã«ãã³ãã³ãã䜿çšã㊠npm ci --production æ¬çªç°å¢ã®äŸåé¢ä¿ã®ã¿ãã€ã³ã¹ããŒã«ããåã®ã¹ããŒãžã®åºåã§ããã³ã³ãã€ã«ããã TypeScript ã³ãŒãã /usr/src/app/dist ãã ã«ã³ããŒããŸã /appã
æåŸã«ãããŒã 8000 ãå
¬éããã³ã³ãããŒã®èµ·åæã«ã³ãã³ããå®è¡ node src/index.js ããŸãã
äœæãã¡ã€ã«ã䜿çšãããµãŒãã¹ã®å®çŸ©
Docker äœæ ãã¡ã€ã«å ã§ãµãŒãã¹ãã©ã®ããã«è¡šç€ºãããããæ¬¡ã«ç€ºããŸãã
services:
frontend:
build:
context: "./frontend/events"
dockerfile: "./Dockerfile"
networks:
- events_net
backend:
build:
context: "./backend"
dockerfile: "./Dockerfile"
networks:
- events_net
db:
image: mongo:latest
ports:
- 27017:27017
networks:
- events_net
proxy:
image: nginx:stable-alpine
environment:
- NGINX_ENVSUBST_TEMPLATE_SUFFIX=.conf
- NGINX_ENVSUBST_OUTPUT_DIR=/etc/nginx
volumes:
- ${PWD}/nginx.conf:/etc/nginx/templates/nginx.conf.conf
ports:
- 80:80
networks:
- events_net
networks:
events_net:
ãµã³ãã« ã¢ããªã±ãŒã·ã§ã³ã«ã¯ã次ã®éšåããããŸãã
- Docker ã€ã¡ãŒãžã«ãã£ãŠãµããŒãããã 4 ã€ã®ãµãŒãã¹: Angular ããã³ããšã³ããããŒã.jsããã¯ãšã³ããMongoDB ããŒã¿ããŒã¹ããããã· ãµãŒããŒãšããŠã® Nginx
- ããã³ããšã³ããšããã¯ãšã³ãã®ãµãŒãã¹ã¯ã次ã®å Žæã«ããDockerfilesããæ§ç¯ãããŸãã
./frontend/eventsãããŠ./backendãããããã£ã¬ã¯ããªã ã©ã¡ãã®ãµãŒãã¹ãããšããevents_netãããã¯ãŒã¯ã«æ¥ç¶ãããŠããŸãã - db ãµãŒãã¹ã¯ãææ°ããŒãžã§ã³ã® MongoDB Docker ã€ã¡ãŒãžã«åºã¥ããŠãããããŒã 27017 ãå
¬éããŸãã ããã³ããšã³ãããã³ããã¯ãšã³ããµãŒãã¹ãšåã
events_netãããã¯ãŒã¯ã«æ¥ç¶ãããŸãã - ãããã·ãµãŒãã¹ã¯ãNginx Dockerã€ã¡ãŒãžã®å®å®ããé«å±±ããŒãžã§ã³ã«åºã¥ããŠããŸãã Nginxæ§æãã¡ã€ã«ã§ã®ç°å¢å€æ°ã®çœ®æãå¯èœã«ããNGINX_ENVSUBST_TEMPLATE_SUFFIXãšNGINX_ENVSUBST_OUTPUT_DIRã®2ã€ã®ç°å¢å€æ°ãå®çŸ©ãããŠããŸããÂ
- ãããã· ãµãŒãã¹ã«ã¯ãããŒã«ã«
nginx.confãã¡ã€ã«ã/etc/nginx/templates/nginx.conf.confã³ã³ãããŒå ã«ãããããããªã¥ãŒã ãå®çŸ©ãããŠããŸãã æåŸã«ãããŒã 80 ãå ¬éãevents_netããããã¯ãŒã¯ã«æ¥ç¶ããŸãã events_netãããã¯ãŒã¯ã¯ãã¡ã€ã«ã®æ«å°Ÿã§å®çŸ©ããããã¹ãŠã®ãµãŒãã¹ãããã«ã¢ã¿ãããããŸãããã®èšå®ã«ããããµãŒãã¹åããã¹ãåãšããŠäœ¿çšããŠã³ã³ããéã®éä¿¡ãå¯èœã«ãªããŸãã
ãªããžããªãè€è£œãããã docker-compose.yml GitHub ã® Dockersamples ããçŽæ¥ãã¡ã€ã«ãããŠã³ããŒãã§ããŸãã
ã³ã³ãããµãŒãã¹ã®èµ·å
MEAN ã¢ããªã±ãŒã·ã§ã³ã¹ã¿ãã¯ãéå§ããã«ã¯ã次ã®ã³ãã³ããå®è¡ããŸãã
docker compose up -d
次ã«ãã³ãã³ãã䜿çšããŠã docker compose ps ã¹ã¿ãã¯ãæ£ããå®è¡ãããŠããããšã確èªããŸãã 端æ«ã¯ä»¥äžã®åºåãçæããŸãã
$ docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
events-backend-1 events-backend "docker-entrypoint.sâŠ" backend 29 minutes ago Up 29 minutes 8000/tcp
events-db-1 mongo:latest "docker-entrypoint.sâŠ" db 5 seconds ago Up 4 seconds 0.0.0.0:27017->27017/tcp
events-frontend-1 events-frontend "/docker-entrypoint.âŠ" frontend 29 minutes ago Up 29 minutes 80/tcp
events-proxy-1 nginx:stable-alpine "/docker-entrypoint.âŠ" proxy 29 minutes ago Up 29 minutes 0.0.0.0:80->80/tcp
Docker ããã·ã¥ããŒãã䜿çšããã³ã³ãããŒã®è¡šç€º
ãŸããDocker ããã·ã¥ããŒããå©çšããŠã³ã³ãããŒã® ID ã衚瀺ããã¢ããªã±ãŒã·ã§ã³ã«ç°¡åã«ã¢ã¯ã»ã¹ãŸãã¯ç®¡çããããšãã§ããŸã (å³ 5)ã

çµè«
äžäžïŒDocker ã䜿çšã㊠MEAN ããŒã¹ã®ã€ãã³ãéä¿¡ã¢ããªã±ãŒã·ã§ã³ãã³ã³ãããŒåããæ¹æ³ãæ£åžžã«åŠç¿ããŸããã 1 ã€ã® YAML ãã¡ã€ã«ã§ãDocker Compose ã䜿çšã㊠MEAN ã¹ã¿ãã¯ãæ°ç§ã§ç°¡åã«æ§ç¯ããŠãããã€ããæ¹æ³ã瀺ããŸããã ããã€ãã®è¿œå æé ãå®è¡ããã ãã§ããã®ãã¥ãŒããªã¢ã«ãé©çšããªãããããã«è€éãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã ããããŒéçº!