-
[๋ฐ๋ผํ๋ฉฐ ๋ฐฐ์ฐ๋ ๋์ปค์ CIํ๊ฒฝ] 5. Docker ComposeDevOps/Docker 2022. 5. 23. 17:11
๐ Docker Compose ๋, ๋ค์ค ์ปจํ ์ด๋ ๋์ปค ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ํ๊ณ ์คํํ๊ธฐ ์ํ ๋๊ตฌ ์ด๋ค.
์ ์๋ง ๋ณด์์๋ ์ด๋ค ๋๊ตฌ์ธ์ง ๊ฐ์ด ์ ์ค์ง ์์ ๊ฒ์ด๋ค.
Node.js์ Redis๋ฅผ ์ด์ฉํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค์ด๋ณด๋ฉด์ Docker Compose์ ๋ํ์ฌ ์์๋ณด์.์ง๋ ๊ฐ์์์ Node.js๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค์ด๋ณด์๋ค.
๊ทธ๋ ๋ค๋ฉด Redis๋ ๋ฌด์์ผ๊น?โ๏ธ Redis ๋?
Redis(REmote Dictionary Server)๋ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ์ ํค-๊ฐ ๊ตฌ์กฐ ๋ฐ์ดํฐ ๊ด๋ฆฌ ์์คํ ์ผ๋ก,
๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ณ ๋น ๋ฅด๊ฒ ์กฐํํ ์ ์๋ ๋น ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(NoSql)์ด๋ค.Redis๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ Mysql ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ฌ ๋ ๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.
- ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ์ง๋ง ์์์ ์ผ๋ก๋ ๋ณด๊ด์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์, ์๋ฒ๋ฅผ ์ฌ๋ถํ ํด๋ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ ์ ์๋ค.
โ๏ธ ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ ๋ฐ ๋์ปค ํ๊ฒฝ์์ ์คํ
1๏ธโฃ npm init ์ผ๋ก package.json ์์ฑ
$ npm init
2๏ธโฃ ์์กด์ฑ์ express, redis๋ฅผ ์ถ๊ฐ
package.json ํ์ผ
{ "name": "docker-compose-app", "version": "1.0.0", "description": "", "main": "server.js", "scripts": { "start": "node server.js", "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { "express": "4.18.1", "redis": "3.0.2" }, "author": "", "license": "ISC" }
redis ๋ฒ์ ์ฃผ์โ๏ธ
4 ๋ฒ์ ๋ถํฐ๋ createClient์ host ํ๋กํผํฐ๋ฅผ ์์ด์ ธ์ ์์ ์ด ํ์ํ๋ค.
์๋์ server.js ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ ๊ฒฝ์ฐ 3๋ฒ์ ์ ์ฌ์ฉํ์!!3๏ธโฃ node.js ์ฑ ์์ฑ
server.js ํ์ผ
const express = require("express"); const redis = require("redis"); // ๋ ๋์ค ํด๋ผ์ด์ธํธ ์์ฑ const client = redis.createClient({ // ๋์ปค Compose๋ฅผ ์ฌ์ฉํ ๋๋ docker-compose.yml ํ์ผ์ ๋ช ์ํ ์ปจํ ์ด๋ ์ด๋ฆ์ผ๋ก ์ฃผ๋ฉด ๋๋ค. host: "redis-server", // redis ๊ธฐ๋ณธ ํฌํธ ๋ฒํธ(6379) port: 6379 }) const app = express(); // ์ซ์๋ 0๋ถํฐ ์์ client.set("number", 0); app.get('/', (req, res) => { client.get("number", (err, number)=>{ // ํ์ฌ ์ซ์๋ฅผ ๊ฐ์ ธ์จ ํ์ 1์ฉ ์ฌ๋ ค์ค๋ค. client.set("number", parseInt(number)+1) res.send('์ซ์๊ฐ 1์ฉ ์ฌ๋ผ๊ฐ๋๋ค. ์ซ์: ' + number) }) }) app.listen(9000); console.log('Server is running');
4๏ธโฃ Dockerfile ์์ฑ
Dockerfile ํ์ผ
FROM node:14 WORKDIR /usr/src/app COPY ./ ./ RUN npm install CMD ["node", "server.js"]
5๏ธโฃ ์คํ
์ด์ redis ์๋ฒ์ Node.js ์ฑ์ ์คํํ์.
redis ์๋ฒ ์คํ
$ docker run redis
Node.js ์ฑ ๋น๋ & ์คํ
$ docker build -t wisdom/docker-compose-app ./ $ docker run wisdom/docker-compose-app
Node.js ์ฑ์ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
Error: getaddrinfo ENOTFOUND redis-server
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:71:26)
Emitted 'error' event on RedisClient instance at:
at RedisClient.on_error (/usr/src/app/node_modules/redis/index.js:341:14)
at Socket.<anonymous> (/usr/src/app/node_modules/redis/index.js:222:14)
at Socket.emit (events.js:400:28)
at emitErrorNT (internal/streams/destroy.js:106:8)
at emitErrorCloseNT (internal/streams/destroy.js:74:3)
at processTicksAndRejections (internal/process/task_queues.js:82:21) {
errno: -3008,
code: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'redis-server'redis-server ๋ฅผ ์ฐพ์ ์ ์๋ค๋ ์ค๋ฅ์ด๋ค.
node.js ์ฑ์์ ๋ ๋์ค ์๋ฒ์ ์ ๊ทผ ํ ์ ์์ด์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค.์ด๋ฌํ ๋ฉํฐ ์ปจํ ์ด๋ ์ํฉ์์, Docker Compose๋ฅผ ์ฌ์ฉํ๋ฉด ์ปจํ ์ด๋ ์ฌ์ด์์ ์ฝ๊ฒ ํต์ ํ ์ ์๋ค.
โ๏ธ Docker Compose ์ฌ์ฉํ๊ธฐ
1๏ธโฃ docker-compose.yml ํ์ผ ์์ฑ
๋ค์๊ณผ ๊ฐ์ด docker-compose.yml ํ์ผ์ ์์ฑํด๋ณด์.
version: "3" services: redis-server: image: "redis" node-app: build: . ports: - "5000:9000"
redis ์๋ฒ ์ปจํ ์ด๋์ ์ด๋ฆ์ "redis-server"๋ก, ๋ ธ๋ ์ฑ์ ์ปจํ ์ด๋์ ์ด๋ฆ์ "node-app"์ผ๋ก ์ค์ ํ์๋ค.
๋ํ, ports ํ๋กํผํฐ๋ก ํฌํธ ๋งคํ๋ ์ง์ ํ ์ ์๋ค.2๏ธโฃ ์ฑ ์คํ
# ์ด๋ฏธ์ง๊ฐ ์๋ ๊ฒฝ์ฐ, ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ณ ์ปจํ ์ด๋ ์์ $ docker-compose up # ํญ์ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ณ ์ปจํ ์ด๋ ์์ (๋ณ๊ฒฝ์ฌํญ์ด ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ) $ docker-compose up --build # detached ๋ชจ๋, ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ $ docker-compose up -d
์์ ๋ช ๋ น์ด๋ค์ ํตํด docker compose ๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ์ ์คํํ ์ ์๋ค.
์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด, redis ์๋ฒ์ node ์ฑ์ด ๋ชจ๋ ์คํ๋๋ค.์คํ ํ localhost:5000 ์ผ๋ก ์ ์ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ด ๋์จ๋ค.
์๋ก๊ณ ์นจ์ ํ ๋๋ง๋ค ์ซ์๊ฐ 1์ฉ ์ฆ๊ฐ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.3๏ธโฃ ์ฑ ์ข ๋ฃ
$ docker-compose down
์์ ๋ช ๋ น์ด๋ docker compose ๋ฅผ ์ฌ์ฉํด์ ์คํํ ์ฑ์ ์ข ๋ฃํ๋ ๋ช ๋ น์ด๋ค.
์ฐธ๊ณ
728x90'DevOps > Docker' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