[๊ฐ์] ๋ฐ๋ผํ๋ฉฐ ๋ฐฐ์ฐ๋ ๋์ปค์ CIํ๊ฒฝ -3
๐ Node.js ์ฑ ๋ง๋ค๊ธฐ
- package.json
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ๋ง๋ค ์ ์๋ค.
node.js ๋จผ์ ์ค์นํด์ผ๋จ ๋๋ ์ด๋ฏธ ์์ด์ ์๋ต
npm init
express ๋ชจ๋์ ์ถ๊ฐํ๋ค. (node.js ํธํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๋ชจ๋)
{
"name": "nodejs-docker-app",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {"express" : "4.17.1"},
"author": "",
"license": "ISC"
}
server.js ํ์ผ ์์ฑ
const express = require('express');//express ๋ชจ๋ ๋ถ๋ฌ์ค๊ธฐ
const PORT = 8080;//ํฌํธ ์ค์
const app = express();//์๋ก์ด express ์ดํ
app.get('/', (req, res) => {
res.send("Hello World")
}); //'/' ๊ฒฝ๋ก๋ก ์์ฒญ์ด ์ค๋ฉด ํฌ๋ก์๋ ์ถ๋ ฅ
app.listen(PORT); //์๋ฒ ์์
๐ณ DokerFile ์์ฑํ๊ธฐ
alpine์ ์ฐ์ง ์๋ ์ด์ - error๊ฐ ๋๋ค. alpine์๋ npm์ ์ํ ํ์ผ์ด ์์
npm์ด ๋ค์ด์๋ ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์ค ํ๋ - node ์ด๋ฏธ์ง (alpine๋ณด๋ค ๋ถํผ๊ฐ ํฌ๋ค)
npm install์ด๋,
npm install์ package.json์ dependencies๋ฅผ ์๋์ผ๋ก ์น์์ ๋ค์ด๋ฐ์ ์ค์นํด์ฃผ๋ ๋ช ๋ น์ด
package.json, server.json์ด ์ปจํ ์ด๋ ๋ฐ์ ์๋ค. <- ์๋ฌ ๋ฐ์
๋ด ๋ฌธ์ : ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์ ์์ธ์ ๋ชจ๋ฅด๊ฒ ์ log๋ ๋ค๋ฆ
docker build -t {ํ๊ทธ ์ด๋ฆ} ./
docker run {ํ๊ทธ ์ด๋ฆ}:latest
FROM node:10
COPY ./ ./
RUN npm install
CMD ["node", "server.js"]
์ด๋ ๊ฒ ํ๋ฉด ์๋ฌ๊ฐ ๋์ง ์๊ณ ์คํ์ด ๋๋ค.
ํ๋ฐ, localhost:8080์ ์ ์์ด ์๋จ
๐ธ ์์ฑํ ์ด๋ฏธ์ง๋ก ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์ ์ ๊ทผ์ด ์ ๋๋ ์ด์ (ํฌํธ ๋งตํ)
์ปจํ ์ด๋ ์์ 8080 ํฌํธ๋ก ๊ฐ ์ ์๋ค.
๋ก์ปฌ ํฌํธ์ ์ปจํ ์ด๋ ์์ ํฌํธ๋ฅผ ์ฐ๊ฒฐ์์ผ์ผ ํ๋ค.
์๋๋ค.
๐โ๏ธ WORKING DIRECTORY ๋ช ์ํด์ฃผ๊ธฐ
์๋ ์๋ ํ์ผ๊ณผ ์ด๋ฆ์ด ๊ฐ์ผ๋ฉด ๋ฎ์ด์์ด๋ค.
ํ์ผ์ด ๋ชจ๋ ํ ๋๋ ํ ๋ฆฌ์ ์์ด์ ์ ์ ์๋ค.
-> work directory์ ๋ฃ๊ธฐ
FROM node:10
COPY ./ ./
WORKDIR /usr/src/app
RUN npm install
CMD ["node", "server.js"]
๐ฉ์ดํ๋ฆฌ์ผ์ด์ ์์ค ๋ณ๊ฒฝ์ผ๋ก ๋ค์ ๋น๋ํ๋ ๊ฒ์ ๋ํ ๋ฌธ์ ์
์๋ ๋ฐฉ๋ฒ๋๋ก ํ๋ฉด ๋๋ฌด ๋ณต์กํจ
์คํ -> ๋น๋ -> ๋ฐ, ๋ชจ๋ ์ข ์์ฑ/ ์ฝ๋ ๋ค ๋ค์ ๋ฐ์์ผ๋จ
=> ๊ต์ฅํ ๋นํจ์จ์ ์ด๋ค.
์, ์๋ฐ๋์๊ตฌ๋, ์บ์๋ฅผ ์ด์ฉํ๋ฉด ๋๊ฒ ๋ค. -> ์ข ๋ ํจ์จ์ ์ด๋จ
๐ Docker Volume์ ๋ํ์ฌ
copy๋ฅผ ๋์ฒดํจ ๊ตณ์ด ๋ณต์ฌ ์ํ๊ณ ์ฐธ์กฐ๋ฅผ ํ๋ค.
๋ ธ๋ ๋ชจ๋์ ๋ก์ปฌ์ ์๋ค -> ์ฐธ์กฐํ์ง ๋ง์
Hello World -> ์๋ ํ์ธ์!!
์๋ ํ์ธ์๊ฐ ์ ๋์ค๊ณ ์๋ ๊ฒ์ผ๋ก ์ถ์
๋นํฉํ์ง ์๊ณ ์ธ์ฝ๋ฉ ๋ค์ ํ๊ณ .
stop, run
volume์ ์ฌ์ฉํ๋ ๋น๋ ์ํด๋ ์ ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์์
๐บ Docker Compose
๋ ๋์ค๋ ? ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ์ ํค-๊ฐ ๊ตฌ์กฐ ๋ฐ์ดํฐ ๊ด๋ฆฌ ์์คํ
๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ No sql
์์์ ์ผ๋ก ๋ณด๊ด์ด ๊ฐ๋ฅํ๋ค
+ ๋์ปค ํ๊ฒฝ์์ ๋ ๋์ค ํด๋ผ์ด์ธํธ ์์ฑ ์ ์ฃผ์์ฌํญ
๋ณดํต ๋์ปค๋ฅผ ์ฌ์ฉํ์ง ์๋ ํ๊ฒฝ์์๋ Redis ์๋ฒ๊ฐ ์๋๋๊ณ ์๋ ๊ณณ์ host ์ต์
์
URL๋ก ์์ ์ฒ๋ผ ์ฃผ๋ฉด ๋์ง๋ง, ๋์ปค Compose๋ฅผ ์ฌ์ฉํ ๋๋ host ์ต์
์
docker-compose.yml ํ์ผ์ ๋ช
์ํ ์ปจํ
์ด๋ ์ด๋ฆ์ผ๋ก ์ฃผ๋ฉด ๋๋ค.
const client = redis.createClient({
host: "redis-server",
port: 6379
});
๐ Docker Containers๊ฐ ํต์ ํ ๋ ๋ํ๋๋ ์๋ฌ
โ Docker compose stop & down
1. ๋ค๋ฅธ ํฐ๋ฏธ๋์ ์ผ์ docker compose down
2. docker compose up --build : ์ด๋ฏธ์ง๊ฐ ์๋ ์๋ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ณ ์ปจํ ์ด๋ ์์
3. docker-compose up -d ์ต์ ์ ์ด์ฉํ์ฌ background์์ ์คํ