
Node.js๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์๋ ๋น์ฐํ Node.js๊ฐ ์ค์น๋์ด ์์ด์ผํ๋ค.
Node.js๊ฐ ์ค์น๋์ด ์์ด์ผย npm install,ย npm init ๋๋ย node server.js์ ๊ฐ์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ค. Node.js๋ ๊ณต์ ํํ์ด์ง์์ ์ฝ๊ฒ ๋ค์ด๋ก๋ ๋ฐ์ ์ ์๋ค. ์ค์น๊ฐ ์ ๋์๋์ง ํ์ธํ๊ธฐ ์ํด์ย node -v ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ค์น ๋ฒ์ ์ด ๋์จ๋ค๋ฉด ์ค์น๊ฐ ์๋ฃ๋ ๊ฒ์ด๋ค.

๋ค์์ Node.js ์ดํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ฑํ ๋๋ ํ ๋ฆฌ๋ฅผ ํ๋ ๋ง๋ค๊ณ ๋๋ ํ ๋ฆฌ ์์ผ๋ก ์ด๋ํด์ค๋ค. ๋ค์์ย npm init -yย ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํด์ย package.jsonย ํ์ผ์ ์์ฑํ๋ค.ย package.jsonย ํ์ผ์ ์ข
์์ฑ์ ๋ช
์ํ ํ์ผ๋ก ํ์ด์ฌ์ย requirements.txtย ํ์ผ๊ณผ ๋น์ทํ ์ญํ ๋ก ์๊ฐํ๋ฉด ๋๋ค.
์๋ ์์ฑ๋๋ย package.jsonย ํ์ผ์ ์ฝ๊ฐ ์์ ํด์ค๋ค. index.js๋ฅผ server.js๋ก ์์ ํด์ฃผ๊ณ ย express.jsย ๋ฅผย dependencies์ ์ถ๊ฐํด์ค๋ค.
npm install express์ npm install redis๋ฅผ ํด์ฃผ๋ฉด ๋๋ค.
๊ทธ๋ฌ๊ณ package.json์ ํ์ธํด์ฃผ์.
{
"name": "docker-practice",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.18.1",
"redis": "^3.0.2"
}
}
๊ทธ ํ server.js๋ฅผ ์์ฑํด์ค๋ค.
const express=require('express');
const PORT=8080;
const app=express();
app.get('/', (req, res) => {
res.send("๋ฐ๊ฐ์ต๋๋ค.");
})
app.listen(PORT, ()=>{
console.log('Server is running');
})
๊ทธ ๋ค์์ ๋์ปค ํ์ผ์ ์์ฑํ๋ค.
FROM node:10
COPY ./ ./
RUN npm install
CMD ["node", "server.js"]
FROM node:10ย ์ ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ฅผ ๋ช
์ํ๋ค. node๋ผ๋ ์ด๋ฏธ์ง์ ํ๊ทธ๋ 10์ธ ์ด๋ฏธ์ง๋ฅผ ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ก ์ฌ์ฉํ๋ค.COPY ./ ./ย ๋ ๋ช
๋ น์ด ๊ทธ๋๋ก ๋ณต์ฌ๋ฅผ ๋ช
์ํ๋ค.ย COPY <local file or directory> <image directoryย ๊ฐ ๋๋ค. ๋ฐ๋ผ์ย COPY ./ ./ย ๋ local directory ์ย package.jsonย ,ย server.jsย ๋ฅผ ๊ทธ๋๋ก image์ root directory์ ๋ณต์ฌํ๋ค.npm installย ์ ์ค์น๋ Node.js๋ฅผ ์ด์ฉํด์ย package.jsonย ์ ๋ช
์๋ ์ข
์์ฑ์ ์น์์ ์๋์ผ๋ก ๋ค์ด๋ก๋ ๋ฐ๋๋ค. ๋์ปค ์ด๋ฏธ์ง๊ฐย npmย ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ Node.js๊ฐ ์ค์น๋์ด ์๋ค๋ ๋ป์ด๋ค. ์ฆ,ย node:10ย ๋ฒ ์ด์ค ์ด๋ฏธ์ง์ Node.js๊ฐ ์ค์น๋์ด ์๋ค.CMD ["node", "server.js"]ย ๋ย server.js๋ฅผ ๊ตฌ๋์ํจ๋ค.์ด์ Dockerfile์ ์ด์ฉํด์ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋น๋ํด๋ณด์.
docker build . -t <์ด๋ฏธ์ง ์ด๋ฆ:ํ๊ทธ>
์์ ๋ช
๋ น์ด์์ย .ย ์ ํ์ฌ ๋๋ ํ ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค.ย -tย ๋ ๋์ปค ์ด๋ฏธ์ง์ ์ด๋ฆ๊ณผ ํ๊ทธ๋ฅผ ๋ช
์ํ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค. ์ด๋ฏธ์ง ์ด๋ฆ๊ณผ ํ๊ทธ๋ฅผ ๋ช
์ํ์ง ์์ผ๋ฉด ์ด๋ฆ๊ณผ ํ๊ทธ๊ฐย <none>์ผ๋ก ์ค์ ๋๋ค.

