docker-compose로 redis 연결하기

노누리·2022년 5월 23일
0

이전에 docker를 이용하여 EC2에 연결을 한 것을 포스팅했다. docker-compose로 배포해보려고 생각하다가 오늘 docker-compose 실행에 성공해서 기록한다.

docker-compose

docker-compose는 여러 (docker) 이미지를 한 번에 올릴 수 있는 기능이다.

이전에 redis를 직접 설치하고, EC2에 설치하는 방식을 통해 서버를 실행시켰는데 이번에 docker-compose에 이미지를 불러와 실행시키는 방식을 사용했다.

dockerfile 생성

back과 front 폴더가 따로 있어 둘 다 실행시켜야 하기 때문에 각 폴더 내에 dockerfile을 생성한다.

FROM node:16-alpine3.11
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD [ "npm", "start" ]
EXPOSE 5001

위는 백엔드 폴더내에 생성한 dockerfile로 백엔드는 5001번 포트로 실행시킨다.

docker-compose 생성

docker-compose 파일은 여러 이미지를 한번에 올리는 것이기 때문에 root에 생성해준다. 아래와 같이 폴더 구조를 만들어주면 된다.

version: '3'
services:
  nodeapp: 
    build: 
      context: "./back"
      dockerfile: dockerfile 
    container_name: "nodeapp" 
    working_dir: "/app/back" 
    ports: 
      - "5001:5001"
    links: 
      - "noderedis"
  noderedis: 
    image: "redis:3"
    container_name: "noderedis"

위 코드처럼 nodeapp 컨테이너에는 back 폴더의 코드를 실행한 이미지를 만들고

noderedis 컨테이너에는 docker-hub에 올라와있는 redis 이미지를 불러온다.

nodeapp, noderedis는 임의로 정해주는 컨테이너 이름이다.


docker에 올린 redis 사용하기

import { createClient } from "redis";

const CLIENT_BASE_URL = "noderedis";

const client = createClient({
            url: `redis://${CLIENT_BASE_URL}:6379`,
        });

기존 코드에서 url만 redis 이미지의 컨테이너 이름으로 바꿔주면된다.

docker-compose 실행

docker-compose up -d --build

위 명령어를 실행하면 이미지를 build하고 background에서 실행 시킨다. 다음과 같이 실행에 성공하면 두 가지 컨테이너가 실행된다.

docker ps

실행중인 컨테이너 목록을 확인해 볼 수 있다.

docker-compose 실행 중 어려움1

docker-compose build 를 하는데 자꾸 bcrypt 관련된 오류가 생겼다. 아무리 구글링해도 원하는 결과가 나오지않았는데 겨우 찾은 방법은 bcrypt 대신 bcryptjs를 설치해서 사용하는 것이다.

import bcrypt from 'bcrypt'

대신

import bcrypt from 'bcryptjs'

으로 바꿔주면 된다.

처음에는 이 방식 말고 bcrypt-nodejs를 설치했는데 이 모듈은 기존의 bcrypt의 사용법과 조금 달라서 또 다른 오류가 발생했다. 그냥 bcryptjs를 사용하는 게 좋을 것 같다.

docker-compose 실행 중 어려움2

docker-compose에 올린 redis 이미지 실행이 안돼서 시간이 걸렸다. 알고보니 기존에 잘못되어있던 코드가 다시 build 되지 않았던 문제로 docker에서 실행중인 Container들을 모두 중지/삭제 시킨 후

docker-compose up -d --build

해주니 잘 실행됐다.

코드가 바뀔땐 컨테이너를 중지/삭제 해보고 다시 실행해보자...

참고 https://engineer-mole.tistory.com/221

profile
백엔드 개발자입니다.

0개의 댓글