Node.jsã¢ããªã§Dockerã³ã³ããã®äœ¿çšãéå§ããã®ã«åœ¹ç«ã€ã¹ããããã€ã¹ãããã¬ã€ãã
åæ æ¡ä»¶
ãã®ãã¥ãŒããªã¢ã«ãå®äºããã«ã¯ã次ã®ãã®ãå¿ èŠã§ãã
- ç¡æã®ããã«ãŒã¢ã«ãŠã³ãÂ
- ç¡æã®Dockerã¢ã«ãŠã³ãã«ãµã€ã³ã¢ãã ããŠãç¡æã®ç¡å¶éã®ãããªãã¯ãªããžããªãåãåãããšãã§ããŸã
- ããŒã«ã«ã§å®è¡ãããŠããããã«ãŒ
- ããŒã.jsããŒãžã§ã³ 12.18 以é
- ãã¡ã€ã«ã®ç·šéã«äœ¿çšãã IDE ãŸãã¯ããã¹ã ãšãã£ã¿ãŒã ç§ã¯VSCodeããå§ãããŸã

ããã«ãŒã®æŠèŠ
Dockerã¯ãã¢ããªã±ãŒã·ã§ã³ãéçºãåºè·ãå®è¡ããããã®ãªãŒãã³ãã©ãããã©ãŒã ã§ãã Docker ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ãã€ã³ãã©ã¹ãã©ã¯ãã£ããåé¢ã§ããããããœãããŠã§ã¢ãè¿ éã«æäŸã§ããŸããÂ
Docker ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã管çããã®ãšåãæ¹æ³ã§ã€ã³ãã©ã¹ãã©ã¯ãã£ã管çã§ããŸãã ã³ãŒããè¿ éã«åºè·ããã¹ãããããã€ããããã® Docker ã®ææ³ã掻çšããããšã§ãã³ãŒãã®èšè¿°ãšæ¬çªç°å¢ã§ã®å®è¡ã®éã®é å»¶ãå€§å¹ ã«ççž®ã§ããŸãã
ãµã³ãã«ã¢ããªã±ãŒã·ã§ã³
äŸãšããŠäœ¿çšããåçŽãª Node.js ã¢ããªã±ãŒã·ã§ã³ãäœæããŸãããã ããŒã«ã«ãã·ã³äžã«node-dockerãšããååã®ãã£ã¬ã¯ããªãäœæãã以äžã®æé ã«åŸã£ãŠåçŽãªREST APIãäœæããŸãã
$ cd [path to your node-docker directory]
$ npm init -y
$ npm install ronin-server ronin-mocks
$ touch server.js
次ã«ãREST èŠæ±ãåŠçããã³ãŒãã远å ããŸãããã ã¢ãã¯ãµãŒããŒã䜿çšããŠãå®éã®ã³ãŒãã§ã¯ãªããã¢ããªã±ãŒã·ã§ã³ã®Dockeråã«éäžã§ããããã«ããŸãã
ä»»æã® IDE ã§ãã®äœæ¥ãã£ã¬ã¯ããªãéããæ¬¡ã®ã³ãŒãã server.js ãã¡ã€ã«ã«å ¥åããŸãã
const ronin = require( 'ronin-server' )
const mocks = require( 'ronin-mocks' )
const server = ronin.server()
server.use( '/', mocks.server( server.Router(), false, true ) )
server.start()
ã¢ãã¯ãµãŒããŒã¯RoninãšåŒã°ã.jsããã©ã«ãã§ããŒã8000ã«è¡šç€ºãããŸãã ã«ãŒã (/) ãšã³ããã€ã³ãã«å¯Ÿã㊠POST èŠæ±ãè¡ãããšãã§ãããµãŒããŒã«éä¿¡ãã JSON æ§é ã¯ã¡ã¢ãªã«ä¿åãããŸãã åããšã³ããã€ã³ãã« GET èŠæ±ãéä¿¡ãã以åã« POST ãã JSON ãªããžã§ã¯ãã®é åãåä¿¡ããããšãã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®ãã¹ã
ã¢ããªã±ãŒã·ã§ã³ãèµ·åããŠãæ£ããå®è¡ãããŠããããšã確èªããŸãããã ã¿ãŒããã«ãéããäœæããäœæ¥ãã£ã¬ã¯ããªã«ç§»åããŸããÂ
$ ããŒã ãµãŒã.js
ã¢ããªã±ãŒã·ã§ã³ãæ£åžžã«åäœããŠããããšããã¹ãããã«ã¯ããŸã JSON ã API ã« POST ããŠãããGET èŠæ±ãè¡ã£ãŠããŒã¿ãä¿åãããããšã確èªããŸãã æ°ããã¿ãŒããã«ãéããæ¬¡ã®curlã³ãã³ããå®è¡ããŸãã
$ curl --request POST \
--url http://localhost:8000/test \
--header 'content-type: application/json' \
--data '{
"msg": "testing"
}'
{"code":"success","payload":[{"msg":"testing","id":"31f23305-f5d0-4b4f-a16f-6f4c8ec93cf1","createDate":"2020-08-28T21:53:07.157Z"}]}
$ curl http://localhost:8000/test
{"code":"success","meta":{"total":1,"count":1},"payload":[{"msg":"testing","id":"31f23305-f5d0-4b4f-a16f-6f4c8ec93cf1","createDate":"2020-08-28T21:53:07.157Z"}]}
ãµãŒããŒãå®è¡ãããŠããã¿ãŒããã«ã«æ»ããšããµãŒããŒãã°ã«æ¬¡ã®ãªã¯ãšã¹ãã衚瀺ãããŸãã
2020-XX-31T16:35:08:4260 INFO: POST /test
2020-XX-31T16:35:21:3560 INFO: GET /test
ããŒãã®ããã«ãŒãã¡ã€ã«ãäœæããŸã.js
ã¢ããªã±ãŒã·ã§ã³ãæ£ããå®è¡ãããã®ã§ãDockerfile ã®äœæãèŠãŠã¿ãŸããããÂ
A Dockerfile ã¯ããŠãŒã¶ãŒãã€ã¡ãŒãžãã¢ã»ã³ãã«ããããã«ã³ãã³ã ã©ã€ã³ã§åŒã³åºãããšãã§ãããã¹ãŠã®ã³ãã³ããå«ãããã¹ã ããã¥ã¡ã³ãã§ãã ã³ãã³ããå®è¡ã㊠docker build ã€ã¡ãŒãžããã«ãããããã«Dockerã«æç€ºãããšãDockerã¯ãããã®åœä»€ãèªã¿åãã1ã€ãã€å®è¡ããçµæãšããŠDockerã€ã¡ãŒãžãäœæããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®äœææé Dockerfile ãèŠãŠãããŸãããã äœæ¥ãã£ã¬ã¯ããªã®ã«ãŒãã« e ãšããååã® Dockerfilãã¡ã€ã«ãäœæãããã®ãã¡ã€ã«ãããã¹ã ãšãã£ã¿ã§éããŸãã
æèšïŒ Dockerfile ã®ååã¯éèŠã§ã¯ãããŸããããå€ãã®ã³ãã³ãã®ããã©ã«ãã®ãã¡ã€ã«åã¯åã« Dockerfileã§ãã ãã®ããããã®ã·ãªãŒãºå
šäœã§ããããã¡ã€ã«åãšããŠäœ¿çšããŸãã
æåã«è¡ãå¿ èŠãããã®ã¯ãã¢ããªã±ãŒã·ã§ã³ã«äœ¿çšããåºæ¬ã€ã¡ãŒãžã Docker ã«æç€ºããè¡ã Dockerfile ã«è¿œå ããããšã§ããÂ
Dockerfile:
FROM node:12.18.1
Docker ã€ã¡ãŒãžã¯ãä»ã®ã€ã¡ãŒãžããç¶æ¿ã§ããŸãã ãã®ãããç¬èªã®åºæ¬ã€ã¡ãŒãžãäœæãã代ããã«ãNode.js ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããã«å¿ èŠãªãã¹ãŠã®ããŒã«ãšããã±ãŒãžãæ¢ã«å«ãŸããŠããå ¬åŒã® Node.js ã€ã¡ãŒãžã䜿çšããŸãã ããã¯ããªããžã§ã¯ãæåããã°ã©ãã³ã°ã§ã¯ã©ã¹ç¶æ¿ã«ã€ããŠèããã®ãšåãæ¹æ³ãšèããããšãã§ããŸãã ã ããäŸãã°ã JavaScript ã§ Docker ã€ã¡ãŒãžãäœæã§ãããšããããæ¬¡ã®ããã«èšè¿°ã§ããŸãã
ã¯ã©ã¹ MyImage 㯠NodeBaseImage {} ãæ¡åŒµããŸã
ããã«ãããåºæ¬ã¯ã©ã¹ NodeBaseImage ããæ©èœãç¶æ¿ãããšããã¯ã©ã¹ MyImageãäœæãããŸãã
åæ§ã«ãã³ãã³ãã䜿çšãã FROM ãšãã¯ãããã®ãã¹ãŠã®æ©èœã node:12.18.1 imageã€ã¡ãŒãžã«å«ããããã«dockerã«æç€ºããŸãã
泚: ç¬èªã®åºæ¬ã€ã¡ãŒãžã®äœæã®è©³çްã«ã€ããŠã¯ã åºæ¬ã€ã¡ãŒãžã®äœæã«é¢ããããã¥ã¡ã³ããåç §ããŠãã ããã
æ®ãã®ã³ãã³ããå®è¡ãããšãã«äœæ¥ãç°¡åã«ããããã«ãäœæ¥ãã£ã¬ã¯ããªãäœæããŸããããÂ
ããã«ãããDocker ã¯ããã®ãã¹ãåŸç¶ã®ãã¹ãŠã®ã³ãã³ãã®æ¢å®ã®å ŽæãšããŠäœ¿çšããããã«æç€ºãããŸãã ãã®æ¹æ³ã§ã¯ãå®å šãªãã¡ã€ã«ãã¹ãå ¥åããå¿ èŠã¯ãããŸããããäœæ¥ãã£ã¬ã¯ããªã«åºã¥ãçžå¯Ÿãã¹ã䜿çšã§ããŸãã
WORKDIR /app
éåžžãNode.jsã§æžããããããžã§ã¯ããããŠã³ããŒãããããæåã«è¡ãããšã¯npmããã±ãŒãžãã€ã³ã¹ããŒã«ããããšã§ãã ããã«ãããã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠã®äŸåé¢ä¿ããããŒãã©ã³ã¿ã€ã ãããããèŠã€ããããšãã§ãããã£ã¬ã¯ããªã«ã€ã³ã¹ããŒã« node_modules ãããŸãã
npm installãå®è¡ããåã«ã ãš package.json package-lock.json files ãã€ã¡ãŒãžã«å
¥ããå¿
èŠããããŸãããããè¡ãã«ã¯ã COPY ãã®ã³ãã³ãã䜿çšããŸãã ãã®ã³ãã³ã㯠COPY 2 ã€ã®ãã©ã¡ãŒã¿ãŒãåããŸãã æåã®ãã©ã¡ãŒã¿ãŒã¯ãã€ã¡ãŒãžã«ã³ããŒãããã¡ã€ã«ã Docker ã«æç€ºããŸãã 2 çªç®ã®ãã©ã¡ãŒã¿ãŒã¯ããã®ãã¡ã€ã«ã®ã³ããŒå
ã Docker ã«æç€ºããŸãã ãš package-lock.json ãã¡ã€ã«ãäœæ¥ãã£ã¬ã¯ããª(/ app)ã«ã³ããŒããŸã package.json ã
COPY package.json package.json
COPY package-lock.json package-lock.json
ã€ã¡ãŒãžå
ã«package.jsonãã¡ã€ã«ãååŸããããã³ãã³ãã䜿çšã㊠ã³ãã³ããå®è¡ npm install ãã RUNãããã¯ããã·ã³ã§ããŒã«ã«ã«npm installãå®è¡ããŠããå ŽåãšãŸã£ããåãããã«æ©èœããŸãããä»åã¯ãããã®ããŒãã¢ãžã¥ãŒã«ãã€ã¡ãŒãžå
ã®node_modulesãã£ã¬ã¯ããªã«ã€ã³ã¹ããŒã«ãããŸãã
RUN npm install
ãã®æç¹ã§ãããŒãããŒãžã§ã³12.18.1ã«åºã¥ãã€ã¡ãŒãžããããäŸåé¢ä¿ãã€ã³ã¹ããŒã«ãããŠããŸãã æ¬¡ã«è¡ãå¿ èŠãããã®ã¯ããœãŒã¹ã³ãŒããç»åã«è¿œå ããããšã§ãã äžèšã® package.json ãã¡ã€ã«ã§è¡ã£ãã®ãšåãããã«ãCOPY ã³ãã³ãã䜿çšããŸãã
COPY . .
ãã®COPYã³ãã³ãã¯ãçŸåšã®ãã£ã¬ã¯ããªã«ãããã¹ãŠã®ãã¡ã€ã«ãååŸããããããã€ã¡ãŒãžã«ã³ããŒããŸãã ããã§ãã€ã¡ãŒãžãã³ã³ãããŒå ã§å®è¡ããããšãã«å®è¡ããã³ãã³ããDockerã«æç€ºããã ãã§ãã ãããè¡ãã«ã¯ãCMDã³ãã³ãã䜿çšããŸããÂ
CMD [ "node", "server.js" ]
以äžã¯å®å šãªããã«ãŒãã¡ã€ã«ã§ãã
FROM node:12.18.1
WORKDIR /app
COPY package.json package.json
COPY package-lock.json package-lock.json
RUN npm install
COPY . .
CMD [ "node", "server.js" ]
ã€ã¡ãŒãžã®æ§ç¯
Dockerfile ãäœæããã®ã§ãã€ã¡ãŒãžããã«ãããŸãããã ãããè¡ãã«ã¯ãdocker build ã³ãã³ãã䜿çšããŸãã ãã®ã³ãã³ã㯠docker build ãDockerãã¡ã€ã«ãšãã³ã³ããã¹ããããDockerã€ã¡ãŒãžããã«ãããŸãã ãã«ãã®ã³ã³ããã¹ãã¯ãæå®ããã PATH ãŸã㯠URL ã«ãããã¡ã€ã«ã®ã»ããã§ãã Docker ãã«ã ããã»ã¹ã¯ãã³ã³ããã¹ãå
ã«ããä»»æã®ãã¡ã€ã«ã«ã¢ã¯ã»ã¹ã§ããŸããÂ
ãã«ã ã³ãã³ãã¯ããªãã·ã§ã³ã§ âtag ãã©ã°ãåãåããŸãã ã¿ã°ã¯ãç»åã®ååãšãªãã·ã§ã³ã®ã¿ã°ããname:tagã圢åŒã§èšå®ããããã«äœ¿çšãããŸãã ããã§ã¯ãç©äºãç°¡çŽ åããããã«ããªãã·ã§ã³ã®ãã¿ã°ããçç¥ããŸãã ã¿ã°ãæž¡ããªãå Žåãdockerã¯ããã©ã«ãã®ã¿ã°ãšããŠãlatestãã䜿çšããŸãã ããã¯ããã«ãåºåã®æåŸã®è¡ã«è¡šç€ºãããŸãã
æåã® Docker ã€ã¡ãŒãžãäœæããŸãããã
$ docker build --tag node-docker .
Sending build context to Docker daemon 82.94kB
Step 1/7 : FROM node:12.18.1
---> f5be1883c8e0
Step 2/7 : WORKDIR /code
...
Successfully built e03018e56163
Successfully tagged node-docker:latest
ããŒã«ã«ç»åã®è¡šç€º
ããŒã«ã«ãã·ã³ã«ããç»åã®ãªã¹ãã衚瀺ããã«ã¯ã2ã€ã®ãªãã·ã§ã³ããããŸãã 1 ã€ã¯ CLI ã䜿çšããæ¹æ³ããã 1 ã€ã¯ Docker ãã¹ã¯ãããã䜿çšããæ¹æ³ã§ãã çŸåšã¿ãŒããã«ã§äœæ¥ããŠããã®ã§ãCLIã䜿çšããã€ã¡ãŒãžã®äžèŠ§è¡šç€ºãèŠãŠã¿ãŸãããã
ç»åãäžèŠ§è¡šç€ºããã«ã¯ãã³ãã³ããå®è¡ããã ãã§ã images ã
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
node-docker latest 3809733582bc About a minute ago 945MB
node 12.18.1 f5be1883c8e0 2 months ago 918MB
å°ãªããšã 2 ã€ã®ç»åã衚瀺ãããŸãã 1ã€ã¯åºæ¬ã€ã¡ãŒãžçšã§ããã1ã€ã¯ãã«ãããã€ã¡ãŒãž node:12.18.1 çšã§ã node-docker:latest.
ç»åã®ã¿ã°ä»ã
åè¿°ã®ããã«ãã€ã¡ãŒãžåã¯ã¹ã©ãã·ã¥ã§åºåãããååã³ã³ããŒãã³ãã§æ§æãããŸãã ååã³ã³ããŒãã³ãã«ã¯ãå°æåãæ°åãåºåãæåãå«ããããšãã§ããŸãã åºåãèšå·ã¯ãããªãªãã1 ã€ãŸã㯠2 ã€ã®ã¢ã³ããŒã¹ã³ã¢ããŸã㯠1 ã€ä»¥äžã®ããã·ã¥ãšããŠå®çŸ©ãããŸãã ååã³ã³ããŒãã³ãã®å é ãŸãã¯æ«å°Ÿãåºåãèšå·ã«ããããšã¯ã§ããŸããã
ã€ã¡ãŒãžã¯ããããã§ã¹ããšã¬ã€ã€ãŒã®ãªã¹ãã§æ§æãããŸãã ãã®æç¹ã§ã¯ããããã®ã¢ãŒãã£ãã¡ã¯ãã®çµã¿åãããæããã¿ã°ã以å€ã®ãããã§ã¹ããšã¬ã€ã€ãŒã«ã€ããŠã¯ããŸãå¿é ããªãã§ãã ããã ç»åã«ã¯è€æ°ã®ã¿ã°ãä»ããããšãã§ããŸãã äœæããç»åã® 2 ã€ç®ã®ã¿ã°ãäœæãããã®ã¬ã€ã€ãŒãèŠãŠã¿ãŸãããã
äžèšã§ãã«ãããã€ã¡ãŒãžã®æ°ããã¿ã°ãäœæããã«ã¯ã次ã®ã³ãã³ããå®è¡ããŸãã
$ ããã«ãŒã¿ã° ããŒãããã«ãŒ:ææ°ã®ããŒãããã«ãŒ:v1.0.0
docker tag ã³ãã³ãã¯ãã€ã¡ãŒãžã®æ°ããã¿ã°ãäœæããŸãã æ°ããã€ã¡ãŒãžã¯äœæãããŸããã ã¿ã°ã¯åãç»åãæããç»åãåç §ããå¥ã®æ¹æ³ã§ãã
次ã«ãã³ãã³ããå®è¡ããŠã docker images ããŒã«ã«ã€ã¡ãŒãžã®ãªã¹ãã衚瀺ããŸãã
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
node-docker latest 3809733582bc 24 minutes ago 945MB
node-docker v1.0.0 3809733582bc 24 minutes ago 945MB
node 12.18.1 f5be1883c8e0 2 months ago 918MB
ã§å§ãŸã 2 ã€ã®ç»å node-dockerãããããšãããããŸãã åãèŠã IMAGE ID ãšã2ã€ã®ç»åã®å€ãåãã§ããããšãããããŸãã
å
ã»ã©äœæããã¿ã°ãåé€ããŸãããã ãããè¡ãã«ã¯ã次ã®ã³ãã³ãã䜿çšããŸã rmi ã ãªãã³ã㯠rmi cãç»åã®åé€ãã®ç¥ã§ããÂ
$ docker rmi node-docker:v1.0.0
Untagged: node-docker:v1.0.0
Docker ããã®å¿çã§ã¯ãã€ã¡ãŒãžã¯åé€ãããŠãããã"ã¿ã°ãªã" ã®ã¿ã§ããããšãããããŸãã imagesã³ãã³ããå®è¡ããŠããããå確èªããŠãã ããã
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
node-docker latest 3809733582bc 32 minutes ago 945MB
node 12.18.1 f5be1883c8e0 2 months ago 918MB
ã¿ã°ä»ã :v1.0.0 ãããç»åã¯åé€ãããŸãããã node-docker:latest ãã·ã³ã§ã¿ã°ãåŒãç¶ã䜿çšã§ããŸãã
ã³ã³ããã®å®è¡
ã³ã³ããã¯éåžžã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããã»ã¹ã§ããããã®ããã»ã¹ã¯ãç¬èªã®ãã¡ã€ã«ã·ã¹ãã ãç¬èªã®ãããã¯ãŒã¯ãããã³ãã¹ããšã¯å¥ã®ç¬èªã®åé¢ãããããã»ã¹ããªãŒãæã€ãšããç¹ã§åé¢ãããŠããŸãã
ã³ã³ãããŒå
ã§ã€ã¡ãŒãžãå®è¡ããã«ã¯ãdocker run ã³ãã³ãã䜿çšããŸãã ãã®ã³ãã³ãã«ã¯ docker run 1 ã€ã®ãã©ã¡ãŒã¿ãŒãå¿
èŠã§ããããããã€ã¡ãŒãžåã§ãã ã€ã¡ãŒãžãèµ·åããŠãæ£ããå®è¡ãããŠããããšã確èªããŸãããã ã¿ãŒããã«ã§æ¬¡ã®ã³ãã³ããå®è¡ããŸãã
$ ããã«ãŒã¯ããŒãããã«ãŒãå®è¡ããŸã
ãã®ã³ãã³ããå®è¡ãããšãã³ãã³ã ããã³ããã«æ»ã£ãŠããªãããšãããããŸãã ããã¯ãã¢ããªã±ãŒã·ã§ã³ãRESTãµãŒããŒã§ãããã³ã³ããã忢ãããŸã§OSã«å¶åŸ¡ãæ»ãããšãªããçä¿¡èŠæ±ãåŸ æ©ããã«ãŒãã§å®è¡ãããããã§ãã
curlã³ãã³ãã䜿çšããŠãµãŒããŒã«GETãªã¯ãšã¹ããäœæããŸãããã
$ curl --request POST \
--url http://localhost:8000/test \
--header 'content-type: application/json' \
--data '{
"msg": "testing"
}'
curl: (7) Failed to connect to localhost port 8000: Connection refused
ã芧ã®ãšããããµãŒããŒãžã®æ¥ç¶ãæåŠããããããcurlã³ãã³ãã¯å€±æããŸããã ã€ãŸããããŒã8000ã§ããŒã«ã«ãã¹ãã«æ¥ç¶ã§ããŸããã§ããã ããã¯ãã³ã³ãããŒããããã¯ãŒã¯ãå«ãåé¢ã§å®è¡ãããããã§ãã ã³ã³ããã忢ããããŒã«ã«ãããã¯ãŒã¯ã§å ¬éãããŠããããŒã8000ã§åèµ·åããŸãããã
ã³ã³ããã忢ããã«ã¯ãctrl-c ããŒãæŒããŸãã ããã«ãããã¿ãŒããã«ããã³ããã«æ»ããŸãã
ã³ã³ãããŒã®ããŒããçºè¡ããã«ã¯ãdocker run ã³ãã³ãã§ âpublish ãã©ã° (-p ç¥ããŠ) ã䜿çšããŸãã âpublish ã³ãã³ãã®åœ¢åŒã¯ [host port]:[container port]ã§ãã ãããã£ãŠãã³ã³ããå
ã®ããŒã8000ãã³ã³ããå€ã®ããŒã3000ã«å
¬éããå Žåã¯ãâ publish ãã©ã°ãæž¡3000:8000 ããŸããÂ
ã³ã³ãããŒãèµ·åããããŒã 8000 ããã¹ãã®ããŒã 8000 ã«å ¬éããŸãã
$ docker run --publish 8000:8000 node-docker
ããã§ã¯ãäžããcurlã³ãã³ããåå®è¡ããŸãããã
$ curl --request POST \
--url http://localhost:8000/test \
--header 'content-type: application/json' \
--data '{
"msg": "testing"
}'
{"code":"success","payload":[{"msg":"testing","id":"dc0e2c2b-793d-433c-8645-b3a553ea26de","createDate":"2020-09-01T17:36:09.897Z"}]}
æåïŒ ããŒã8000ã®ã³ã³ããå ã§å®è¡ãããŠããã¢ããªã±ãŒã·ã§ã³ã«æ¥ç¶ã§ããŸããã ã³ã³ãããŒãå®è¡ãããŠããã¿ãŒããã«ã«æ»ããšãPOST èŠæ±ãã³ã³ãœãŒã«ã«èšé²ãããŸãã
2020-09-01T17:36:09:8770æ
å ±:æçš¿/ãã¹ã
ctrl-c ãæŒããŠã³ã³ããã忢ããŸãã
ãã¿ãã ã¢ãŒãã§å®è¡
ããã¯ãããŸã§ã®ãšããçŽ æŽãããããšã§ããããµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã¯WebãµãŒããŒã§ãããã¿ãŒããã«ãã³ã³ããã«æ¥ç¶ããå¿
èŠã¯ãããŸããã Docker ã¯ãã³ã³ãããŒããã¿ãã ã¢ãŒããŸãã¯ããã¯ã°ã©ãŠã³ãã§å®è¡ã§ããŸãã ãããè¡ãã«ã¯ãâdetach ãŸãã¯ç¥ããŠ-dã䜿çšã§ããŸãã Dockerã¯ä»¥åãšåãããã«ã³ã³ãããèµ·åããŸãããä»åã¯ã³ã³ããããããã¿ãããããã¿ãŒããã«ããã³ããã«æ»ããŸãã
$ docker run -d -p 8000:8000 node-docker
ce02b3179f0f10085db9edfccd731101868f58631bdf918ca490ff6fd223a93b
Dockerã¯ããã¯ã°ã©ãŠã³ãã§ã³ã³ãããèµ·åããã¿ãŒããã«ã«ã³ã³ããIDãåºåããŸããã
ç¹°ãè¿ãã«ãªããŸãããã³ã³ãããæ£ããå®è¡ãããŠããããšã確èªããŸãããã äžããåãcurlã³ãã³ããå®è¡ããŸãã
$ curl --request POST \
--url http://localhost:8000/test \
--header 'content-type: application/json' \
--data '{
"msg": "testing"
}'
{"code":"success","payload":[{"msg":"testing","id":"dc0e2c2b-793d-433c-8645-b3a553ea26de","createDate":"2020-09-01T17:36:09.897Z"}]}
ã³ã³ããã®äžèŠ§è¡šç€º
ã³ã³ãããããã¯ã°ã©ãŠã³ãã§å®è¡ããã®ã§ãã³ã³ãããå®è¡ãããŠãããã©ããããŸãã¯ãã·ã³äžã§ä»ã®ã³ã³ãããå®è¡ãããŠãããã©ãããã©ã®ããã«ç¥ãããšãã§ããŸãã? ããŠãç§ãã¡ã¯ããã«ãŒpsã³ãã³ããå®è¡ããããšãã§ããŸãã Linuxã®å Žåãšåæ§ã«ããã·ã³äžã®ããã»ã¹ã®ãªã¹ãã衚瀺ããã«ã¯ãpsã³ãã³ããå®è¡ããŸãã åã粟ç¥ã§ãdocker psã³ãã³ããå®è¡ããŠããã·ã³ã§å®è¡ãããŠããã³ã³ããã®ãªã¹ãã衚瀺ã§ããŸãã
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce02b3179f0f node-docker "docker-entrypoint.sâŠ" 6 minutes ago Up 6 minutes 0.0.0.0:8000->8000/tcp wonderful_kalam
psã³ãã³ãã¯ãå®è¡äžã®ã³ã³ããã«é¢ããäžé£ã®ããšãäŒããŸãã ã³ã³ããIDãã³ã³ããå ã§å®è¡ãããŠããã€ã¡ãŒãžãã³ã³ããã®èµ·åã«äœ¿çšãããã³ãã³ããäœææãã¹ããŒã¿ã¹ãå ¬éãããããŒããã³ã³ããã®ååã確èªã§ããŸããÂ
ããªãã¯ããããç§ãã¡ã®ã³ã³ããã®ååãã©ãããæ¥ãŠããã®ãçåã«æã£ãŠããã§ãããã èµ·åæã«ã³ã³ãããŒã®ååãæå®ããªãã£ããããDocker ã¯ã©ã³ãã ãªååãçæããŸããã ããã¯ããã«ä¿®æ£ããŸãããæåã«ã³ã³ããã忢ããå¿
èŠããããŸãã ã³ã³ããã忢ããã«ã¯ã docker stop ã³ã³ããã忢ããã³ãã³ããå®è¡ããŸãã ã³ã³ãããŒã®ååãæž¡ãããã³ã³ãã㌠ID ã䜿çšããå¿
èŠããããŸãã
$ docker stop wonderful_kalam
wonderful_kalam
次ã«ãã³ãã³ããåå®è¡ããŠã docker ps å®è¡äžã®ã³ã³ãããŒã®äžèЧã衚瀺ããŸãã
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ã³ã³ããã®åæ¢ãéå§ãããã³åœå
Docker ã³ã³ãããŒã¯ãéå§ã忢ãããã³åèµ·åã§ããŸãã ã³ã³ããã忢ãããšãåé€ãããŸããããã¹ããŒã¿ã¹ã忢ã«å€æŽãããã³ã³ããå
ã®ããã»ã¹ã忢ããŸãã ã³ãã³ããå®è¡ãããšãã® docker ps æ¢å®ã®åºåã§ã¯ãå®è¡äžã®ã³ã³ãããŒã®ã¿ã衚瀺ãããŸãã æž¡ããš âall ãŸãã¯âa ç¥ããŠã忢ããŠãããéå§ãããŠãããã«ããããããã·ã¹ãã äžã®ãã¹ãŠã®ã³ã³ããã衚瀺ãããŸãã
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce02b3179f0f node-docker "docker-entrypoint.sâŠ" 16 minutes ago Exited (0) 5 minutes ago wonderful_kalam
ec45285c456d node-docker "docker-entrypoint.sâŠ" 28 minutes ago Exited (0) 20 minutes ago agitated_moser
fb7a41809e5d node-docker "docker-entrypoint.sâŠ" 37 minutes ago Exited (0) 36 minutes ago goofy_khayyam
æé ã«æ²¿ã£ãŠäœæ¥ããŠããå Žåã¯ãããã€ãã®ã³ã³ãããŒãäžèŠ§è¡šç€ºãããŸãã ãããã¯ãéå§ããã³åæ¢ããããåé€ãããŠããªãã³ã³ãããŒã§ãã
忢ããã°ããã®ã³ã³ãããåèµ·åããŸãããã 忢ããã°ããã®ã³ã³ããã®ååãèŠã€ããŠãåèµ·åã³ãã³ãã§ä»¥äžã®ã³ã³ããã®ååã眮ãæããŸãã
$ ããã«ãŒåèµ·åwonderful_kalam
次ã«ãpsã³ãã³ãã䜿çšããŠããã¹ãŠã®ã³ã³ãããå床äžèŠ§è¡šç€ºããŸãã
$ docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce02b3179f0f node-docker "docker-entrypoint.sâŠ" 19 minutes ago Up 8 seconds 0.0.0.0:8000->8000/tcp wonderful_kalam
ec45285c456d node-docker "docker-entrypoint.sâŠ" 31 minutes ago Exited (0) 23 minutes ago agitated_moser
fb7a41809e5d node-docker "docker-entrypoint.sâŠ" 40 minutes ago Exited (0) 39 minutes ago goofy_khayyam
åèµ·åããã°ããã®ã³ã³ãããŒããã¿ãã ã¢ãŒãã§èµ·åãããããŒã 8000 ãå ¬éãããŠããããšã«æ³šæããŠãã ããã ãŸããã³ã³ãããŒã®ç¶æ ã "Up X ç§" ã§ããããšã確èªããŸãã ã³ã³ãããŒãåèµ·åãããšãæåã«èµ·åãããšããšåããã©ã°ãŸãã¯ã³ãã³ãã§ã³ã³ãããŒãéå§ãããŸãã
ãã¹ãŠã®ã³ã³ããã忢ããŠåé€ããã©ã³ãã ãªååä»ãã®åé¡ãä¿®æ£ããŠã¿ãŸãããã
å ã»ã©éå§ããã³ã³ãããŒã忢ããŸãã å®è¡äžã®ã³ã³ããã®ååãèŠã€ãã以äžã®ã³ãã³ãã®ååãã·ã¹ãã äžã®ã³ã³ããã®ååã«çœ®ãæããŸãã
$ docker stop wonderful_kalam
wonderful_kalam
ãã¹ãŠã®ã³ã³ããã忢ããã®ã§ãããããåé€ããŸãããã ã³ã³ãããŒãåé€ããããšããã®ã³ã³ãããŒã¯å®è¡ãããªããªããåæ¢ç¶æ ã§ããªããªããŸãããã³ã³ãããŒå ã®ããã»ã¹ã¯åæ¢ãããã³ã³ãããŒã®ã¡ã¿ããŒã¿ã¯åé€ãããŸãã
$ docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce02b3179f0f node-docker "docker-entrypoint.sâŠ" 19 minutes ago Up 8 seconds 0.0.0.0:8000->8000/tcp wonderful_kalam
ec45285c456d node-docker "docker-entrypoint.sâŠ" 31 minutes ago Exited (0) 23 minutes ago agitated_moser
fb7a41809e5d node-docker "docker-entrypoint.sâŠ" 40 minutes ago Exited (0) 39 minutes ago goofy_khayyam
ã³ã³ãããŒãåé€ããã«ã¯ãã³ã³ãããŒåãæž¡ã docker rm ã³ãã³ããå®è¡ããã ãã§ãã 1 ã€ã®ã³ãã³ãã§è€æ°ã®ã³ã³ãããŒåãã³ãã³ãã«æž¡ãããšãã§ããŸãã ç¹°ãè¿ãã«ãªããŸããã以äžã®ã³ãã³ãã®ã³ã³ããåãã·ã¹ãã ã®ã³ã³ããåã«çœ®ãæããŸãã
$ docker rm wonderful_kalam agitated_moser goofy_khayyam
wonderful_kalam
agitated_moser
goofy_khayyam
docker ps --all ã³ãã³ããå床å®è¡ããŠããã¹ãŠã®ã³ã³ãããŒããªããªã£ãããšã確èªããŸãã
ããã§ã¯ãåä»ãªã©ã³ãã ãªååã®åé¡ã«å¯ŸåŠããŸãããã æšæºçãªæ¹æ³ã¯ãã³ã³ãããŒã§å®è¡ãããŠãããã®ãšãã³ã³ãããŒãé¢é£ä»ããããŠããã¢ããªã±ãŒã·ã§ã³ãŸãã¯ãµãŒãã¹ãç°¡åã«èå¥ã§ãããšããåçŽãªçç±ã§ãã³ã³ãããŒã«ååãä»ããããšã§ãã ã³ãŒãå ã®å€æ°ã®é©åãªåœåèŠåãšåæ§ã«ãèªã¿ããããªããŸãã ã³ã³ããã®åœåãåæ§ã§ãã
ã³ã³ãããŒã«ååãä»ããã«ã¯ãrun ã³ãã³ãã« âname ãã©ã°ãæž¡ãã ãã§ãã
$ docker run -d -p 8000:8000 --name rest-server node-docker
1aa5d46418a68705c81782a58456a4ccdb56a309cb5e6bd399478d01eaa5cdda
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1aa5d46418a6 node-docker "docker-entrypoint.sâŠ" 3 seconds ago Up 3 seconds 0.0.0.0:8000->8000/tcp rest-server
ããã§ã¯ãããã¯ããè¯ãã§ãã ããã§ãååã«åºã¥ããŠã³ã³ãããç°¡åã«èå¥ã§ããŸãã
çµè«
ãã®æçš¿ã§ã¯ãDockerfileã䜿çšããDockerã€ã¡ãŒãžã®äœæãã€ã¡ãŒãžã®ã¿ã°ä»ããããã³ã€ã¡ãŒãžã®ç®¡çã«ã€ããŠåŠã³ãŸããã æ¬¡ã«ãã³ã³ãããŒã®å®è¡ãããŒãã®å ¬éãããã³ãã¿ãã ã¢ãŒãã§ã®ã³ã³ãããŒã®å®è¡ã«ã€ããŠèª¬æããŸããã æ¬¡ã«ãã³ã³ãããŒã®èµ·åã忢ãåèµ·åã«ãã管çã«ã€ããŠåŠç¿ããŸããã ãŸããã³ã³ãããããç°¡åã«èå¥ã§ããããã«ãã³ã³ããã«ååãä»ããããšãæ€èšããŸããã
ããŒã 2ã§ã¯ãã³ã³ããã§ããŒã¿ããŒã¹ãå®è¡ãããããã¢ããªã±ãŒã·ã§ã³ã«æ¥ç¶ããæ¹æ³ãèŠãŠãããŸãããŸããããŒã«ã«éçºç°å¢ã®èšå®ãš ãDocker ã䜿çšããã€ã¡ãŒãžã®å ±æã«ã€ããŠã説æããŸãã
ããã«è©³ãã
- Node.jsèšèªå¥ã¬ã€ãã«é£ã³èŸŒã