๊ทธ๋ ๊ฒ ๋ช ๋ น์ด๋ฅผ ์น๋ฉด ์ ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์๊ณ ๋ด๊ฐ ์ ํ ์ด๋ฆ์ nodeJs๋ก ๋น๋๊ฐ ๋ ๊ฒ์ ํ์ธ ํ ์ ์์๋ค.
์ด๋ฏธ์ง๊ฐ ๋น๋๋์๋ค.
docker run -p 5000:8080 <์ด๋ฏธ์ง์ด๋ฆ>
-pย ์ต์
์ ํฌํธ ๋งคํ์ ์๋ฏธํ๋ค.ย server.js๋ ํฌํธ 8080 ๋ฒ์ผ๋ก ์ํตํ๋ค. ๋ก์ปฌ ๋คํธ์ํฌ์ ์ปจํ
์ด๋ ๋คํธ์ํฌ๋ ๊ฒฉ๋ฆฌ๋์ด ์์ผ๋ฏ๋ก ๋ก์ปฌ์ 5000๋ฒ ํฌํธ์ ์ปจํ
์ด๋์ 8080ํฌํธ๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ํฌํธ ๋งคํ์ด ํ์ํ๋ค.

์ด๋ ๊ฒ server.js์์ ์ฝ์๋ก๊ทธ๋ก ์ค์ ํด์ค ๋ฉ์ธ์ง๊ฐ ์ ๋จ๋ ๊ฑฐ๋ฉด ์ด๋ฏธ์ง๋ฅผ ์คํ์ํจ๊ฑฐ๋ผ ๋ณด๋ฉด ๋๋ค.
์๋ฒ๊ฐ ์ ๋์๊ฐ๊ณ ์๋์งย localhost:5000์ผ๋ก ์ ์ํด์ ํ์ธํด๋ณด์.

WORKDIRย ์ ๋์ปค ์ด๋ฏธ์ง ๋ด์์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ด๋ํ ๋ ์ฌ์ฉํ๋ค. ์ฆย cdย ์ ๊ฐ์ ์ญํ ์ ํ๋ค.
WORKDIRย ์ ์ฌ์ฉํด์ผ ํ๋ ์ฃผ์ํ ์ด์ ๋ ๋ฎ์ด์ฐ๊ธฐ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์๋ค. ๋ง์ฝ ๋ก์ปฌ์ย libย ๋ผ๋ ๋๋ ํ ๋ฆฌ๊ฐ ์๊ณ ๋์ปค ์ด๋ฏธ์ง ๋ด๋ถ์๋ย libย ๋ผ๋ ๋๋ ํ ๋ฆฌ๊ฐ ์๋ ์ํฉ์์ย COPY ./ ./ย ๋ฅผ ๋ช
์ํ๋ฉด ๋์ปค ์์ย lib์ ๋ฎ์ด์์์ง๋ค. ์ฆ, ์ฌ๋ผ์ง๋ค๋ ๋ป์ด๋ค. ๊ทธ๋์ย COPY๋ฅผ ํ ๋๋ ํ ๋ฆฌ๋ฅผ ์ด๋์์ผ์ฃผ๋ย WORKDIRย ์ ๋ช
์ํด์ฃผ๋ฉด ์ข๋ค.
์ฐ์ ย WORKDIR์ ์ฌ์ฉํ์ง ์์์ ๋์ ๋์ปค ์ปจํ
์ด๋์ ๋ด๋ถ ๋ชจ์ต์ ๋ณด์.

Dockerfile,ย server.js,ย package.json๋ฑ์ด ์ปจํ
์ด๋์ root directory์ ๋ค์ด๊ฐ ์๋ ๋ชจ์ต์ ๋ณผ ์ ์๋ค. ์ด๋ฒ์๋ Dockerfile์ ์์ ํด์ ๋ค๋ฅธ ๋๋ ํ ๋ฆฌ์ย COPY๋ฅผ ์งํํด๋ณด๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์.
FROM node:10
WORKDIR /usr/src/app
COPY ./ ./
RUN npm install
CMD ["node", "server.js"]

