ãã®èšäºã«ã€ããŠ
-
ãã®èšäºã¯ãDocker Desktopã®ãã¥ãŒããªã¢ã«ãåèš³ãããã®ã§ãã
-
å ¬åŒã®ãã¥ãŒããªã¢ã«ãªã®ã§ãå®å¿ããŠããã€å¹ççã«åŠç¿ããããšãã§ããŸãã
-
Docker DesktopããDocker HubãDocker ComposeãŸã§ç¶²çŸ ãããŠããã®ã§ãååŠè ãDockerã«åããŠè§ŠããããäžçŽè ãåºç€ãæ¯ãè¿ãã®ã«æé©ã§ãã
-
翻蚳å ã®ãã¥ãŒããªã¢ã«ã¯ã2021/10/7æç¹ã§ææ°ã®ãã®ã§ããé·ãæéãçµéããŠããå Žåãæ å ±ãå€ããªã£ãŠããå ŽåãããããŸãã®ã§ã泚æãã ããã
-
èªè ã«èª€è§£ãäžããªãéšåã¯ãèªã¿ããããéèŠããŠé©å®æèš³ããŠããŸãã
-
DeepLçã䜿çšããŠæšæ²ã¯è¡ã£ãŠããŸãããééã£ãŠãããšãããããè¯ã衚çŸãããã°ãç·šéãªã¯ãšã¹ãããé¡ãããããŸãã
翻蚳å
getting-started : https://github.com/docker/getting-started/tree/6190776cb618b1eb3cfb21e207eefde511d13449ã©ã€ã»ã³ã¹ : Apache License 2.0
Dockerãã¹ã¯ããã
Dockerãã¹ã¯ãããã¯ãã³ã³ããåãããã¢ããªã±ãŒã·ã§ã³ãšãã€ã¯ããµãŒãã¹ãæ§ç¯ã»å ±æããããã®ããŒã«ã§ããMacOSãšWindowsäžã§åäœããŸãã
åèš³è ã¡ã¢
Dockerãã¹ã¯ããããã€ã³ã¹ããŒã«ããã«ã¯ãããã«ã¢ã¯ã»ã¹ããŠããŠã³ããŒãããããäžèšã³ãã³ããå®è¡ããŠHomebrew Caskããã€ã³ã¹ããŒã«ããŠãã ããã
$ brew cask install dockerDockerãã¹ã¯ããããéããšããã¥ãŒããªã¢ã«ãéå§ããŸããããããã®ã³ãã³ãçã«ã€ããŠã¯åŸåã§è©³ãã説æããã®ã§ãããã§ã¯ã©ã®ãããªæµãã§ã³ã³ãããäœæãããã®ããäœæããŠãã ããã
Clone
ãŸããã¬ããžããªãã¯ããŒã³ããŸãã
Getting Started ã®ãããžã§ã¯ãã¯ãã·ã³ãã«ãªGithubã¬ããžããªã§ãã€ã¡ãŒãžãäœæããŠã³ã³ãããšããŠå®è¡ããããã«å¿ èŠãªãã®ãå šãŠå«ãŸããŠããŸãã
$ git clone https://github.com/docker/getting-started.git
Build
次ã«ãã€ã¡ãŒãžãäœæããŸãã
Dockerã€ã¡ãŒãžã¯ãã³ã³ããã®ããã®ãã©ã€ããŒããªãã¡ã€ã«ã·ã¹ãã ã§ããã³ã³ãããå¿ èŠãšããå šãŠã®ãã¡ã€ã«ãšã³ãŒããæäŸããŸãã
$ cd getting-started
$ docker build -t docker101tutorial .
Run
ã³ã³ãããå®è¡ããŸãããã
åã®ã¹ãããã§äœæããã€ã¡ãŒãžãå ã«ããã³ã³ãããèµ·åããŸããã³ã³ãããèµ·åãããšãPCã®ä»ã®å Žæããå®å šã«éé¢ããããªãœãŒã¹ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãèµ·åã§ããŸãã
$ docker run -d -p 80:80 --name docker-tutorial docker101tutorial
Share
ã€ã¡ãŒãžãä¿åããŠå ±æããŸãããã
ã€ã¡ãŒãžãDocker Hubã«ä¿åã»å ±æãããšãä»ã®ãŠãŒã¶ãŒãã©ããªç®çã®ãã·ã³äžã§ããç°¡åã«ã€ã¡ãŒãžãããŠã³ããŒãããŠèµ·åã§ããããã«ãªããŸãã
ãªããDocker Hubãå©çšããã«ã¯ãDockerã¢ã«ãŠã³ããäœæããå¿ èŠããããŸãã
$ docker tag docker101tutorial michinosuke/docker101tutorial
$ docker push michinosuke/docker101tutorial
Docker Tutorial
Dockerãã¹ã¯ãããã®ãã¥ãŒããªã¢ã«ã§äœæããã³ã³ããã«ã¢ã¯ã»ã¹ãããšããã詳ããDocker Tutorialãå§ãŸããŸãã
http://localhostã«ã¢ã¯ã»ã¹ããŸãããã
ã¯ãããã
ãã£ãå®è¡ããã³ãã³ãã«ã€ããŠ
ãã®ãã¥ãŒããªã¢ã«ã®ã³ã³ãããç«ãŠãããšãã§ããŸããã
ãŸããå ã»ã©å®è¡ããã³ãã³ãã«ã€ããŠèª¬æããŸããå¿ããŠãããããããªãã®ã§ãããäžåºŠæžããŸãã
docker run -d -p 80:80 docker/getting-started
ããã€ããã©ã°ã䜿çšãããŠããã®ã«æ°ä»ãããšæããŸããããããã®ãã©ã°ã¯ä»¥äžã®ãããªæå³ããããŸãã
-
-d: ã³ã³ããããã¿ããã¢ãŒãïŒããã¯ã°ã©ãŠã³ãïŒã§å®è¡ããã -
-p: ãã¹ãã®80çªããŒããã³ã³ããã®80çªããŒãã«ãããã³ã°ããã -
docker/getting-started: 䜿çšããã€ã¡ãŒãž
å¿çš
äžæåã®ãã©ã°ã¯çµåããããšã§ã³ãã³ãå šäœãçãã§ããŸããäŸãã°ãäžã®ã³ãã³ãã¯ä»¥äžã®ããã«ãæžããŸãã
docker run -dp 80:80 docker/getting-started
Dockerããã·ã¥ããŒã
ãã¥ãŒããªã¢ã«ãé²ããåã«ãPCäžã§èµ·åããŠããã³ã³ããäžèЧã衚瀺ã§ããDockerããã·ã¥ããŒãã玹ä»ããŸããDockerããã·ã¥ããŒãã䜿ãã°ãã³ã³ããã®ãã°ã«çŽ æ©ãã¢ã¯ã»ã¹ã§ããããã³ã³ããå ã®ã·ã§ã«ãååŸã§ããããã³ã³ããã®ã©ã€ããµã€ã¯ã«ïŒåæ¢ãåé€ïŒãç°¡åã«ç®¡çã§ãããããŸãã
ããã·ã¥ããŒãã«ã¢ã¯ã»ã¹ããã«ã¯ãMacãŸãã¯Windowsã®æé ã«åŸã£ãŠãã ãããä»éããŠã¿ããšããã®ãã¥ãŒããªã¢ã«ãèµ·åããŠããã¯ãã§ããã³ã³ããã®ååïŒäžã§ã¯jolly_boumanã«ãªã£ãŠããïŒã¯ãã©ã³ãã ã«çæãããååã§ãããªã®ã§ãéãååã§è¡šç€ºãããŠãããšæããŸãã
ã³ã³ãããšã¯ïŒ
ã³ã³ãããèµ·åããããã§ãããã³ã³ãããšã¯äžäœãªããªã®ã§ããããïŒç°¡åã«ãããšãã³ã³ããã¯ãã¹ããã·ã³ã«ããä»ã®å šãŠã®ããã»ã¹ããéé¢ããããã·ã³ãã«ãªå¥ã®ããã»ã¹ã§ããéé¢ã«ã¯ãã«ãŒãã«ã®åå空éãšCgroupsãé·ãéLinuxã§äœ¿çšãããŠããæ©èœã䜿çšããŸããDockerã¯ãããã®æ©èœã芪ãã¿ããã䜿ãããããã®ã«ããããã«åãçµãã§ããŸããã
ã³ã³ããã€ã¡ãŒãžãšã¯ïŒ
ã³ã³ãããå®è¡ããéã«ã¯ãéé¢ããããã¡ã€ã«ã·ã¹ãã ã䜿çšããŸãããã®ãã¡ã€ã«ã·ã¹ãã ã¯ã³ã³ããã€ã¡ãŒãžããäŸçµŠãããŸããã€ã¡ãŒãžã«ã¯ã³ã³ããã®ãã¡ã€ã«ã·ã¹ãã ãå«ãŸããã®ã§ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ããã®ã«å¿ èŠãªå šãŠã®äŸåé¢ä¿ã»èšå®ã»ã¹ã¯ãªããã»ãã€ããªãªã©ã¯ãã¹ãŠã€ã¡ãŒãžã«å«ãŸããŠããå¿ èŠããããŸãããŸããã€ã¡ãŒãžã«ã¯ãç°å¢å€æ°ãèµ·åæã®ããã©ã«ãã³ãã³ãããã®ä»ã®ã¡ã¿ããŒã¿ãªã©ã³ã³ããã®èšå®ãå«ãŸããŠããŸãã
ã€ã¡ãŒãžã®ã¬ã€ã€ããã¹ããã©ã¯ãã£ã¹ãªã©ã®è©³çްãªå 容ã«ã€ããŠã¯åŸã§ç޹ä»ããŸãã
æ å ±
chrootããåç¥ãªããã³ã³ããã¯chrootã®æ¡åŒµçã ãšèããŠãã ããããã¡ã€ã«ã·ã¹ãã ã¯ããã ã€ã¡ãŒãžããæã£ãŠãããã®ã§ããããããã³ã³ããã«ã¯chrootãã匷åãªå颿©èœã远å ãããŠããŸãã
䜿ãã¢ããªã®ç޹ä»
ããããã¯ãNode.jsã§åãã·ã³ãã«ãªãªã¹ã管çã¢ããªã䜿ã£ãŠé²ããŠãããŸããNode.jsãåãããªããŠãåé¡ãããŸãããJavaScriptã«ã€ããŠã®ç¥èãå¿ èŠãªãã§ãã
ããã§ã¯ãéçºããŒã ã¯ãšãŠãå°ãããMVPïŒå®çšæå°éã®è£œåïŒã瀺ãããã«ã·ã³ãã«ãªã¢ããªãäœã£ãŠããç¶æ³ãæ³å®ããŸããå€§èŠæš¡ãªããŒã ãè€æ°ã®éçºè ãªã©ã«å¯ŸããŠã©ãåäœããããèããå¿ èŠã¯ãªããã©ããã£ãŠåãããäœãã§ããã®ãã瀺ãããã®ã¢ããªãäœæããŸãã
ã¢ããªãæã«å ¥ãã
ã¢ããªã±ãŒã·ã§ã³ãåããåã«ãã¢ããªã±ãŒã·ã§ã³ã®ãœãŒã¹ã³ãŒããPCã«å ¥ããå¿ èŠããããŸããå®éã®ãããžã§ã¯ãã§ã¯ããªããžããªããã¯ããŒã³ããã®ãäžè¬çã ãšæããŸãããããããã®ãã¥ãŒããªã¢ã«ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ãå ¥ã£ãZIPãã¡ã€ã«ãäœæããŠãããã®ã§ããã¡ãã䜿çšããŸãã
-
ZIPãã¡ã€ã«ãããŠã³ããŒãããããZIPãã¡ã€ã«ãéããŠãè§£åããŠãã ããã
-
è§£åããããä»»æã®ãšãã£ã¿ãŒã§ãããžã§ã¯ããéããŠãã ããããšãã£ã¿ãŒãã€ã³ã¹ããŒã«ããŠããªãå ŽåãVisual Studio Codeã䜿çšããŠãã ããã
package.jsonãšïŒã€ã®ãµããã£ã¬ã¯ããªïŒsrcãšspecïŒã衚瀺ãããã¯ãã§ãã
ã¢ããªã®ã³ã³ããã€ã¡ãŒãžãäœæãã
ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããã«ã¯ãDockerfileã䜿çšããŸããDockerfileã¯ãã³ã³ããã€ã¡ãŒãžãäœæããããã«äœ¿ãããããã¹ãããŒã¹ã®åœä»€ã¹ã¯ãªããã§ããä»ãŸã§ã«Dockerfileãäœæããããšã®ããæ¹ãªããäžã®Dockerfileã«ã¯æ¬ é¥ããããšåãããããããŸãããããã«ã€ããŠã¯åŸã§èª¬æããŸãã
1.以äžã®å
å®¹ãæžã蟌ãã Dockerfileãpackage.jsonããããã£ã¬ã¯ããªã«äœæããŠãã ããã
FROM node:12-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
Dockerfileã«.txtãªã©ã®æ¡åŒµåãä»ããŠããªãã確èªããŠãã ããããšãã£ã¿ãŒã«ãã£ãŠã¯èªåçã«æ¡åŒµåãã€ããŠããŸããæ¬¡ã®ã¹ãããã§ãšã©ãŒã«ãªãå ŽåããããŸãã
2.ç§»åããŠããªãå Žåã¯ãã¿ãŒããã«ãéããŠDockerfileã®ããappãã£ã¬ã¯ã㪠ã«ç§»åããŸããdocker buildã³ãã³ãã䜿çšããŠã³ã³ããã€ã¡ãŒãžãæ§ç¯ããŸãããã
docker build -t getting-started .
ãã®ã³ãã³ãã¯ãDockerfileã䜿çšããŠãæ°ããã³ã³ããã€ã¡ãŒãžãæ§ç¯ããŸããããããã®"ã¬ã€ã€"ãã€ã³ã¹ããŒã«ãããã®ã«æ°ãã€ãããšæããŸãããªãããšãããšãnode:12-alpineã€ã¡ãŒãžãèµ·ç¹ã«ããããšããã«ããŒã«æç€ºããããã§ãããããããã®ã€ã¡ãŒãžãPCäžã«ãªãã£ãã®ã§ãã€ã¡ãŒãžãããŠã³ããŒãããå¿
èŠããããŸããã
ã€ã¡ãŒãžãããŠã³ããŒããããåŸãã¢ããªã±ãŒã·ã§ã³ãã³ããŒããyarnã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŸãããCMDåœä»€ã¯ããã®ã€ã¡ãŒãžããã³ã³ãããèµ·åããããšãã«å®è¡ãããããã©ã«ãã®ã³ãã³ããæå®ããŸãã
æåŸã«ã-tãã©ã°ã¯ãã€ã¡ãŒãžã«ã¿ã°ãä»ããŸããããã¯ãã€ã¡ãŒãžã«äººéã®çè§£ããããååãã€ãããã®ã ãšèããŠãã ãããããã§ã¯ãã€ã¡ãŒãžã«getting-startedãšåä»ããã®ã§ãã³ã³ãããèµ·åãããšãã¯ãã®ååãåç
§ããããšãã§ããŸãã
docker buildã³ãã³ãã®æåŸã«ã€ãã.ã¯ãDockerãã«ã¬ã³ããã£ã¬ã¯ããªã«ããDockerfileãæ¢ãããšã瀺ããŠããŸãã
ã¢ããªã®ã³ã³ãããèµ·åãã
ã€ã¡ãŒãžã¯çšæããã®ã§ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããŠã¿ãŸããããããã«ã¯ãdocker runã³ãã³ãã䜿çšããŸããïŒãã§ã«äžåºŠäœ¿ã£ãã®ãèŠããŠããŸããïŒïŒ
1.docker runã³ãã³ãã䜿çšããŠã³ã³ãããèµ·åããå
ã»ã©äœæããã€ã¡ãŒãžã®ååãæå®ããŠãã ããã
docker run -dp 3000:3000 getting-started
-dãã©ã°ãš-pãã©ã°ãèŠããŠããŸããïŒæ°ããã³ã³ããããã¿ããïŒããã¯ã°ã©ã³ãå®è¡ïŒã¢ãŒãã§èµ·åãããã¹ãã®3000çªããŒããã³ã³ããã®3000çªããŒãã«ãããã³ã°ããŸãããããŒããããã³ã°ãããªãã£ãå Žåãã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ããããšã¯ã§ããŸããã
2.æ°ç§åŸãhttp://localhost:3000ãWebãã©ãŠã¶ã§éããŠã¿ãŠãã ãããã¢ããªã衚瀺ãããã¯ãã§ãã
3.ïŒã€ãïŒã€ã¢ã€ãã ã远å ããŠã¿ãŠãæåŸ éãã®åäœã«ãªãã確èªããŠãã ãããã¢ã€ãã ã«å®äºã®ãã§ãã¯ãå ¥ããããã¢ã€ãã ãåé€ããããšãã§ããŸããããã³ããšã³ããã¢ã€ãã ãããã¯ãšã³ãã«ä¿åã§ããŠããŸãããšãŠãç°¡åã§ãããïŒ
ãã®æç¹ã§ãããã€ãã®ã¢ã€ãã ãæã€Todoãªã¹ã管çã¢ããªãã§ããŸãããããã§ã¯ãå°ã倿Žãå ããªãããã³ã³ããã®ç®¡çã«ã€ããŠåŠãã§ãããŸãããã
Dockerããã·ã¥ããŒããèŠãŠã¿ããšãã³ã³ãããïŒã€èµ·åããŠããã®ãåãããŸããïŒãã®ãã¥ãŒããªã¢ã«èªèº«ãšãèµ·åããã°ããã®ã¢ããªã³ã³ããã§ããïŒ
èŠçŽ
ãã®ç« ã§ã¯ãã³ã³ããã€ã¡ãŒãžã®æ§ç¯ã«ã€ããŠã®åºæ¬çãªããšãåŠã³ããã®ããã®DockerfileãäœæããŸãããã€ã¡ãŒãžãæ§ç¯ããŠãããã³ã³ãããèµ·åããå®è¡äžã®ã¢ããªãè§Šã£ãŠã¿ãŸããã
次ã¯ãã¢ããªã«ä¿®æ£ãå ããŠãå®è¡äžã®ã¢ããªãæ°ããã€ã¡ãŒãžã§æŽæ°ããæ¹æ³ãåŠã³ãŸããããéäžã§ã䟿å©ãªã³ãã³ããããã€ãåŠã³ãŸãã
ã¢ããªãã¢ããããŒããã
ã¡ãã£ãšããæ©èœã®ãªã¯ãšã¹ããšããŠããããã¯ãããŒã ããToDoãªã¹ãã®ã¢ã€ãã ãååšããªããšãã«è¡šç€ºãããã空ã®ããã¹ããã倿ŽããŠã»ãããšããäŸé ŒããããŸããã以äžã®ããã«å€æŽããããšã®ããšã§ãã
You have no todo items yet! Add one above!
ç°¡åã§ãããïŒãã®å€æŽãå ããŠãããŸãã
ãœãŒã¹ã³ãŒããæŽæ°ãã
1.src/static/js/app.jsã®56è¡ç®ãæžãæããŠãæ°ããããã¹ãã䜿çšãããããã«ããŸãã
- <p className="text-center">No items yet! Add one above!</p>
+ <p className="text-center">You have no todo items yet! Add one above!</p>
2.å ã»ã©äœ¿ã£ããã®ãšåãã³ãã³ãã䜿ã£ãŠãæŽæ°ããã€ã¡ãŒãžããã«ãããŸãããã
docker build -t getting-started .
3.æŽæ°ããã³ãŒãã䜿ã£ãŠæ°ããã³ã³ãããèµ·åããŸãããã
docker run -dp 3000:3000 getting-started
ããïŒå€åãããªãšã©ãŒã衚瀺ããããšæããŸããïŒIDã¯éããŸãïŒ
docker: Error response from daemon: driver failed programming external connectivity on endpoint laughing_burnell
(bb242b2ca4d67eba76e79474fb36bb5125708ebdabd7f45c8eaf16caaabde9dd): Bind for 0.0.0.0:3000 failed: port is already allocated.
äœãèµ·ãã£ããã§ãããããå€ãã³ã³ãããåããŠããã®ã§ãæ°ããã³ã³ãããç«ã¡äžããããšãã§ããªãã£ãã®ã§ãããã®åé¡ãèµ·ãã£ãçç±ãšããŠãç¹å®ã®ããŒãããªãã¹ã³ã§ããã®ã¯ã³ã³ãããããPCäžã§äžã€ã®ããã»ã¹ïŒã³ã³ãããå«ãïŒã ãã§ãããã³ã³ããã¯3000çªããŒããæ¢ã«äœ¿ã£ãŠããããã§ãããã®ãšã©ãŒãè§£æ¶ããããã«ã¯ãå€ãã³ã³ãããåé€ããå¿ èŠããããŸãã
å€ãã³ã³ããã眮ãæãã
ã³ã³ãããåé€ããããã«ã¯ããŸã忢ãããå¿ èŠããããŸãã忢ããŠããŸãã°ãåé€ã§ããŸããå€ãã³ã³ãããåé€ããã«ã¯ãïŒéãã®æ¹æ³ããããŸããã奜ããªæ¹æ³ããéžã³ãã ããã
CLIã§ã³ã³ãããåé€ãã
1.docker psã³ãã³ãã䜿çšããŠã³ã³ããã®IDãååŸããŸãã
docker ps
2.docker stopã³ãã³ãã䜿çšããŠã³ã³ããã忢ãããŸãã
# <the-container-id>ã¯docker psã³ãã³ãã§ååŸããIDã§çœ®ãæããŠãã ããã
docker stop <the-container-id>
3.ã³ã³ããã忢ããããdocker rmã³ãã³ãã§åé€ããŸãã
docker rm <the-container-id>
å¿çš
docker rmã³ãã³ãã«"force"ãã©ã°ã远å ããããšã§ãäžã€ã®ã³ãã³ãã§ã³ã³ããã®åæ¢ãšåé€ãè¡ãããšãã§ããŸããäŸïŒ
docker rm -f <the-container-id>
Dockerããã·ã¥ããŒãã䜿ã£ãŠã³ã³ãããåé€ãã
Dockerããã·ã¥ããŒããéããŠãäºåã¯ãªãã¯ããã ãã§ã³ã³ãããåé€ããããšãã§ããŸããã³ã³ããIDãæ¢ããŠåé€ããããã¯ããã«ç°¡åã§ãã
-
ããã·ã¥ããŒããéããŠãã¢ããªã®ã³ã³ããã«ã«ãŒãœã«ãåããããšãã¢ã¯ã·ã§ã³äžèЧãå³åŽã«è¡šç€ºãããŸãã
-
ãŽãç®±ãã¿ã³ãã¯ãªãã¯ãããšãã³ã³ãããåé€ãããŸãã
-
åé€ã確èªãããå®äºã§ãã
æŽæ°ããã¢ããªãèµ·åãã
1.æŽæ°ããã¢ããªãèµ·åããŸãã
docker run -dp 3000:3000 getting-started
2.http://localhost:3000ã§ãã©ãŠã¶ãåèªã¿èŸŒã¿ãããšãã¢ããããŒããããããã¹ãã衚瀺ãããŸãã
èŠçŽ
ã¢ããªã®æŽæ°ãã§ããäžæ¹ã§ãç¹çãã¹ãããšãïŒç¹ãããŸããã
-
ååšããŠããå šãŠã®ToDoãªã¹ããå šãŠæ¶æ» ããŠããŸã£ãããšã§ããããã§ã¯ããã¢ããªãšã¯èšããŸãããããã«ã€ããŠã¯è¿ããã¡ã«è©±ãããšæããŸãã
-
å°ããªå€æŽã ã£ãã®ã«ãããããããå€ãã®ã¹ããããèžãå¿ èŠããããŸãããæ¬¡ã®ç« ã§ã¯ã倿Žãå ãããã³ã«æ°ããã³ã³ããã®åæ§ç¯ãšèµ·åãè¡ããªããŠãã³ãŒããæŽæ°ããæ¹æ³ã«ã€ããŠç޹ä»ããŸãã
æ°žç¶æ§ã«ã€ããŠã話ãããåã«ãã€ã¡ãŒãžãä»äººãšå ±æããæ¹æ³ã«ã€ããŠåŠã³ãŸãããã
ã¢ããªãå ±æãã
ã€ã¡ãŒãžãäœæã§ããã®ã§ãæ©éå ±æããŠã¿ãŸããããDockerã€ã¡ãŒãžãå ±æããã«ã¯ãDockerã¬ãžã¹ããªã䜿çšããå¿ èŠããããŸããããã©ã«ãã®ã¬ãžã¹ããªã¯Docker Hubã§ãããä»ãŸã§äœ¿ã£ãŠããã€ã¡ãŒãžãããããæã£ãŠãããã®ã§ããã
ã¬ããžããªã®äœæ
ã€ã¡ãŒãžãããã·ã¥ããã«ã¯ããŸãDocker Hubäžã«ã¬ããžããªãäœæããå¿ èŠããããŸãã
-
Docker Hubã«ã¢ã¯ã»ã¹ããŠãå¿ èŠãªããã°ã€ã³ããŠãã ããã
-
Create Repositoryãã¿ã³ãã¯ãªãã¯ããŠãã ããã
-
ã¬ããžããªåã¯
getting-startedãæå®ããŠãã ãããå ¬éã¬ãã«ãPublicã«ãªã£ãŠããããšã確èªããŠãã ããã -
Createãã¿ã³ãã¯ãªãã¯ããŠãã ããã
ããŒãžã®å³åŽãèŠããšãDockerã³ãã³ããšããã®ããããšæããŸããããã«ã¯ããã®ã¬ããžããªã«ããã·ã¥ããããã«å®è¡ããå¿ èŠã®ããã³ãã³ãã®äŸãèšèŒãããŠããŸãã
ã€ã¡ãŒãžãããã·ã¥ãã
1.Docker Hubã«ãã£ãpushã³ãã³ããã³ãã³ãã©ã€ã³äžã§å®è¡ããŠã¿ãŠãã ãããæ³šæç¹ãšããŠãã³ãã³ãã®ããŒã ã¹ããŒã¹ã¯"docker"ã§ã¯ãªããèªåã®åå空éã䜿çšããŠãã ããã
$ docker push docker/getting-started
The push refers to repository [docker.io/docker/getting-started]
An image does not exist locally with the tag: docker/getting-started
ãªã倱æããŠããŸã£ãã®ã§ããããããã®pushã³ãã³ãã¯docker/getting-startedãšããååã®ã€ã¡ãŒãžãæ¢ããŸããããèŠã€ãããªãã£ãã®ã§ããdocker image lsãå®è¡ããŠã¿ãŠãã€ã¡ãŒãžã¯èŠã€ãããŸããã
ãã®åé¡ã解決ããããã«ã¯ããããŸã§ã«äœæããã€ã¡ãŒãžã«å¥ã®ååãã€ãããããã¿ã°ä»ãããå¿
èŠããããŸãã
åèš³è ã¡ã¢
docker image lsãšåãåäœãããã³ãã³ãã«docker imagesããããŸããããã¯Dockerã³ãã³ãã®åç·šæã«ãããã®ã§ãdocker image lsã®æ¹ãæ°ãããæšå¥šãããŠããŸãããã®ãã¥ãŒããªã¢ã«ã§ã¯ãä»åŸãåãåäœãããã³ãã³ããä»ã«æã€ã³ãã³ããç»å ŽããŸããåèïŒhttps://qiita.com/zembutsu/items/6e1ad18f0d548ce6c266
2.docker login -u YOUR-USER-NAMEã³ãã³ãã䜿çšããŠãDocker Hubã«ãã°ã€ã³ããŸãã
3.docker tagã³ãã³ãã䜿çšããŠãgetting-startedã€ã¡ãŒãžã«æ°ããååãã€ããŸããYOUR-USER-NAMEã¯ããªãã®Docker IDã«çœ®ãæããŠãã ããã
docker tag getting-started YOUR-USER-NAME/getting-started
4.ããäžåºŠpushã³ãã³ããå®è¡ããŠã¿ãŸããããã€ã¡ãŒãžåã«ã¿ã°ã¯è¿œå ããŠããªãã®ã§ãDocker Hubããã³ããŒ&ããŒã¹ãããŠããå Žåã¯ãtagnameã®éšåã¯åé€ããŠãã ãããã¿ã°ãæå®ããªãå ŽåãDockerã¯latestãšããã¿ã°ã䜿çšããŸãã
docker push YOUR-USER-NAME/getting-started
ã€ã¡ãŒãžãæ°ããã€ã³ã¹ã¿ã³ã¹äžã§åãã
ã€ã¡ãŒãžãæ§ç¯ããŠã¬ãžã¹ããªã«ããã·ã¥ã§ããã®ã§ãæ°ããã€ã³ã¹ã¿ã³ã¹äžã§ãã®ã³ã³ããã€ã¡ãŒãžãåãããŠã¿ãŸãããããã®ããã«ãPlay with Dockerã䜿çšããŸãã
1.ãã©ãŠã¶ã§Play with DockerãéããŸãã
2.Docker Hubã¢ã«ãŠã³ãã§ãã°ã€ã³ããŸãã
3.ãã°ã€ã³ããããå·Šã®ããŒã«ããã+ ADD NEW INSTANCEããªã³ã¯ãã¯ãªãã¯ããŸãïŒèŠåœãããªãå Žåããã©ãŠã¶ãå°ã暪ã«åºããŠãã ããïŒãæ°ç§åŸããã©ãŠã¶äžã«ã¿ãŒããã«ãŠã£ã³ããŠã衚瀺ãããŸãã
4.ã¿ãŒããã«äžã§ãããã·ã¥ããã¢ããªãèµ·åãããŸãããã
docker run -dp 3000:3000 YOUR-USER-NAME/getting-started
ã€ã¡ãŒãžãååŸãããã®ã¡ãèµ·åããŸãã
5.3000ãšæžããããããžã衚瀺ãããã®ã§ããããã¯ãªãã¯ãããšã倿Žãå ããã¢ããªã衚瀺ãããŸãããããŸãããã3000ãšæžããããããžã衚瀺ãããªãå ŽåããOpen Portããã¿ã³ãã¯ãªãã¯ããŠã3000ãšå ¥åããŠãã ããã
èŠçŽ
ãã®ç« ã§ã¯ãã€ã¡ãŒãžãã¬ãžã¹ããªã«ããã·ã¥ããŠå ±æããæ¹æ³ãåŠã³ãŸããããããããæ°ããã€ã³ã¹ã¿ã³ã¹ã«å ¥ã£ãŠãããã·ã¥ããã€ã¡ãŒãžãèµ·åããŸãããããã¯ãCIãã€ãã©ã€ã³ã§ã¯äžè¬çãªããšã§ããã€ãã©ã€ã³ãã€ã¡ãŒãžãäœæããŠã¬ãžã¹ããªã«ããã·ã¥ãããšãæ¬çªç°å¢ã§ã¯ææ°çã®ã€ã¡ãŒãžã䜿çšã§ããããã«ãªããŸãã
ãããŸã§ã¯çè§£ã§ããã®ã§ããã£ãã®ç« ã®æåŸã®è©±é¡ã«æ»ããŸããããã¢ããªãåèµ·åãããšãToDoãªã¹ãã®ã¢ã€ãã ãå šãŠæ¶å»ãããŠããŸããšããåé¡ããããŸãããåœç¶ããã§ã¯è¯ãUXïŒãŠãŒã¶ãŒäœéšïŒãšã¯èšããªãã®ã§ãã©ããã£ãŠãªã¹ã¿ãŒãããåŸãããŒã¿ãä¿æããããåŠã³ãŸãããã
ããŒã¿ããŒã¹ãæ°žç¶åãã
æ°ãã€ãããšæããŸãããToDoãªã¹ãã¯ã³ã³ãããèµ·åãããã³ã«åæåãããŠããŸãããªãã§ãããããã³ã³ãããã©ã®ããã«åäœããŠããã®ããããå°ãæãäžããŠã¿ãŸãããã
ã³ã³ããã®ãã¡ã€ã«ã·ã¹ãã
ã³ã³ãããèµ·åãããšããã€ã¡ãŒãžã®æ§ã ãªã¬ã€ã€ããã¡ã€ã«ã·ã¹ãã ã®ããã«äœ¿çšãããŸãããŸããããããã®ã³ã³ããã¯äœæ/æŽæ°/åé€ãè¡ãããã®ãã¹ã¯ã©ããã¹ããŒã¹ãã確ä¿ããŸããåãã€ã¡ãŒãžã䜿ãããŠããå Žåã§ãã倿Žã¯å¥ã®ã³ã³ããã«åœ±é¿ããŸããã
å®éã«èŠãŠã¿ã
å®éã«ã¿ãŠã¿ãããã«ãïŒã€ã®ã³ã³ãããèµ·åãããããããã«ãã¡ã€ã«ãäœæããŸããããçæ¹ã®ã³ã³ããã§ãã¡ã€ã«ãäœæããŠããããäžæ¹ã®ã³ã³ããã§ãã®ãã¡ã€ã«ãæå¹ã§ç¡ãããšãããããŸãã
1.1ãã10000ãŸã§ã®ã©ã³ãã ãªæ°åãæžã蟌ãã /data.txtãäœæããubuntuã³ã³ãããèµ·åããŸãã
docker run -d ubuntu bash -c "shuf -i 1-10000 -n 1 -o /data.txt && tail -f /dev/null"
ã³ãã³ãã«è©³ããæ¹ãªããBashã·ã§ã«ãèµ·åããŠãäºã€ã®ã³ãã³ããåŒã³åºããŠããããšãåãããšæããŸãïŒãã®ããã«&&ã䜿çšããŠããŸãïŒãæåã®éšåã§ãã©ã³ãã ãªïŒã€ã®æ°åã/data.txtã«æžã蟌ãã§ããŸããïŒã€ç®ã®ã³ãã³ãã¯ãã³ã³ããã®å®è¡ãç¶æããããã«ãã¡ã€ã«ãç£èŠãç¶ããŠããã ãã§ãã
2.åºåããããã®ã確èªããããã«ãexecã§ã³ã³ããã®äžã«å
¥ã£ãŠã¿ãŸããããããã·ã¥ããŒããéããŠãèµ·åããŠããubuntuã€ã¡ãŒãžã®æåã®ã¢ã¯ã·ã§ã³ãã¯ãªãã¯ããããšã§ããããè¡ãããšãã§ããŸãã
ubuntuã³ã³ããã®äžã§ã·ã§ã«ãèµ·åããŠããã®ãããã£ããšæããŸãã以äžã®ã³ãã³ããå®è¡ããŠã/data.txtã®å
容ã衚瀺ããŠã¿ãŸãããããããã§ãããããŸãã¿ãŒããã«ãéããŠãã ããã
cat /data.txt
åãããšãã³ãã³ãã©ã€ã³ã䜿ã£ãŠè¡ãããå Žåã¯ãdocker execã䜿çšããŠãã ãããdocker psã§ã³ã³ããã®IDãååŸããã®ã¡ã以äžã®ã³ãã³ãã§ãã¡ã€ã«ã®å
容ãååŸã§ããŸãã
docker exec <container-id> cat /data.txt
ã©ã³ãã ãªæ°åã衚瀺ãããã¯ãã§ãã
3.å¥ã®ubuntuã³ã³ãããç«ã¡äžããŠãåããã¡ã€ã«ãååšããªãã確èªããŠã¿ãŸãããã
docker run -it ubuntu ls /
data.txtããããŸãããæžã蟌ãŸããå
ã¯ãæåã®ã³ã³ããã®ããã®ã¹ã¯ã©ããã¹ããŒã¹ã ã£ãããã§ãã
4.docker rm -fã³ãã³ãã䜿çšããŠæåã®ã³ã³ãããåé€ããŸãã
ã³ã³ããã®ããªã¥ãŒã
ãããŸã§ã§ãã³ã³ããã¯èµ·åæã«ã€ã¡ãŒãžã®å®çŸ©ããå§ããããšãããããŸãããã³ã³ããã¯ãã¡ã€ã«ã®äœæãæŽæ°ãåé€ãè¡ãããšãã§ããŸãããã³ã³ãããåé€ããããšå€±ãããå šãŠã®å€æŽã¯ãã®ã³ã³ããã«éå®ãããŸããããããããªã¥ãŒã ã䜿ãã°ããã®å šãŠã倿Žããããšãã§ããŸãã
ããªã¥ãŒã ã¯ãã³ã³ããã®ç¹å®ã®ãã¡ã€ã«ã·ã¹ãã ãã¹ããã¹ããã·ã³ã«æ¥ç¶ã§ããããã«ããæ©èœãæäŸããŸããã³ã³ããå ã®ãã£ã¬ã¯ããªãããŠã³ããããŠããå Žåããã®ãã£ã¬ã¯ããªã®å€æŽã¯ãã¹ããã·ã³ã«ã圱é¿ããŸããã³ã³ãããåèµ·åããŠãåããã£ã¬ã¯ããªãããŠã³ãããå Žåãåããã¡ã€ã«ãåç §ã§ãããšããããã§ãã
ããªã¥ãŒã ã«ã¯ïŒéãã®ã¿ã€ãããããŸããã©ã¡ãã䜿ãã®ã§ããããšããããããŒã ãããªã¥ãŒã ã䜿ã£ãŠã¿ãŸãããã
TodoããŒã¿ãæ°žç¶åãã
ToDoã¢ããªã¯ããŒã¿ã/etc/todos/todo.dbã«ããSQLite Databaseã«ä¿åããŠããŸããSQLiteãåãããªããŠãæ°ã«ããªãã§ãã ãããSQLiteã¯ã·ã³ãã«ãªãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã§ãäžã€ã®ãã¡ã€ã«ã«å
šãŠã®ããŒã¿ãä¿åããŠããŸããããã¯å€§ããªããŒã¿ãæ±ãäžã§ã¯ãã¹ããªæ¹æ³ã§ã¯ãªãã®ã§ãããå°ããªãã¢ã¢ããªã§ã¯æå¹ã§ããéãããŒã¿ããŒã¹ãšã³ãžã³ã«åãæ¿ããæ¹æ³ã«ã€ããŠã¯åŸè¿°ããŸãã
ããŒã¿ããŒã¹ãåäžã®ãã¡ã€ã«ã§ããããããã®ãã¡ã€ã«ããã¹ãã§æ°žç¶åããŠæ¬¡ã®ã³ã³ããããåç
§ã§ããããã«ããã°ãäžæããæåŸã®ãšããããåéã§ããããã«ãªãã¯ãã§ããããªã¥ãŒã ãäœæããŠããŒã¿ãä¿åãããŠãããã£ã¬ã¯ããªã«æ¥ç¶ïŒããŠã³ããšããããŸãïŒããã°ãããŒã¿ãæ°žç¶åã§ããŸããã³ã³ãããtodo.dbãã¡ã€ã«ã«æžã蟌ããšãããªã¥ãŒã å
ã®ãã¹ãã«ä¿æãããŸãã
軜ãè§ŠããŠãããšããããã䜿ãããšããŠããã®ã¯ãããŒã ãããªã¥ãŒã ã§ããããŒã ãããªã¥ãŒã ã¯ããŒã¿ãå ¥ãããã±ããšèããŠãã ãããDockerã¯ãã£ã¹ã¯äžã«ç©ççãªé åã確ä¿ããã®ã§ãããªã¥ãŒã ã®ååã ãèŠããŠããã°è¯ãã§ããããªã¥ãŒã ãå©çšãããšãã«ãDockerãæ£ããããŒã¿ãååŸãããŠããããæ€èšŒããŠãããŸãã
1.docker volume createã³ãã³ãã§ããªã¥ãŒã ãäœæããŸãã
docker volume create todo-db
2.ãã§ã«ç«ã¡äžããToDoã¢ããªã¯æç¶ããããªã¥ãŒã ã䜿çšããã«å®è¡ãããŠããã®ã§ãããã·ã¥ããŒãã䜿ããdoker rm -f <id>ã³ãã³ãã䜿çšããŠåæ¢ãããŠãã ããã
3.ToDoã¢ããªã®ã³ã³ãããèµ·åããã®ã§ãããããªã¥ãŒã æ¥ç¶ãæå®ããã®ã«-vãã©ã°ãä»ãå ããŠãã ãããããŒã ãããªã¥ãŒã ã䜿çšããŠ/etc/todosã«æ¥ç¶ããå
šãŠã®ãã¡ã€ã«ããã£ããã£ããŸãã
docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started
4.ã³ã³ãããç«ã¡äžããããã¢ããªãéããŠãToDoãªã¹ãã«ããã€ãã¢ã€ãã ã远å ããŠã¿ãŠãã ããã
5.ToDoã¢ããªã®ã³ã³ãããåé€ããŸããããã·ã¥ããŒãã䜿çšããããdocker psã§IDãååŸããŠããdocker rm -f <id>ã§åé€ãè¡ã£ãŠãã ããã
6.äžèšãšåãã³ãã³ãã䜿çšããŠãæ°ããã³ã³ãããèµ·åããŠãã ããã
7.ãªã¹ãã衚瀺ãããããšã確èªããããã³ã³ãããåé€ããŠæ¬¡ã«é²ã¿ãŸãããã
ããŒã¿ã®æ°žç¶åã®æ¹æ³ãçè§£ã§ããŸãããã
å¿çš
ããŒã ãããªã¥ãŒã ãšãã€ã³ãããŠã³ãïŒããã«ã€ããŠã¯åŸã§è©±ããŸãïŒã¯ãDockerãã€ã³ã¹ããŒã«ããæãããµããŒããããŠããïŒéãã®ããªã¥ãŒã ã§ããããã©ã€ããã©ã°ã€ã³ãæ°å€ãååšããNFSãSFTPãNetAppãªã©ããµããŒãããŠããŸããããã¯ãSwarmãKubernetesãªã©ã®ã¯ã©ã¹ã¿ç°å¢å ã®è€æ°ã®ãã¹ãäžã§ã³ã³ãããèµ·åããããšãã«ãšãŠãéèŠã«ãªããŸãã
ããªã¥ãŒã ã«ã€ããŠæ·±ãç¥ã
å€ãã®äººã«ãããŒã ãããªã¥ãŒã ã䜿ã£ããšãã«DockerãããŒã¿ãä¿åããå®éã®å Žæã¯ã©ããªãã§ããïŒããšããèãããŸããç¥ãããã®ã§ããã°ãdocker volume inspectã³ãã³ãã䜿çšããã°å¯èœã§ãã
docker volume inspect todo-db
[
{
"CreatedAt": "2019-09-26T02:18:36Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/todo-db/_data",
"Name": "todo-db",
"Options": {},
"Scope": "local"
}
]
Mountpointãšããã®ãããã£ã¹ã¯äžã«ããŒã¿ãä¿åãããŠããå®éã®å Žæã§ããã»ãšãã©ã®ãã·ã³ã§ã¯ããã¹ããããã®ãã£ã¬ã¯ããªã«ã¢ã¯ã»ã¹ããã®ã«Rootæš©éãå¿
èŠã«ãªãããšã«æ³šæããŠãã ããã
Dockerãã¹ã¯ãããã§ããªã¥ãŒã ããŒã¿ã«çŽæ¥ã¢ã¯ã»ã¹ãã
Dockerãã¹ã¯ãããã§å®è¡ããŠããéãDockerã³ãã³ãã¯å®éã«ã¯ãã·ã³äžã®å°ããªä»®æ³ãã·ã³å ã§å®è¡ãããŠããŸããMountpointãã£ã¬ã¯ããªã®å®éã®å 容ãèŠãããã°ããŸãä»®æ³ãã·ã³å ã«å ¥ãå¿ èŠããããŸãã
èŠçŽ
ãã®æç¹ã§ãåç¶ãããŸãŸåèµ·åã§ããæ©èœçãªã¢ããªã±ãŒã·ã§ã³ãäœãããšãã§ããŸãããæè³å®¶ã«èŠãã³ããããŠãç§ãã¡ã®ããžã§ã³ãçè§£ããŠããããããšãé¡ã£ãŠããŸãã
ããããªããã倿Žãå ãããã³ã«ã€ã¡ãŒãžãåæ§ç¯ããã®ã¯å°ãæéããããéãã§ãã倿Žãå ããã®ã«ã¯ãã£ãšè¯ãæ¹æ³ããããã§ãããã€ã³ãããŠã³ãïŒãã£ãã»ã®ãããããã€ïŒãããã®æ¹æ³ã§ãããã£ããèŠãŠã¿ãŸãããã
ãã€ã³ãããŠã³ãã䜿çšãã
åã®ç« ã§ãããŒã ãããªã¥ãŒã ã䜿çšããŠãããŒã¿ããŒã¹ã®æ°žç¶åãè¡ããŸãããããŒã ãããªã¥ãŒã ã¯ãããŒã¿ã®ä¿åå Žæã«ã€ããŠæ°ã«ããå¿ èŠããªãã®ã§ãåã«ããŒã¿ãä¿åãããå Žåã«ã¯æå¹ã§ãã
ãã€ã³ãããŠã³ãã䜿ãã°ããã¹ãäžã®æ£ç¢ºãªMountpointãã³ã³ãããŒã«ã§ããŸããããŒã¿ã®æ°žç¶åã«ã䜿çšã§ããŸããã远å ã®ããŒã¿ãã³ã³ããã«æäŸããã®ã«ãã䜿ãããŸããã¢ããªãéçºããå Žåããã€ã³ãããŠã³ãã§ãœãŒã¹ã³ãŒããã³ã³ããã«æ¥ç¶ããŠãã³ãŒãã倿Žããããå¿çãããã倿Žãããã«ç¢ºèªãããã§ããŸãã
Nodeã§äœãããã¢ããªã®å Žåããã¡ã€ã«ã®å€æŽãç£èŠããŠã¢ããªã±ãŒã·ã§ã³ãåèµ·åããã®ã«ã¯nodemonãæé©ã§ããåããããªããŒã«ã¯ãã»ãšãã©ã®èšèªãšãã¬ãŒã ã¯ãŒã¯ã«ååšããŸãã
ããªã¥ãŒã ã®ã¿ã€ãæ¯èŒè¡š
ãã€ã³ãããŠã³ããšããŒã ãããªã¥ãŒã ã¯ãDockerãšã³ãžã³ãåããïŒã€ã®äž»ãªããªã¥ãŒã ã¿ã€ãã§ããäžæ¹ã§ã远å ã®ããªã¥ãŒã ãã©ã€ãã¯ãä»ã®ãŠãŒã¹ã±ãŒã¹(SFTP, Ceph, NetApp, S3 ãªã©)ã§åœ¹ç«ã¡ãŸãã
| Named Volumes | ãã€ã³ãããŠã³ã | |
|---|---|---|
| ãã¹ãã®å Žæ | Dockerãéžã¶ | èªåãéžã¶ |
ããŠã³ãã®äŸ ( -vã䜿çš) |
my-volume:/usr/local/data | /path/to/data:/usr/local/data |
| ã³ã³ããã®ã³ã³ãã³ãã§æ°ããããªã¥ãŒã ãäœæãã | Yes | No |
| ããªã¥ãŒã ãã©ã€ãã®ãµããŒã | Yes | No |
ãããããã¢ãŒãã®ã³ã³ãããèµ·åãã
éçºæ®µéã§äœ¿ããã³ã³ãããèµ·åããŠã¿ãŸãããã以äžã®ããšãè¡ããŸãã
- ãœãŒã¹ã³ãŒããã³ã³ããã«ããŠã³ãããã
- "dev" dependenciesãå«ãå šãŠã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«ããã
- nodemonãèµ·åããŠãã¡ã€ã«ã®å€æŽãç£èŠãã
ã§ã¯ãå§ããŸãããã
1.ä»ãŸã§ã«äœ¿çšããgetting-startedã³ã³ãããèµ·åããŠããªãããšã確èªããŠãã ããã
2.以äžã®ã³ãã³ããå®è¡ããŠãã ãããäœãããŠãããã®èª¬æãããŠãããŸãã
docker run -dp 3000:3000 \
-w /app -v "$(pwd):/app" \
node:12-alpine \
sh -c "yarn install && yarn run dev"
PowerShellã䜿ã£ãŠããå Žåã¯ã以äžã®ã³ãã³ãã䜿çšããŠãã ããã
docker run -dp 3000:3000 `
-w /app -v "$(pwd):/app" `
node:12-alpine `
sh -c "yarn install && yarn run dev"
-
-dp 3000:3000: ä»ãŸã§ãšåãã§ãããã¿ããïŒããã¯ã°ã©ãŠã³ãïŒã¢ãŒãã§èµ·åããããŒããããã³ã°ãäœæããŸãã -
-w /app: "ã¯ãŒãã³ã°ãã£ã¬ã¯ããª"ããã³ãã³ããå®è¡ãããã«ã¬ã³ããã£ã¬ã¯ããªãæå®ããŸãã -
-v "$(pwd):/app": ã³ã³ããã®ãã¹ãããã/appãã£ã¬ã¯ããªã«ã«ã¬ã³ããã£ã¬ã¯ããªããã€ã³ãããŠã³ãããŸãã -
node:12-alpine: 䜿çšããã€ã¡ãŒãžã§ãããã®ã€ã¡ãŒãžã¯Dockerfileã§æå®ããéããã¢ããªã®ããŒã¹ã€ã¡ãŒãžãšãªã£ãŠããããšã«æ°ãã€ããŠãã ããã -
sh -c "yarn install && yarn run dev": ã³ãã³ãã§ããshïŒalpineã«ã¯bashããããŸããïŒã䜿çšããŠã·ã§ã«ãèµ·åããyarn installã§å šãŠã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŠãããyarn run devãå®è¡ããŠããŸããpackage.jsonãèŠãŠã¿ããšãdevã¹ã¯ãªããã¯nodemonãèµ·åããããšãããããŸãã
3.docker logs -f <container-id>ã³ãã³ãã§ãã°ãèŠãããšãã§ããŸãããããèŠãã°ãæºåãã§ããŠããããšãåãããŸãã
docker logs -f <container-id>
$ nodemon src/index.js
[nodemon] 1.19.2
[nodemon] to restart at any time, enter `rs`
[nodemon] watching dir(s): *.*
[nodemon] starting `node src/index.js`
Using sqlite database at /etc/todos/todo.db
Listening on port 3000
ãã°ãèŠçµãã£ãããCtrl+Cã§çµäºããããšãã§ããŸãã
4.ã§ã¯ãã¢ããªã«å€æŽãå ããŠã¿ãŸããããsrc/static/js/app.jsãã¡ã€ã«å
ã®ãAdd Itemããã¿ã³ããAddãã«å€æŽããŠã¿ãŸãããã109è¡ç®ã«ãããŸãã
- {submitting ? 'Adding...' : 'Add Item'}
+ {submitting ? 'Adding...' : 'Add'}
5.ããŒãžããªãã¬ãã·ã¥ïŒãããã¯éãïŒã ãã§ããã©ãŠã¶ã«ã»ãšãã©å³åº§ã«å€æŽãåæ ãããŠããã®ããããã¯ãã§ããNodeãµãŒããŒãåèµ·åããã®ã«ã¯æ°ç§ãããã®ã§ããšã©ãŒã«ãªã£ãå Žåã¯ãæ°ç§åŸã«ãªãã¬ãã·ã¥ããŠã¿ãŠãã ããã
6.ä»ã«ã倿Žãå ããŠã¿ãŠãã ããããããçµãã£ãããã³ã³ããã忢ããŠãããdocker build -t getting-started .ã䜿çšããŠæ°ããã€ã¡ãŒãžããã«ãããŠãã ããã
ãã€ã³ãããŠã³ãã䜿çšããããšã¯ãããŒã«ã«éçºã«ãããŠãšãŠãäžè¬çãªããšã§ãããã®å©ç¹ãšããŠãéçºãã·ã³ã«ãã«ãããŒã«ãç°å¢ãã€ã³ã¹ããŒã«ãããŠããå¿
èŠããªãããšããããŸããdocker runã³ãã³ãã ãã§ãéçºç°å¢ã¯ãã«ãããæºåãå®äºããŸããã®ã¡ã®ç« ã§Docker Composeã«ã€ããŠè©±ãäºå®ã§ãããããã¯ããããã®ãã©ã°ãã€ããã³ãã³ããã·ã³ãã«ã«ããããšãã§ããŸãã
èŠçŽ
ããŒã¿ããŒã¹ãæ°žç¶åããæè³å®¶ãšåµèšè ã®èŠæ±ãšèŠæã«è¿ éã«å¯Ÿå¿ã§ããããã«ãªããŸãããã§ããã¡ãã£ãšåŸ ã£ãŠãã ãããçŽ æŽããããã¥ãŒã¹ãé£ã³èŸŒãã§ããŸããïŒ
ããªãã®ãããžã§ã¯ãã¯ãå°æ¥çã«éçºãããããšã«ãªããŸããã
補ååã«åããŠãããŒã¿ããŒã¹ãSQLiteããæ¡åŒµæ§ã®é«ããã®ã«ç§»è¡ããå¿ èŠããããŸããåçŽã«èããŠããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã¯ãã®ãŸãŸã«ãMySQLã䜿çšããã¹ãã§ããããããããã©ããã£ãŠMySQLãåããã°è¯ãã®ã§ããããïŒã©ããã£ãŠã³ã³ããéã§ã®éä¿¡ãèš±å¯ããã°è¯ãã®ã§ããããïŒããã«ã€ããŠã次ã®ç« ã§è©±ããŠããããšæããŸãã
è€æ°ã®ã³ã³ãããæã€ã¢ããª
ãããŸã§ãäžã€ã®ã³ã³ããã®ã¢ããªã§äœæ¥ããŠããŸãããããããã¢ããªã±ãŒã·ã§ã³ã«MySQLã远å ãããã§ãããMySQLã¯ã©ãã§åããã°è¯ããã§ããïŒåãã³ã³ããã«åãããŠå¥ã ã«èµ·åããã°è¯ãã§ããïŒããšãã質åããããããŸããäžè¬çã«ãåã³ã³ããã¯äžã€ã®ããšã®ã¿ãè¡ãã¹ãã§ããããã«ã¯ãããã€ãçç±ããããŸãã
-
APIãããã³ããšã³ããããŒã¿ããŒã¹ãšç°ãªãæ¹æ³ã§æ¡åŒµãããå¯èœæ§ãé«ãã
-
ã³ã³ãããåé¢ããããšã§ãããŒãžã§ã³ã®æŽæ°ãåé¢ããŠè¡ãããšãã§ããŸãã
-
ããŒã«ã«ã®ããŒã¿ããŒã¹çšã³ã³ããã䜿çšããããšãã§ããŸãããæ¬çªç°å¢ã§ã¯ããŒã¿ããŒã¹ã管çãããµãŒãã¹ã䜿çšããããšæããããããŸããããã®å Žåãã¢ããªãšäžç·ã«ããŒã¿ããŒã¹ãšã³ãžã³ã補åã«å«ããå¿ èŠã¯ãããŸããã
-
è€æ°ã®ããã»ã¹ãå®è¡ããã«ã¯ãããã»ã¹ãããŒãžã£ïŒã³ã³ããã¯ïŒã€ã®ããã»ã¹ããèµ·åããŸããïŒãå¿ èŠã«ãªããã³ã³ããã®èµ·å/忢ãè€éã«ãªããŸãã
ãã£ãšä»ã«ãçç±ã¯ãããŸãããªã®ã§ããããªãµãã«åäœããããã«ã¢ããªãã¢ããããŒãããŠãããŸãã
ã³ã³ããã®ãããã¯ãŒã¯
æãåºããŠæ¬²ããã®ã§ãããã³ã³ããã¯ããã©ã«ãã§ç¬ç«ããŠåäœããåããã·ã³äžã®ä»ã®ããã»ã¹ãã³ã³ããã«ã€ããŠäœãç¥ããŸãããã§ã¯ãã©ããã£ãŠã³ã³ãããä»ã®ã³ã³ãããšéä¿¡ã§ããããã«ããã°è¯ãã®ã§ããããïŒãã®çãããããã¯ãŒã¯ã§ããããªãããããã¯ãŒã¯ãšã³ãžãã¢ã§ããå¿ èŠã¯ãããŸããããã®ã«ãŒã«ã ãèŠããŠãããŠãã ããã
2ã€ã®ã³ã³ãããåããããã¯ãŒã¯å ã«ãããšãããäºãã«éä¿¡ããããšãã§ããŸããåããããã¯ãŒã¯å ã«ãªããšãã¯ãéä¿¡ã§ããŸããã
MySQLãèµ·åãã
ã³ã³ããããããã¯ãŒã¯äžã«é 眮ããã«ã¯ïŒéãã®æ¹æ³ããããŸããïŒã€ç®ã¯ãã¹ã¿ãŒãæã«å²ãåœãŠãæ¹æ³ãïŒã€ç®ã¯ããã§ã«ããã³ã³ãããæ¥ç¶ããæ¹æ³ã§ããä»åã¯ãæåã«ãããã¯ãŒã¯ãäœæããŠãããèµ·åããMySQLã³ã³ãããæ¥ç¶ããŸãããã
1.ãããã¯ãŒã¯ãäœæããŸãã
docker network create todo-app
2.MySQLã³ã³ãããèµ·åããŠããããã¯ãŒã¯ã«æ¥ç¶ããŸãããŸããããŒã¿ããŒã¹ã®åæåã«äœ¿çšããç°å¢å€æ°ãããã€ãå®çŸ©ããŸããïŒMySQL Docker Hub listingã®"Environment Variables"ãšããç« ãåç §ããŠãã ããïŒ
docker run -d \
--network todo-app --network-alias mysql \
-v todo-mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=secret \
-e MYSQL_DATABASE=todos \
mysql:5.7
PowerShellã䜿çšããŠããå Žåã¯ã以äžã®ã³ãã³ãã䜿çšããŠãã ããã
docker run -d `
--network todo-app --network-alias mysql `
-v todo-mysql-data:/var/lib/mysql `
-e MYSQL_ROOT_PASSWORD=secret `
-e MYSQL_DATABASE=todos `
mysql:5.7
--network-aliasãã©ã°ãæå®ããŸãããããã«ã€ããŠã¯åŸè¿°ããŸãã
ããã®ããã®æ å ±
todo-mysql-dataãšããååã®ããªã¥ãŒã ã䜿çšãããããMySQLã®ããŒã¿ãä¿åããã/var/lib/mysqlã«ããŠã³ãããŸããã ããããdocker volume createã³ãã³ãã¯äœ¿çšããŠããŸãããDockerã¯ããŒã ãããªã¥ãŒã ã䜿ãããšããŠããããšãèªèããŠãèªåã§ããªã¥ãŒã ãäœæããŠãããã®ã§ãã
3.ããŒã¿ããŒã¹ãèµ·åããŠããã確èªããããã«ãããŒã¿ããŒã¹ã«æ¥ç¶ããŠæ¥ç¶ãããŠããã確èªããŸãã
docker exec -it <mysql-container-id> mysql -p
ãããã¹ã¯ãŒããèãããããsecretãšå
¥åããŠãã ãããMySQLã·ã§ã«å
ã§ãããŒã¿ããŒã¹äžèЧã衚瀺ããtodosããŒã¿ããŒã¹ãããããšã確èªããŠãã ããã
mysql> SHOW DATABASES;
ãã®ããã«è¡šç€ºãããã¯ãã§ãã
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| todos |
+--------------------+
5 rows in set (0.00 sec)
todosããŒã¿ããŒã¹ãçšæããããšãã§ããŸããã
MySQLã«æ¥ç¶ãã
MySQLãèµ·åããããšã¯ç¢ºèªã§ããã®ã§ãå®éã«äœ¿ã£ãŠã¿ãŸããããã§ããåããããã¯ãŒã¯ã§å¥ã®ã³ã³ãããèµ·åãããšããŠãã©ããã£ãŠã³ã³ãããæ¢ãã°è¯ãã®ã§ãããããïŒåã³ã³ããã¯ããããå¥ã®IPã¢ãã¬ã¹ãæã£ãŠããããšãèŠããŠãããŠãã ãããïŒ
ãããçè§£ããããã«ããããã¯ãŒã¯ã«é¢ããåé¡ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°ããããã°ã«äŸ¿å©ãªããŒã«ãå ¥ã£ãnicolaka/netshootã³ã³ãããå©çšããŸãããã
1.nicolaka/netshootã€ã¡ãŒãžã䜿çšããŠãæ°ããã³ã³ãããç«ã¡äžããŸããããåããããã¯ãŒã¯ã«æ¥ç¶ãããŠããããšã確èªããŠãã ããã
docker run -it --network todo-app nicolaka/netshoot
2.ã³ã³ããå
ã§äŸ¿å©ãªDNSããŒã«ã§ããdigã³ãã³ãã䜿çšããŸãããã¹ãåãmysqlã®IPã¢ãã¬ã¹ãæ¢ããŸãããã
dig mysql
ãããšã以äžã®ããã«è¡šç€ºãããã¯ãã§ãã
; <<>> DiG 9.14.1 <<>> mysql
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32162
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;mysql. IN A
;; ANSWER SECTION:
mysql. 600 IN A 172.23.0.2
;; Query time: 0 msec
;; SERVER: 127.0.0.11#53(127.0.0.11)
;; WHEN: Tue Oct 01 23:47:24 UTC 2019
;; MSG SIZE rcvd: 44
ãANSWER SECTIONããšãããšãããèŠããšãmysqlã®Aã¬ã³ãŒãã172.23.0.2ãšããããŸãïŒããªãã®IPã¢ãã¬ã¹ã¯éãå€ã«ãªã£ãŠããå¯èœæ§ãé«ãã§ãïŒãmysqlã¯éåžžæå¹ãªãã¹ãåã§ã¯ãããŸããããDockerã¯mysqlãšãããããã¯ãŒã¯ãšã€ãªã¢ã¹ãæã€ã³ã³ããã®IPã¢ãã¬ã¹ã解決ããããšãã§ããŸããïŒ--network-aliasãã©ã°ã䜿çšããã®ãèŠããŠããŸããïŒïŒã
ãããæå³ããã®ã¯ãToDoã¢ããªã«ã€ããŠãmysqlãšããååã®ãã¹ãã«æ¥ç¶ããã ãã§ãããŒã¿ããŒã¹ãšéä¿¡ã§ãããšããããšã§ããããã»ã©ç°¡åãªããšã¯ãããŸããã
MySQLã䜿ã£ãã¢ããªãåãã
ToDoã¢ããªã§ã¯ãMySQLã³ãã¯ã·ã§ã³èšå®ãæå®ããããã€ãã®ç°å¢å€æ°ãèšå®ããããšãã§ããŸãã詳现ã¯ä»¥äžã®éãã§ãã
-
MYSQL_HOST: 皌åäžã®MySQLãµãŒãã®ãã¹ãåã§ãã -
MYSQL_USER: æ¥ç¶ã«äœ¿çšãããŠãŒã¶åã§ãã -
MYSQL_PASSWORD: æ¥ç¶ã«äœ¿çšãããã¹ã¯ãŒãã§ãã -
MYSQL_DB: æ¥ç¶åŸã«äœ¿çšããããŒã¿ããŒã¹ã§ãã
泚æ
éçºç°å¢ã§ã³ãã¯ã·ã§ã³ã®èšå®ã«ç°å¢å€æ°ã䜿ãããšã¯åé¡ãããŸããããæ¬çªç°å¢ã§åããŠããã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããããšã¯ãšãŠãæšå¥šãããªãè¡çºã§ããDockerã§ä»¥åã»ãã¥ãªãã£ãæ åœããŠããDiogo Monicaããããã®çç±ã説æããçŽ æŽãããèšäºãæžããŠãããŠããŸãã
ãã£ãšå®å šãªææ³ãšããŠã¯ãã³ã³ããã®ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠæäŸãããã·ãŒã¯ã¬ãããµããŒããå©çšããããšããããŸããã»ãšãã©ã®å Žåããããã®ã·ãŒã¯ã¬ãããã¡ã€ã«ã¯çšŒåããŠããã³ã³ããã«ããŠã³ããããŸããå€ãã®ã¢ããªïŒMySQLã€ã¡ãŒãžãšToDoã¢ããªãå«ããŠïŒã¯ãã¡ã€ã«ãå«ããã¡ã€ã«ãæã
_FILEæ¥å°ŸèŸãã€ããç°å¢å€æ°ããµããŒãããŠããŸããäŸãšããŠã倿°
MYSQL_PASSWORD_FILEãèšå®ãããšãã¢ããªã¯åç §ããããã¡ã€ã«ã®å 容ãã³ãã¯ã·ã§ã³ãã¹ã¯ãŒããšããŠäœ¿çšããŸãããªããDockerã¯ãããã®ç°å¢å€æ°ãäžåãµããŒãããŸãããã¢ããªã¯ãç°å¢å€æ°ãæ¢ããŠããã¡ã€ã«ã®å 容ãååŸããæ¹æ³ãç¥ã£ãŠããå¿ èŠããããŸãã
説æã¯çµãã£ãã®ã§ãã³ã³ãããèµ·åãããŸãããã
1.åè¿°ããç°å¢å€æ°ãããããæå®ããŠãã³ã³ãããã¢ããªã®ãããã¯ãŒã¯ã«æ¥ç¶ã§ããããã«ããŸãããã
docker run -dp 3000:3000 \
-w /app -v "$(pwd):/app" \
--network todo-app \
-e MYSQL_HOST=mysql \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=secret \
-e MYSQL_DB=todos \
node:12-alpine \
sh -c "yarn install && yarn run dev"
PowerShellã䜿çšããŠããå Žåã¯ã以äžã®ã³ãã³ãã䜿çšããŠãã ããã
docker run -dp 3000:3000 `
-w /app -v "$(pwd):/app" `
--network todo-app `
-e MYSQL_HOST=mysql `
-e MYSQL_USER=root `
-e MYSQL_PASSWORD=secret `
-e MYSQL_DB=todos `
node:12-alpine `
sh -c "yarn install && yarn run dev"
2.ã³ã³ããã®ãã°ãèŠããšïŒdocker logs <container-id>ïŒãMySQLããŒã¿ããŒã¹ã䜿çšããŠããããšã瀺ãã¡ãã»ãŒãžããããŸãã
# Previous log messages omitted
$ nodemon src/index.js
[nodemon] 1.19.2
[nodemon] to restart at any time, enter `rs`
[nodemon] watching dir(s): *.*
[nodemon] starting `node src/index.js`
Connected to mysql db at host mysql
Listening on port 3000
3.ãã©ãŠã¶ã§ã¢ããªãéããŠãToDoãªã¹ãã«ããã€ãã¢ããªã远å ããŠã¿ãŠãã ããã
4.MySQLããŒã¿ããŒã¹ã«æ¥ç¶ããŠãã¢ã€ãã ãæžã蟌ãŸããŠããã確èªããŸãããããã¹ã¯ãŒãã¯secretã§ãã
docker exec -ti <mysql-container-id> mysql -p todos
ãããŠMySQLã·ã§ã«å ã§ã以äžãå®è¡ããŠãã ããã
mysql> select * from todo_items;
+--------------------------------------+--------------------+-----------+
| id | name | completed |
+--------------------------------------+--------------------+-----------+
| c906ff08-60e6-44e6-8f49-ed56a0853e85 | Do amazing things! | 0 |
| 2912a79e-8486-4bc3-a4c5-460793a575ab | Be awesome! | 0 |
+--------------------------------------+--------------------+-----------+
ãã¡ãããããªãã®ã¢ã€ãã ãå«ãŸããŠããã®ã§ãããŒãã«ã®å 容ã¯ç°ãªããŸããã§ããããã«ã¢ã€ãã ãä¿åãããŠããã®ãåãããŸãããã
Dockerããã·ã¥ããŒããèŠããšãïŒã€ã®ã³ã³ãããèµ·åããŠããŸããããããäžã€ã®ã¢ããªã«ã°ã«ãŒãåãããŠãããšãã衚瀺ã¯ãããŸããããããæ¹åããæ¹æ³ã«ã€ããŠèŠãŠãããŸãããã
èŠçŽ
ç¬ç«ããã³ã³ããã§åãå€éšã®ããŒã¿ããŒã¹ã«ããŒã¿ãä¿åããã¢ããªã±ãŒã·ã§ã³ãäœãããšãã§ããŸãããã³ã³ããã®ãããã¯ãŒã¯ã«ã€ããŠå°ãåŠã³ãDNSã䜿çšããŠãµãŒãã¹ã®çºèŠãè¡ãæ¹æ³ãçè§£ããŸããã
ãããããã®ã¢ããªãç«ã¡äžããããã«å¿ èŠãªå šãŠã®ããšã«ãå§åãããŠãããããããŸããããããã¯ãŒã¯ãäœæããã³ã³ãããèµ·åããå šãŠã®ç°å¢å€æ°ãæå®ããããŒããè§£æŸãããããå¿ èŠããããŸããèŠããããšãå€ãããŠèª°ãã«äŒããã®ãé£ãããªã£ãŠããã®ã¯ç¢ºãã§ãã
次ã®ç« ã§ã¯ãDocker Composeã«ã€ããŠã話ãããŸããDocker Composeã䜿ãã°ãã¢ããªã±ãŒã·ã§ã³ã¹ã¿ãã¯ãããç°¡åã«å ±æããŠãäžã€ã®ã·ã³ãã«ãªã³ãã³ãã ãã§èµ·åããããã«ã§ããŸãã
Docker Composeã䜿çšãã
Docker Composeã¯ããã«ãã³ã³ããã¢ããªã®å®çŸ©ãšå ±æãããããããããã«éçºããããã®ã§ããComposeã䜿ãã°ãYAMLãã¡ã€ã«ãäœæããããšã§ãµãŒãã¹ãå®çŸ©ããŠãïŒã€ã®ã³ãã³ãã§èµ·åãããã忢ãããããããšãã§ããŸãã
Composeã䜿çšãã倧ããªå©ç¹ã¯ããã¡ã€ã«ã«ã¢ããªã±ãŒã·ã§ã³ã¹ã¿ãã¯ãå®çŸ©ããïŒããŒãžã§ã³ç®¡çãããŠããïŒãããžã§ã¯ããªããžããªã®ã«ãŒãã«ä¿åããŠã誰ã§ãç°¡åã«ãããžã§ã¯ãã«ã³ã³ããªãã¥ãŒãã§ããããã«ã§ããããšã§ããå®éãGitHubãGitLabã«ã¯ãã®ãããªãããžã§ã¯ãããããããããŸãã
ã§ã¯ãæ©éåããŠãããŸãããã
Docker Composeãã€ã³ã¹ããŒã«ãã
Dockerãã¹ã¯ããã/ããŒã«ããã¯ã¹ãWindowsãMacã«ã€ã³ã¹ããŒã«ããŠãããªãããã§ã«Docker Composeã¯ã€ã³ã¹ããŒã«ãããŠããŸãããŸããPlay-with-Dockerã®ã€ã³ã¹ã¿ã³ã¹ã«ããDocker Composeã¯ã€ã³ã¹ããŒã«ãããŠããŸããLinuxãã·ã³ãã䜿ããªãããã¡ãã®ããŒãžã«åŸã£ãŠDocker Composeãã€ã³ã¹ããŒã«ããŠããã ãå¿ èŠããããŸãã
ã€ã³ã¹ããŒã«ãå®äºããããäžèšã®ã³ãã³ããå®è¡ããŠãããŒãžã§ã³æ å ±ã確èªã§ããã¯ãã§ãã
docker-compose version
Composeãã¡ã€ã«ãäœæãã
1.ã¢ããªã®ãããžã§ã¯ãã®ã«ãŒãã«ãdocker-compose.ymlãšãããã¡ã€ã«ãäœæããŸãã
2.Composeãã¡ã€ã«ã§ã¯ãã¹ããŒãããŒãžã§ã³ãå®çŸ©ãããšããããå§ããŸããã»ãšãã©ã®å Žåãææ°çã䜿ãã®ãè¯ãã§ããææ°ã®ã¹ããŒãããŒãžã§ã³ãšäºææ§ã«ã€ããŠã¯ãComposeãã¡ã€ã«ã®ã¬ãã¡ã¬ã³ã¹ãåç §ããŠãã ããã
version: 3.7
3.次ã«ãã¢ããªã®äžéšãšããŠåãããããµãŒãã¹ïŒãããã¯ã³ã³ããïŒã®ãªã¹ããå®çŸ©ããŸãã
version: "3.7"
services:
次ã¯ããµãŒãã¹ãComposeãã¡ã€ã«ã«ç§»è¡ããŠãããŸãããã
ã¢ããªã®ãµãŒãã¹ãå®çŸ©ãã
æãåºããŠããã ãããã®ã§ããã以äžã¯ã¢ããªã®ã³ã³ãããå®çŸ©ããã®ã«äœ¿çšããã³ãã³ãã§ãã
docker run -dp 3000:3000 \
-w /app -v "$(pwd):/app" \
--network todo-app \
-e MYSQL_HOST=mysql \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=secret \
-e MYSQL_DB=todos \
node:12-alpine \
sh -c "yarn install && yarn run dev"
PowerShellã䜿çšããŠããå Žåã¯ã以äžã®ãããªã³ãã³ãã䜿çšããŸããã
docker run -dp 3000:3000 `
-w /app -v "$(pwd):/app" `
--network todo-app `
-e MYSQL_HOST=mysql `
-e MYSQL_USER=root `
-e MYSQL_PASSWORD=secret `
-e MYSQL_DB=todos `
node:12-alpine `
sh -c "yarn install && yarn run dev"
1.æåã«ãã³ã³ããã®ããã®ãµãŒãã¹ãšã³ããªãšã€ã¡ãŒãžãå®çŸ©ããŸãããµãŒãã¹åã¯ä»»æã®ãã®ãéžã¶ããšãã§ããŸããååã¯èªåçã«ãããã¯ãŒã¯ãšã€ãªã¢ã¹ãšããŠäœ¿çšãããã®ã§ãMySQLãµãŒãã¹ãå®çŸ©ããã®ã楜ã«ãªããŸãã
version: "3.7"
services:
app:
image: node:12-alpine
2.äžè¬çã«ãcommandã¯imageã®å®çŸ©ã®è¿ãã«æžããŸãããé åºã¯èªç±ã§ããã§ã¯ããã¡ã€ã«ã«æžã蟌ã¿ãŸãããã
version: "3.7"
services:
app:
image: node:12-alpine
command: sh -c "yarn install && yarn run dev"
3.ã³ãã³ãã®-p 3000:3000ãšããéšåãportsã«ç§»è¡ããŸããããããã§ã¯ç°¡ç¥ããæžãæ¹ã䜿çšããŸãããåé·ã§é·ãæžãæ¹ãåãããã«äœ¿çšã§ããŸãã
version: "3.7"
services:
app:
image: node:12-alpine
command: sh -c "yarn install && yarn run dev"
ports:
- 3000:3000
4.次ã«ãã¯ãŒãã³ã°ãã£ã¬ã¯ããª(-w /app)ãšããªã¥ãŒã ãããã³ã°(-v "$(pwd):/app")ãworking_dirãšvolumesã«ç§»è¡ããŸããVolumesã®æžãæ¹ã«ãçãã®ãšé·ãã®ããããŸãã
Docker Composeã®ããªã¥ãŒã å®çŸ©ã®é·æãšããŠãã«ã¬ã³ããã£ã¬ã¯ããªããã®çžå¯Ÿãã¹ã䜿çšã§ããããšããããŸãã
version: "3.7"
services:
app:
image: node:12-alpine
command: sh -c "yarn install && yarn run dev"
ports:
- 3000:3000
working_dir: /app
volumes:
- ./:/app
5.æåŸã«ãç°å¢å€æ°ãenvironmentããŒã䜿ã£ãŠç§»è¡ããŸãã
version: "3.7"
services:
app:
image: node:12-alpine
command: sh -c "yarn install && yarn run dev"
ports:
- 3000:3000
working_dir: /app
volumes:
- ./:/app
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: secret
MYSQL_DB: todos
MySQLãµãŒãã¹ãå®çŸ©ãã
ã§ã¯ãMySQLãµãŒãã¹ãå®çŸ©ããŸããã³ã³ããã®ããã«äœ¿çšããã³ãã³ãã¯ä»¥äžã®éãã§ãã
docker run -d \
--network todo-app --network-alias mysql \
-v todo-mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=secret \
-e MYSQL_DATABASE=todos \
mysql:5.7
PowerShellã䜿çšããŠããå Žåã¯ã以äžã®ã³ãã³ãã䜿çšããŠãã ããã
docker run -d `
--network todo-app --network-alias mysql `
-v todo-mysql-data:/var/lib/mysql `
-e MYSQL_ROOT_PASSWORD=secret `
-e MYSQL_DATABASE=todos `
mysql:5.7
1.ãŸãæ°ãããµãŒãã¹ãå®çŸ©ããŠãmysqlãšåä»ãããšãèªåã§ãããã¯ãŒã¯ãšã€ãªã¢ã¹ãååŸããŸãã䜿çšããã€ã¡ãŒãžãæå®ããŸãããã
version: "3.7"
services:
app:
# The app service definition
mysql:
image: mysql:5.7
2.次ã«ãããªã¥ãŒã ãããã³ã°ãæå®ããŸããdocker runã§ã³ã³ãããèµ·åãããšããããŒã ãããªã¥ãŒã ãèªåã§äœæãããŸãããããããComposeã䜿çšããŠèµ·åãããšãã«ã¯äœæãããŸããããããã¬ãã«ã«ããvolume:ã§ããªã¥ãŒã ãå®çŸ©ããŠããããµãŒãã¹ã³ã³ãã£ã°ã®ããŠã³ããã€ã³ããæå®ããŸããããªã¥ãŒã åã ããæå®ãããšãããã©ã«ãã®ãªãã·ã§ã³ã䜿çšãããŸããã§ãããä»ã«ãå€ãã®ãªãã·ã§ã³ãå©çšå¯èœã§ãã
version: "3.7"
services:
app:
# The app service definition
mysql:
image: mysql:5.7
volumes:
- todo-mysql-data:/var/lib/mysql
volumes:
todo-mysql-data:
3.æåŸã«ãç°å¢å€æ°ãæå®ããŸãã
version: "3.7"
services:
app:
# The app service definition
mysql:
image: mysql:5.7
volumes:
- todo-mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: todos
volumes:
todo-mysql-data:
宿ããdocker-compose.ymlã¯ä»¥äžã®ããã«ãªããŸãã
version: "3.7"
services:
app:
image: node:12-alpine
command: sh -c "yarn install && yarn run dev"
ports:
- 3000:3000
working_dir: /app
volumes:
- ./:/app
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: secret
MYSQL_DB: todos
mysql:
image: mysql:5.7
volumes:
- todo-mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: todos
volumes:
todo-mysql-data:
ã¢ããªã±ãŒã·ã§ã³ã¹ã¿ãã¯ãèµ·åãã
docker-compose.ymlãçšæã§ããã®ã§ãããšã¯èµ·åããã ãã§ãã
1.ãŸããä»ã«app/dbã®ã³ããŒãå®è¡ãããŠããªãããšã確èªããŠãã ãããïŒdocker psãšdocker rm -f <ids>ã䜿çšããŠãã ãããïŒ
2.docker-compose upã³ãã³ãã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã¹ã¿ãã¯ãèµ·åããŠãã ããã-dãã©ã°ã远å ããŠãããã¯ã°ã©ãŠã³ãã§å®è¡ãããããã«ããŸãã
docker-compose up -d
å®è¡ãããšã以äžã®ããã«åºåãããã¯ãã§ãã
Creating network "app_default" with the default driver
Creating volume "app_todo-mysql-data" with default driver
Creating app_app_1 ... done
Creating app_mysql_1 ... done
ãããã¯ãŒã¯ãšåããããªã¥ãŒã ãäœæããããšãã§ããŠããŸãããããã©ã«ãã§ã¯ãDocker Composeã¯ã¢ããªã±ãŒã·ã§ã³ã¹ã¿ãã¯ã®ãããã¯ãŒã¯ãèªåã§äœæããŸãïŒComposeãã¡ã€ã«ã§å®çŸ©ããªãã£ãã®ã¯ãã®ããã§ãïŒã
åèš³è ã¡ã¢ -
docker-compose upã§ä»¥äžã®ãšã©ãŒã衚瀺ãããå Žå[ERROR] [FATAL] InnoDB: Table flags are 0 in the data dictionary but the flags in file ./ibdata1 are 0x4800!以äžã®ã³ãã³ãã§ããªã¥ãŒã åé€ãããšçŽããŸãããæåã«ééããŠ
mysql:latestã§docker-compose.ymlãæžããã®ãåå ã ã£ããããããªãã§ããdocker volume rm app_todo-mysql-data
3.docker-compose logs -fã³ãã³ãã䜿çšããŠãã°ãèŠãŠèŠãŸããããåãµãŒãã¹ã®ãã°ãäžã€ã«éçŽãããŠããã®ãåãããšæããŸããããã¯ãã¿ã€ãã³ã°ã«é¢ããåé¡ã確èªããããšãã«ãšãŠã䟿å©ã§ãã-fãã©ã°ã¯ãã°ã远åŸããã®ã§ãçæããããã°ãã©ã€ãåºåããŸãã
å®éã®åºåã¯ä»¥äžã®ããã«ãªããŸãã
mysql_1 | 2019-10-03T03:07:16.083639Z 0 [Note] mysqld: ready for connections.
mysql_1 | Version: '5.7.27' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL)
app_1 | Connected to mysql db at host mysql
app_1 | Listening on port 3000
æåã®ã©ã€ã³ã®ïŒè²ä»ããããŠããïŒãµãŒãã¹åã¯ãã¡ãã»ãŒãžãèå¥ããã®ã«åœ¹ç«ã¡ãŸããç¹å®ã®ãµãŒãã¹ã«ã€ããŠã®ãã°ãèŠãããšãã¯ããã°ã³ãã³ãã®æ«å°Ÿã«ãµãŒãã¹åã远å ããŠãã ããïŒäŸïŒdocker-compose logs -f appïŒã
å¿çš - ã¢ããªãèµ·åããåã«ããŒã¿ããŒã¹ãåŸ æ©ããã
å®éã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãèµ·åããŠããMySQLãèµ·åããŠæºåãæŽã£ãŠããæ¥ç¶ã詊ã¿ãŸããDockerã«ã¯ãã³ã³ãããå®å šã«èµ·åãå®è¡ãæºåãããŠããå¥ã®ã³ã³ãããèµ·åããããã®çµã¿èŸŒã¿ã®ãµããŒãã¯çšæãããŠããŸãããNodeããŒã¹ã®ãããžã§ã¯ãã§ã¯ãwait-portã䜿çšã§ããŸããåããããªãããžã§ã¯ãã¯ãä»ã®èšèªã»ãã¬ãŒã ã¯ãŒã¯ã«ãããŠãååšããŸãã
4.ã¢ããªãéããšãèµ·åããŠããã®ã確èªã§ããã¯ãã§ãããããŠã忢ãäžã€ã®ã³ãã³ãã§è¡ããŸãã
Dockerããã·ã¥ããŒãã§ã¢ããªã±ãŒã·ã§ã³ã¹ã¿ãã¯ã確èªãã
Dockerããã·ã¥ããŒããèŠããšãappãšããååã®ã°ã«ãŒãããããŸããããã¯Docker Composeã®ãããžã§ã¯ãåã§ãã³ã³ãããã°ã«ãŒãåããã®ã«äœ¿çšãããŠããŸããããã©ã«ãã§ã¯ããããžã§ã¯ãåã¯docker-compose.ymlãé
眮ãããŠãããã£ã¬ã¯ããªã®ååã§ãã
appã®ããããããŠã³ãéããšãcomposeãã¡ã€ã«ã§å®çŸ©ãã2ã€ã®ã³ã³ããã確èªã§ããŸãããã¡ãã®ååã¯<ãããžã§ã¯ãå>_<ãµãŒãã¹å>_<è€è£œçªå·>ãšãããµãã«ãªã£ãŠããŸãããã®ãããã§ãã©ã®ã³ã³ãããã©ã®ã¢ããªããã©ã®ã³ã³ãããmysqlããŒã¿ããŒã¹ããšããããšãåããããããªã£ãŠããŸãã
å šãŠåæ¢ãã
docker-compose downãå®è¡ããããDockerããã·ã¥ããŒãã§appå
šäœããŽãç®±ã«å
¥ããã ãã§ãå
šãŠåæ¢ã§ããŸããã³ã³ããã¯åæ¢ããããããã¯ãŒã¯ã¯åé€ãããŸãã
ããªã¥ãŒã ã®åé€
ããã©ã«ãã§ã¯ã
docker-compose downãå®è¡ããŠããcomposeãã¡ã€ã«å ã®ããŒã ãããªã¥ãŒã ã¯åé€ãããŸãããããªã¥ãŒã ãåé€ãããå Žåã¯ã--volumesãã©ã°ãä»ãå ããå¿ èŠããããŸããDockerããã·ã¥ããŒãã§ã¯ãã¢ããªã¹ã¿ãã¯ãåé€ããŠãããªã¥ãŒã ã¯åé€ãããŸããã
忢ããããä»ã®ãããžã§ã¯ãã«åãæ¿ããŠdocker-compose upãå®è¡ããã ãã§ããã®ãããžã§ã¯ããéçºããããšãã§ããŸãããšãŠãç°¡åã§ãããã
èŠçŽ
ãã®ç« ã§ã¯ãDocker Composeã«ã€ããŠãšãããã«ãã£ãŠè€æ°ãµãŒãã¹ã®ã¢ããªã±ãŒã·ã§ã³ã®å®çŸ©ãšå ±æãã©ãã ãç°¡åã«ãªãã®ããšããããšãåŠã³ãŸããã䜿ã£ãŠããã³ãã³ããé©åãªCompose圢åŒã«ç§»è¡ããŠComposeãã¡ã€ã«ãäœæããŸããã
ãã¥ãŒããªã¢ã«ãçµç€ã«å ¥ããŸããããããããããŸã§äœ¿ã£ãŠããDockerfileã«ã¯å€§ããªåé¡ãããã®ã§ãã€ã¡ãŒãžæ§ç¯ã«é¢ãããã¹ããã©ã¯ãã£ã¹ãããã€ãåãäžããŠãããããšæããŸããã§ã¯ãã¿ãŠã¿ãŸãããã
ã€ã¡ãŒãžæ§ç¯ã®ãã¹ããã©ã¯ãã£ã¹
ã»ãã¥ãªãã£ã¹ãã£ã³
ã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ã¯ãã€ã¡ãŒãžãæ§ç¯ããã docker scan ã³ãã³ãã䜿çšããŠã»ãã¥ãªãã£ã®è匱æ§ãã¹ãã£ã³ããããšã§ããDockerã¯ãSnykãšææºããŠè匱æ§ã¹ãã£ã³ãµãŒãã¹ãæäŸããŠããŸãã
ã€ã¡ãŒãžãã¹ãã£ã³ããã«ã¯ãDocker Hubã«ãã°ã€ã³ããå¿
èŠããããŸããdocker scan --loginã³ãã³ããå®è¡ããŠãããdocker scan <image-name>ã§ã€ã¡ãŒãžãã¹ãã£ã³ããŸãã
äŸãã°ããã®ãã¥ãŒããªã¢ã«ã§äœæãã getting-started ã€ã¡ãŒãžãã¹ãã£ã³ããããã«ã¯ã次ã®ã³ãã³ããå®è¡ããŸãã
$ docker scan getting-started
ã¹ãã£ã³ã§ã¯åžžã«ææ°ã®è匱æ§ããŒã¿ããŒã¹ã䜿çšããããããåºåã¯åžžã«å€åããã®ã§ãããæŠã以äžã®ãããªåºåã«ãªããŸãã
â Low severity vulnerability found in freetype/freetype
Description: CVE-2020-15999
Info: https://snyk.io/vuln/SNYK-ALPINE310-FREETYPE-1019641
Introduced through: freetype/freetype@2.10.0-r0, gd/libgd@2.2.5-r2
From: freetype/freetype@2.10.0-r0
From: gd/libgd@2.2.5-r2 > freetype/freetype@2.10.0-r0
Fixed in: 2.10.0-r1
â Medium severity vulnerability found in libxml2/libxml2
Description: Out-of-bounds Read
Info: https://snyk.io/vuln/SNYK-ALPINE310-LIBXML2-674791
Introduced through: libxml2/libxml2@2.9.9-r3, libxslt/libxslt@1.1.33-r3, nginx-module-xslt/nginx-module-xslt@1.17.9-r1
From: libxml2/libxml2@2.9.9-r3
From: libxslt/libxslt@1.1.33-r3 > libxml2/libxml2@2.9.9-r3
From: nginx-module-xslt/nginx-module-xslt@1.17.9-r1 > libxml2/libxml2@2.9.9-r3
Fixed in: 2.9.9-r4
åºåã«ã¯ãè匱æ§ã®çš®é¡ã詳现ã調ã¹ãããã®URLããããŠã©ã€ãã©ãªã®ã©ã®ããŒãžã§ã³ã§è匱æ§ãä¿®æ£ãããããšããæ å ±ãå«ãŸããŸãã
ããã€ãã®ãªãã·ã§ã³ãååšããŸãããããã«ã€ããŠã¯docker scanã®ããã¥ã¡ã³ãããåç §ãã ããã
æ°ããäœæããã€ã¡ãŒãžãã³ãã³ãã©ã€ã³äžã§ã¹ãã£ã³ããã ãã§ãªããæ°ããããã·ã¥ãããã€ã¡ãŒãžãèªåçã«ã¹ãã£ã³ãããããã«Docker Hubãèšå®ããããšãã§ããŸãããã®çµæã¯ãDocker HubãDocker Desktopã®äž¡æ¹ã§ç¢ºèªããããšãã§ããŸãã
ã€ã¡ãŒãžã®ã¬ã€ã€
ã€ã¡ãŒãžã®æ§æèŠçŽ ã確èªã§ããããšããåç¥ã§ããïŒdocker image historyã³ãã³ãã䜿çšããã°ãã€ã¡ãŒãžã«å«ãŸããåã¬ã€ã€ã®äœæã«äœ¿çšãããã³ãã³ãã確èªããããšãã§ããŸãã
1.docker image historyã³ãã³ãã䜿çšããŠããã®ãã¥ãŒããªã¢ã«ã§ä»¥åäœæããgetting-startedã€ã¡ãŒãžã®ã¬ã€ã€ãèŠãŠã¿ãŸãããã
docker image history getting-started
ãããšã以äžã®ããã«è¡šç€ºãããã¯ãã§ãïŒããããIDã¯ç°ãªããŸããïŒã
IMAGE CREATED CREATED BY SIZE COMMENT
a78a40cbf866 18 seconds ago /bin/sh -c #(nop) CMD ["node" "src/index.j⊠0B
f1d1808565d6 19 seconds ago /bin/sh -c yarn install --production 85.4MB
a2c054d14948 36 seconds ago /bin/sh -c #(nop) COPY dir:5dc710ad87c789593⊠198kB
9577ae713121 37 seconds ago /bin/sh -c #(nop) WORKDIR /app 0B
b95baba1cfdb 13 days ago /bin/sh -c #(nop) CMD ["node"] 0B
<missing> 13 days ago /bin/sh -c #(nop) ENTRYPOINT ["docker-entry⊠0B
<missing> 13 days ago /bin/sh -c #(nop) COPY file:238737301d473041⊠116B
<missing> 13 days ago /bin/sh -c apk add --no-cache --virtual .bui⊠5.35MB
<missing> 13 days ago /bin/sh -c #(nop) ENV YARN_VERSION=1.21.1 0B
<missing> 13 days ago /bin/sh -c addgroup -g 1000 node && addu⊠74.3MB
<missing> 13 days ago /bin/sh -c #(nop) ENV NODE_VERSION=12.14.1 0B
<missing> 13 days ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B
<missing> 13 days ago /bin/sh -c #(nop) ADD file:e69d441d729412d24⊠5.59MB
ããããã«ã¬ã€ã€ãã€ã¡ãŒãžã®ã¬ã€ã€ã衚ããŠããŸãããã®ç»é¢ã§ã¯ãã€ã¡ãŒãžã®ããŒã¹ãäžéšãææ°ã®ã¬ã€ã€ãŒãäžéšã«è¡šç€ºãããŠããŸããããã䜿ãã°ãçŽ æ©ãããããã®ã¬ã€ã€ã確èªãããµã€ãºã®å€§ããã€ã¡ãŒãžãçªãæ¢ããã®ã«åœ¹ç«ã¡ãŸãã
2.ããã€ãã®è¡ãçç¥ãããŠããããšã«æ°ãã€ããã§ããããã--no-truncãã©ã°ãä»ãå ãããšããã«åºåãåŸãããšãã§ããŸããïŒçç¥ããããã©ã°ã䜿ã£ãŠçç¥ãããŠããªãåºåãåŸãã£ãŠãé¢çœãã§ããããïŒ
docker image history --no-trunc getting-started
ã¬ã€ã€ãŒã®ãã£ãã·ã¥
å®éã«ã¬ã€ã€ãŒãèŠãããã§ãããããã¯ã³ã³ããã€ã¡ãŒãžã®ãã«ãæéãæžããããšã«é¢ããŠãšãŠãéèŠãªè©±ã§ãã
ã¬ã€ã€ãŒã倿Žããããäžæµã®å šãŠã®ã¬ã€ã€ãŒãåçæããå¿ èŠããããŸãã
䜿çšããŠããDockerfileãããäžåºŠèŠãŠã¿ãŸãããã
FROM node:12-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
image historyã®åºåã®è©±ã«æ»ããšãDockerfileã®ããããã®ã³ãã³ããã€ã¡ãŒãžã®æ°ããã¬ã€ã€ãŒã«ãªã£ãŠããããšãåãããŸããã€ã¡ãŒãžã«å€æŽãå ãããšããyarnã®äŸåé¢ä¿ãåã€ã³ã¹ããŒã«ãããããšãèŠããŠãããããããŸããããããä¿®æ£ããæ¹æ³ã¯ããã®ã§ããããããã«ããããã³ã«åãäŸåé¢ä¿ãã€ã³ã¹ããŒã«ãããªããŠéŠ¬é¹¿ããŠããŸãããã
ãããä¿®æ£ããã«ã¯ãDockerfileãåæ§ç¯ããŠäŸåé¢ä¿ããã£ãã·ã¥ããå¿
èŠããããŸããNodeããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãpackage.jsonãã¡ã€ã«ã§äŸåé¢ä¿ãå®çŸ©ãããŠããŸãããšããããšã¯ããã®ãã¡ã€ã«ã ããæåã«ã³ããŒããŠããã°ãäŸåé¢ä¿ãã€ã³ã¹ããŒã«ãããŠããä»ã®ãã¡ã€ã«ãã³ããŒãããŸãããªã®ã§ãpackage.jsonã倿Žãããšãã®ã¿yarnã®äŸåé¢ä¿ãåäœæãããããã«ãªããŸããçŽ æŽãããã§ãããïŒ
1.DockerfileãæŽæ°ããŠãæåã«package.jsonã®ã³ããŒãè¡ãããäŸåé¢ä¿ãã€ã³ã¹ããŒã«ãããããããä»ã®ãã¡ã€ã«ãã³ããŒãããããã«ããŸãã
FROM node:12-alpine
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn install --production
COPY . .
CMD ["node", "src/index.js"]
2.Dockerfileãšåããã©ã«ãã«.dockerignoreãšãããã¡ã€ã«ãäœæãã以äžã®å
å®¹ãæžã蟌ã¿ãŸãã
node_modules
.dockerignoreãã¡ã€ã«ã䜿ãã°ãã€ã¡ãŒãžã«å¿
èŠãªãã¡ã€ã«ã ããéžæããŠã³ããŒããããšãã§ããŸãã詳ããã¯ãããåç
§ããŠãã ããããã®å Žåãnode_modulesãã©ã«ãã¯2åç®ã®COPYã§é€å€ãããŸãããããªããã°ãRUNã®ã³ãã³ãã§çæããããã¡ã€ã«ã§äžæžããããã§ãããããªããã®æ¹æ³ãNode.jsã¢ããªã±ãŒã·ã§ã³ã§æšå¥šãããŠããããšããããšãšãä»ã®ãã¹ããã©ã¯ãã£ã¹ã«ã€ããŠã®è©³çްã¯ãDockerã§ã®Node補Webã¢ããªãã芧ãã ããã
3.docker buildã§æ°ããã€ã¡ãŒãžããã«ãããŸãã
docker build -t getting-started .
以äžã®ããã«è¡šç€ºãããã¯ãã§ãã
Sending build context to Docker daemon 219.1kB
Step 1/6 : FROM node:12-alpine
---> b0dc3a5e5e9e
Step 2/6 : WORKDIR /app
---> Using cache
---> 9577ae713121
Step 3/6 : COPY package.json yarn.lock ./
---> bd5306f49fc8
Step 4/6 : RUN yarn install --production
---> Running in d53a06c9e4c2
yarn install v1.17.3
[1/4] Resolving packages...
[2/4] Fetching packages...
info fsevents@1.2.9: The platform "linux" is incompatible with this module.
info "fsevents@1.2.9" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
[4/4] Building fresh packages...
Done in 10.89s.
Removing intermediate container d53a06c9e4c2
---> 4e68fbc2d704
Step 5/6 : COPY . .
---> a239a11f68d8
Step 6/6 : CMD ["node", "src/index.js"]
---> Running in 49999f68df8f
Removing intermediate container 49999f68df8f
---> e709c03bc597
Successfully built e709c03bc597
Successfully tagged getting-started:latest
å šãŠã®ã¬ã€ã€ãŒãåæ§ç¯ãããŠããã®ãããããšæããŸããDockerfileã倧ãã倿Žããã®ã§ãããåé¡ãããŸããã
4.src/static/index.htmlãã¡ã€ã«ãç·šéããŸãããïŒ<title>ã®ãšããã®å
容ã"The Awesome Todo App"ã«å€æŽããŸãïŒã
5.ããäžåºŠdocker build -t getting-started .ã§Dockerã€ã¡ãŒãžããã«ãããŸããä»åã¯ã衚瀺ãããå
容ãå°ãå€ãã£ãŠã以äžã®ããã«ãªãã¯ãã§ãã
Sending build context to Docker daemon 219.1kB
Step 1/6 : FROM node:12-alpine
---> b0dc3a5e5e9e
Step 2/6 : WORKDIR /app
---> Using cache
---> 9577ae713121
Step 3/6 : COPY package.json yarn.lock ./
---> Using cache
---> bd5306f49fc8
Step 4/6 : RUN yarn install --production
---> Using cache
---> 4e68fbc2d704
Step 5/6 : COPY . .
---> cccde25a3d9a
Step 6/6 : CMD ["node", "src/index.js"]
---> Running in 2be75662c150
Removing intermediate container 2be75662c150
---> 458e5c6f080c
Successfully built 458e5c6f080c
Successfully tagged getting-started:latest
ãã«ãããšãŠãæ©ããªã£ãã®ã«æ°ãã€ããã§ãããããŸããã¹ããã1-4ã«ã¯å
šãŠUsing casheãå«ãŸããŠããã®ãåãããšæããŸããããã§ããã«ããã£ãã·ã¥ã䜿ãããšãã§ããŸãããã€ã¡ãŒãžãããã·ã¥ãããã«ããæŽæ°ããã®ããšãŠãæ©ããªããŸãã
ãã«ãã¹ããŒãžãã«ã
ãã®ãã¥ãŒããªã¢ã«ã§ã¯ããŸãæ·±ãè§ŠããŸãããããã«ãã¹ããŒãžãã«ãã¯ãè€æ°ã®ã¹ããŒãžã䜿çšããŠã€ã¡ãŒãžãäœæããã®ã«åœ¹ç«ã€ãšãã§ããªããã¯ãã«ãªããŒã«ã§ãã以äžã®ãããªå©ç¹ããããŸãã
-
ã©ã³ã¿ã€ã ã®äŸåé¢ä¿ãšãã«ãæéã®äŸåé¢ä¿ãåé¢ã§ããŸãã
-
ã¢ããªãèµ·åããã®ã«å¿ èŠãªåã ããé 眮ããããšã§ãã€ã¡ãŒãžå šäœã®ãµã€ãºãæžãããŸãã
MavenãšTomcatã®äŸ
JavaããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããéã«ã¯ããœãŒã¹ã³ãŒããJavaãã€ãã³ãŒãã«ã³ã³ãã€ã«ããã®ã«JDKãå¿ èŠã«ãªããŸããããããJDKã¯æ¬çªç°å¢ã§ã¯ãã®JDKã¯å¿ èŠãããŸããããŸããã¢ããªããã«ãããã®ã«MavenãGradleã®ãããªããŒã«ã䜿ããããããŸãããããããæçµçãªã€ã¡ãŒãžã«ã¯å¿ èŠãããŸãããããã§ããã«ãã¹ããŒãžãã«ãã圹ç«ã¡ãŸãã
FROM maven AS build
WORKDIR /app
COPY . .
RUN mvn package
FROM tomcat
COPY --from=build /app/target/file.war /usr/local/tomcat/webapps
ãã®äŸã§ã¯ãbuildãšåä»ããïŒã€ç®ã®ã¹ããŒãžã§ãMavenãçšããJavaã®ãã«ããè¡ããŸããFROM tomcatããå§ãŸãïŒã€ç®ã®ã¹ããŒãžã§ãbuildã¹ããŒãžãããã¡ã€ã«ãã³ããŒããŸããæçµçãªã€ã¡ãŒãžã¯ãäœæãããæçµã¹ããŒãžïŒ--targetãã©ã°ã䜿çšãããšãªãŒããŒã©ã€ããããŸãïŒã ãã§ãã
Reactã®äŸ
Reactã¢ããªã±ãŒã·ã§ã³ããã«ããããšãã¯ãJSã³ãŒãïŒéåžžã¯JSXïŒãSASSã¹ã¿ã€ã«ã·ãŒããªã©ãéçãªHTMLãšJSãCSSã«ã³ã³ãã€ã«ããNodeç°å¢ãå¿ èŠãã§ãããµãŒããŒãµã€ãã¬ã³ããªã³ã°ãå¿ èŠãªãå Žåã¯ãæ¬çªç°å¢ã®ãã«ãã«Nodeç°å¢ã¯å¿ èŠãããŸããããããªããéçãªNginxã³ã³ããã«éçãªãªãœãŒã¹ãé 眮ããã°ããã ãã®è©±ã§ãããã
FROM node:12 AS build
WORKDIR /app
COPY package* yarn.lock ./
RUN yarn install
COPY public ./public
COPY src ./src
RUN yarn run build
FROM nginx:alpine
COPY --from=build /app/build /usr/share/nginx/html
ããã§ã¯ãnode:12ã€ã¡ãŒãžã䜿çšããŠãã«ãïŒã¬ã€ã€ãã£ãã·ã¥ã®æå€§åïŒãè¡ã£ãŠããåºåãNginxã³ã³ããã«ã³ããŒããŠããŸãããã®æ¹ãããã§ããïŒ
èŠçŽ
ã€ã¡ãŒãžãæ§é åãããæ¹æ³ãå°ãçè§£ããããšã§ãã€ã¡ãŒãžã®ãã«ãã¯æ©ããªããããå°ãªã倿Žãé 眮ã§ããããã«ãªããŸããããŸãããã«ãã¹ããŒãžãã«ãã¯ãã€ã¡ãŒãžå šäœã®ãµã€ãºãæžããããã«ãã¿ã€ã ã®äŸåé¢ä¿ãšã©ã³ã¿ã€ã ã®äŸåé¢ä¿ãåãé¢ãããšã§æçµçãªã³ã³ããã®ã»ãã¥ãªãã£ãåäžãããã®ã«åœ¹ç«ã¡ãŸãã
次ã«ããããš
ãã¥ãŒããªã¢ã«ã¯çµãã£ãããã§ãããã³ã³ããã«ã€ããŠåŠã¶ããšã¯ãã£ãšãããŸããããã§æ·±ãè§Šããããšã¯ãªãã§ãããå°ãã¿ãŠã¿ãŸãããã
ã³ã³ããã®ãªãŒã±ã¹ãã¬ãŒã·ã§ã³
æ¬çªç°å¢ã§ã³ã³ãããåããã®ã¯é£ããããšã§ãããã·ã³ã«ãã°ã€ã³ããŠdocker runãdocker-compose upãå®è¡ããããšã¯æããŸããããªãã§ããããïŒã§ã¯ãã³ã³ãããæ»ãã ãäœãèµ·ããã§ããããïŒè€æ°ã®ãã·ã³ã«ãŸããã£ãŠã¹ã±ãŒã«ããæ¹æ³ã¯ïŒã³ã³ããã®ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã¯ãã®åé¡ã解決ããŸããKubernetesãSwarmãNomadãECSã®ãããªããŒã«ã¯å
šãŠãã®åé¡ããããã«ç°ãªãæ¹æ³ã§è§£æ±ºããŸãã
äºæãããç¶æ ãåãåãããããŒãžã£ããæã€ãšããã®ãäžè¬çãªèãã§ãããã®ç¶æ ãšããã®ã¯ããWebã¢ããªã®ã€ã³ã¹ã¿ã³ã¹ãïŒã€èµ·åããŠã80çªããŒããéæŸããŠã»ããããšãããããªãã®ã§ãããããŒãžã£ã¯ã¯ã©ã¹ã¿å ã®å šãŠã®ãã·ã³ãç£èŠããäœæ¥ããã¯ãŒã«ãã«å§ä»»ããŸãããããŒãžã£ã¯ïŒã³ã³ããã忢ããããã®ãããªïŒå€æŽãç£èŠããããããå®éã®ç¶æ ãäºæãããç¶æ ãåæ ããããã«åäœããŸãã
ã¯ã©ãŠããã€ãã£ãã³ã³ãã¥ãŒãã£ã³ã°åºç€ãããžã§ã¯ã
CNCFïŒã¯ã©ãŠããã€ãã£ãåºç€ã®ãããžã§ã¯ãïŒã¯ããã³ããŒã«äŸåããªãæ§ã ãªãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§ãKubernetesãPrometheusãEnvoyãLinkerdãNATSãªã©ãå«ã¿ãŸããäœããããããžã§ã¯ãã¯ãã¡ããå šäœçãªCNCFã®å³ã¯ãã¡ãã§èŠãããšãã§ããŸãããããã®ããããã®ãããžã§ã¯ãã¯ãã¢ãã¿ãªã³ã°ããã®ã³ã°ãã»ãã¥ãªãã£ãã€ã¡ãŒãžã¬ãžã¹ããªãã¡ãã»ãŒãžã³ã°ãªã©ã®åé¡ã解決ããã®ã«åœ¹ç«ã¡ãŸãã
ãªã®ã§ãã³ã³ããã®å šå®¹ãšã¯ã©ãŠããã€ãã£ãã¢ããªã±ãŒã·ã§ã³ã®éçºãããããããªãå Žåã¯ããã²ãå©çšãã ãããã³ãã¥ããã£ã«åå ãã質åãããŠãå匷ããŠã¿ãŠãã ãããããªããåå ããŠãããããšãå¿åŸ ã¡ã«ããŠãããŸãã

















