STUDY/CLOUD

[๊ฐ•์˜] ๋”ฐ๋ผํ•˜๋ฉฐ ๋ฐฐ์šฐ๋Š” ๋„์ปค์™€ CIํ™˜๊ฒฝ -3

ozllzL 2022. 5. 24. 20:48

๐Ÿ€ 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๊ฐ„ ํ†ต์‹ ํ•  ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” ์—๋Ÿฌ

๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์— ์žˆ์–ด์„œ ์•„๋ฌด๋Ÿฐ ์„ค์ • ์—†์ด ์ ‘๊ทผ ๋ชปํ•จ
๋…ธ๋“œ JS ์•ฑ์—์„œ ๋ ˆ๋””์Šค ์„œ๋ฒ„์— ์ ‘๊ทผ์„ ํ•  ์ˆ˜ ์—†์Œ
๊ทธ๋ž˜์„œ yml ํŒŒ์ผ ์ž‘์„ฑ

 

๊ตฟ

โŒ Docker compose stop & down

1. ๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„์„ ์ผœ์„œ docker compose down

2. docker compose up --build : ์ด๋ฏธ์ง€๊ฐ€ ์žˆ๋“  ์—†๋“  ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘

3. docker-compose  up -d ์˜ต์…˜์„ ์ด์šฉํ•˜์—ฌ background์—์„œ ์‹คํ–‰