ํ์คํ WORKDIR์ ์ถ๊ฐ์ํ์ ๋์ ํ์ผ๊ตฌ์กฐ์ ํ์ ๋์ ํ์ผ ๊ตฌ์กฐ๊ฐ ํ์ฐํ ๋ค๋ฆ์ ์ ์ ์๋ฐ.
๊ทธ ์ด์ ๊ฐ ๋ฐ๋กย WORKDIR์ ์ฌ์ฉํด์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ด๋์์ผฐ๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ฌย c5353a37c500 ์ปจํ
์ด๋์ ๋๋ ํ ๋ฆฌ๋ root ๊ฐ ์๋ย /usr/src/app๋ค. ๊ทธ๋์ root ๋๋ ํ ๋ฆฌ์์ ๋ณด์ฌ์ง๋ ํ์ผ๊ณผ ํด๋๋ ๋ณด์ด์ง ์๊ณ Node.js ํ์ผ๋ค๊ณผ Dockerfile ๋ง ๋ณด์ด๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ๋ ์์ธํ ํ์ธํ๊ณ ์ถ์ ๋๋ ์
ธ ์คํฌ๋ฆฝํธ๋ก ์ ์ํด์ ๋ด๋ถ๋ฅผ ์ดํด๋ณผ ์ ์๋ค.
docker build -t nodej2
- 2๋ฒ์์ ์ดํด๋ณธ Dockerfile์ ์ด๋ฏธ ํจ์จ์ ์ธ ์ฌ๋น๋๋ฅผ ๊ณ ๋ คํ์ฌ ์์ฑ๋ ๊ฒ์ด๋ค.
- ์ด๋ค ๋ถ๋ถ์ด ์ฌ๋น๋์ ํจ์จํ๊ฐ ์ ์ฉ๋ ๊ฒ์ธ์ง ์ง์ด๋ณด์.
- Dockerfile์ COPY ํค์๋๋ ๋ ๋ถ๋ถ์ผ๋ก ๋๋์ด์ ธ ์๋ค.
- ์ค์ ์์์ ์งํํ๋ ๋น๋ ๋ด์ฉ์ ๋ณด๋ฉด, RUN์ ์ ํ๋ก 1๋ฒ์ฉ COPY๊ฐ ์งํ๋์์์ ํ์ธํ ์ ์๋ค.

**docker run -d -p 4000:8080 nodej2**
docker run -d -p {๋ก์ปฌ ํฌํธ}:{์ปจํ ์ด๋ ํฌํธ} {์ด๋ฏธ์ง ์ด๋ฆ}
- ๋์ปค ํ๊ฒฝ์์ ๋์ด ์๋ฒ๋ฅผ ๋ก์ปฌ์์ ์ ์ํ๊ธฐ ์ํด์ , ์์ ๊ฐ์ ์ปค๋งจ๋๊ฐ ํ์ํ๋ค.
docker run -d -p 4000:8080 bakumando/docker-test1
์ ์ ๋ ฅํด๋ณด์๋ค. ๋ง๋ค์ด ๋ bakumando/docker-test1 ์ด๋ฏธ์ง๋ฅผ ํ ๋๋ก ์ปจํ ์ด๋๋ฅผ ์์ฑ ๋ฐ ์คํํ๋ ์ปค๋งจ๋์ด๋ค.

d: detach ์ต์ ์ผ๋ก์ ์ปจํ ์ด๋๋ฅผ ์คํ์ค์ธ ์ํ๋ก ๋๊ณ ๋น ์ ธ๋์ค๋ ๊ฒ์ด๋ค. ๋ง์ฝ ๋ถ์ด์ง ์์ผ๋ฉด ๋์ปค ๋ด๋ถ์์ ์๋ฒ๋ฅผ ๋์ด ์ํ๋ฅผ ์ ์งํ๊ฒ ๋๋ค.
p: ํฌํธ ๋ถ์ฌ ๋ฐ ์ฐ๊ฒฐ์ ์ํ ์ต์ ์ด๋ค.
{๋ก์ปฌ ํฌํธ}:{์ปจํ ์ด๋ ํฌํธ}: ๋์ปค ์ปจํ ์ด๋์ ๋์์ง ์๋ฒ๋ฅผ ๋ก์ปฌ์์ ์๋ฌด๋ฐ ์ฐ๊ฒฐ์ ์์ด ์ ์ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค. ๋ก์ปฌ ํฌํธ์ ์ปจํ ์ด๋ ํฌํธ์ ๋งคํ์ด ํ์ํ๋ค.ย {๋ก์ปฌ ํฌํธ}:{์ปจํ ์ด๋ ํฌํธ}ย ๊ท์น์ ๋ง๊ฒ ๊ธฐ์ ํ๋ฉด ์๋ก ๊ฐ ์ฐ๊ฒฐ์ด ์ด๋ฃจ์ด์ง๋ค. ์ปจํ ์ด๋ ํฌํธ๋ index.js์์ ํ์ธํ ์ ์๋ฏ์ด 8080์ผ๋ก ์ค์ ํด๋์๊ณ , ๋ก์ปฌ ํฌํธ๋ ๋ง์๊ป ์ง์ ํด๋ ์ข๋ค. ์ฌ๊ธฐ์ 4000์ผ๋ก ํด๋ณด์๋ค.

