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 플래그 필요 (인터랙티브 모드)
- 이 플래그 없이 실행 시 컨테이너가 즉시 종료됨
핵심 고려사항
- 통신 설정
- 백엔드에서 MongoDB 접근: host.docker.internal 사용
- 프론트엔드에서 백엔드 접근: 포트 매핑 필요
- 지속성 관리
- 데이터베이스 데이터
- 로그 파일
- 개발 코드 변경사항
- 포트 매핑
- MongoDB: 27017:27017
- 백엔드: 80:80
- 프론트엔드: 3000:3000
이 설정으로 세 가지 주요 컴포넌트가 각각 독립적인 컨테이너에서 실행되면서도 서로 효과적으로 통신할 수 있는 다중 컨테이너 애플리케이션이 구성됩니다.
참고
728x90
반응형
'강의 > Docker & Kubernetes : 실전 가이드' 카테고리의 다른 글
[88] 볼륨으로 MongoDB에 데이터 지속성 추가하기 (0) | 2025.03.09 |
---|---|
[86] 효율적인 컨테이너 간 통신을 위한 Docker 네트워크 추가하기 (0) | 2025.03.08 |
[72-80] Docker 컨테이너 통신의 세 가지 방식과 솔루션 (0) | 2025.03.03 |
[68, 69, 70, 71] 도커 컨테이너 통신 패턴 3가지 (0) | 2025.02.25 |
[64] 빌드 인수 (ARG) 사용하기 (0) | 2025.02.24 |
댓글