[81-85] Docker로 다중 컨테이너 애플리케이션 구축하기

728x90
반응형

 

Docker로 다중 컨테이너 애플리케이션 구축하기

 

애플리케이션 구성 요소

MongoDB 데이터베이스

  • 데이터 저장소
  • 데이터 지속성 필요
  • 접근 제한 설정

Node.js 백엔드

  • REST API 제공
  • 로그 파일 지속성 필요
  • 소스 코드 변경 실시간 반영

React 프론트엔드

  • 단일 페이지 애플리케이션(SPA)
  • 소스 코드 변경 실시간 반영
  • 백엔드 API와 통신

 

컴포넌트별 도커화 과정

1. MongoDB 컨테이너


  
docker run --name mongodb --rm -d -p 27017:27017 mongo
  • 공식 MongoDB 이미지 사용
  • 포트 27017 노출
  • 백그라운드 실행

 

2. Node.js 백엔드 컨테이너

Dockerfile


  
FROM node
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
EXPOSE 80
CMD ["node", "app.js"]

빌드 및 실행


  
docker build -t goals-node .
docker run --name goals-backend --rm -d -p 80:80 goals-node

문제 해결:

  • MongoDB 연결 문제: localhost 대신 host.docker.internal 사용
  • 포트 노출: -p 80:80로 호스트와 컨테이너 포트 매핑

 

3. React 프론트엔드 컨테이너

Dockerfile


  
FROM node
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

빌드 및 실행:


  
docker build -t goals-react .
docker run --name goals-frontend --rm -d -it -p 3000:3000 goals-react

주의사항:

  • React 개발 서버는 -it 플래그 필요 (인터랙티브 모드)
  • 이 플래그 없이 실행 시 컨테이너가 즉시 종료됨

 

 

핵심 고려사항

  1. 통신 설정
    • 백엔드에서 MongoDB 접근: host.docker.internal 사용
    • 프론트엔드에서 백엔드 접근: 포트 매핑 필요
  2. 지속성 관리
    • 데이터베이스 데이터
    • 로그 파일
    • 개발 코드 변경사항
  3. 포트 매핑
    • MongoDB: 27017:27017
    • 백엔드: 80:80
    • 프론트엔드: 3000:3000

이 설정으로 세 가지 주요 컴포넌트가 각각 독립적인 컨테이너에서 실행되면서도 서로 효과적으로 통신할 수 있는 다중 컨테이너 애플리케이션이 구성됩니다.

 

 

 

 

 

참고

https://www.udemy.com/course/docker-kubernetes-2022

728x90
반응형

댓글