์ ์์ด ์ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ง์ ํ์ธํ ์ ์๋ค.
๋ง์ง๋ง์ ์ญ์ย {์ด๋ฏธ์ง ์์ด๋}๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๋ค. ์ฆ,ย docker run๊ณผย {์ด๋ฏธ์ง ์์ด๋}ย ์ฌ์ด์ ํฌํธ ์ต์ ์ ๋ฃ์ผ๋ฉด ๋๋ ๊ฒ์ด๋ค.
์ฆ, package.json์ด ์๋ ๋ค๋ฅธ ํ์ผ์ ์์ค๋ฅผ ๋ณ๊ฒฝํ ์ ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ ์ปค๋งจ๋๋ฅผ ์ํํ์๋ค.
docker build -t kse/docker-test ./

4๋ฒ ์คํ ์์ npm install์ด ์ด๋ฃจ์ด์ง์ง ์๊ณ , ์บ์ฑ๋ง ํ ๋ค ๋์ด ๋ฌ์์ ํ์ธํ ์ ์๋ค. RUN ์ด์ ์ ๋ณต์ฌ๋ ํ์ผ์ด ์ด์ ๋น๋์ ๋ฌ๋ผ์ง ๊ฒ ์๋ค๋ฉด RUN์ด ์ํ๋์ง ์๋ ๊ฒ์ด๋ค.

๋ง์ง๋ง์ผ๋ก index.js์ ์์ค์ฝ๋๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์๋์๋์ง๋ ํฌํธ ์ ์์ ํตํด์ ํ์ธํด๋ณด์.

์์ค์ฝ๋ ๋ณ๊ฒฝ์ด ์ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ก์์ด ํ์ธ๋์๋ค.
docker run -p 4000:8000 -v /usr/src/app/node_modules -v $(pwd):/usr/src/app kse/docker-test
docker run -p 4000:8000 -v {๋งคํํ์ง ์์ ์ปจํ ์ด๋ ๊ฒฝ๋ก} -v $(pwd):{๋งคํํ ์ปจํ ์ด๋ ๊ฒฝ๋ก} {์ด๋ฏธ์ง ์์ด๋}
!! ์ฒซ๋ฒ์งธ -v์ต์ ์ ์ฃผ์ง ์์ผ๋ฉด ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค

๋ฐ๋ผ์ ์ฒซ๋ฒ์งธ -v์ต์ ์ ์ ์ฉํจ์ผ๋ก์จ ์๋ฌ ๋ฐ์์ ๋ฐฉ์งํ๊ณ , ์ปจํ ์ด๋์ ์๋ ๋ชจ๋ ํ์ผ์ ํ์ฉํ ์ ์๊ฒ ๋๋ค.
๋ ๋ฒ์งธ -v์ต์
: :(์ฝ๋ก ) ์ ๊ฒฝ๊ณ๋ก$(pwd)์ {๋งคํํ ์ปจํ
์ด๋ ๊ฒฝ๋ก}๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
pwd๋ ๋ก์ปฌ์ ํ์ฌ ๊ฒฝ๋ก ๊ฐ์ ๋ปํ๋ค.
:(์ฝ๋ก )์ ํฌํธ ์ฐ๊ฒฐ์์๋ ํ์ธํ๋ฏ์ด ์ ํ๋ฅผ ๋งคํํ ๋ ์ฐ์ด๋ ํค์๋์ด๋ค.
์ฆ,ย pwd(๋ก์ปฌ์ ํ์ฌ ๊ฒฝ๋ก)์ ์๋ ํ์ผ๋ค์ดย {๋งคํํ ์ปจํ ์ด๋ ๊ฒฝ๋ก}์ ์๋ ํ์ผ๋ค์ ๋์ฒดํด์ ์ปจํ ์ด๋๊ฐ ์คํ๋๋ ๊ฒ์ด๋ค.
volume์ ๋ค ์ข์ง๋ง ์๋ฌด๋๋ ๋งคํ ๊ด๊ณ์ ๋ํ ์ผํ ์ค์ ์ ํด์ผํ๊ธฐ ๋๋ฌธ์ ์ปค๋งจ๋๊ฐ ๊ต์ฅํ ๊ธธ์ด์ง๋ค๋ ์ ์ ๋จ์ ์ด ์๋ค.
docker-compose์ yml ํ์ผ์ ํตํด ์ด๋ฌํ ๋จ์ ์ ํด๊ฒฐํ ์ ์๋ค.const express=require('express');
const PORT=8080;
const app=express();
app.get('/', (req, res) => {
res.send("hello hi world");
})
app.listen(PORT, ()=>{
console.log('Server is running');
})
docker run -p 5500:8080 -v /usr/src/app/node_modules -v ${pwd}:/usr/src/app kse/docker-test1
