TIL/MSA

Docker-compose 개발 환경 세팅하기

minOE 2025. 3. 15. 00:03
728x90

도입 배경: 왜 Docker Compose를 사용해야 하는가?

각 팀원의 로컬 개발 환경이 다르거나, 설정이 제대로 맞지 않아서 발생하는 문제를 겪을 수 있다.
특히 Microservices Architecture(MSA)같은 분산 시스템을 개발할 때,각 서비스의 실행 환경을 통일하는 것이 중요하다.

Docker Compose를 도입하면
- 모든 팀원이 동일한 개발 환경에서 작업 가능
- 개발 환경을 컨테이너로 격리하여 로컬 설정이 달라도 문제 없이 실행
- 서비스 간의 네트워크 및 의존성을 쉽게 관리 가능

 

 Docker Compose 환경 세팅

1)디렉토리 구조
msa-practice/
├── discoveryservice/  # Eureka Server
│   ├── src/
│   ├── pom.xml
│   ├── Dockerfile
├── apigateway-service/  # API Gateway
│   ├── src/
│   ├── pom.xml
│   ├── Dockerfile
├── first-service/  # First 서비스
│   ├── src/
│   ├── pom.xml
│   ├── Dockerfile
├── second-service/  # Second 서비스
│   ├── src/
│   ├── pom.xml
│   ├── Dockerfile
├── docker-compose.yml  # 🏗️ 팀원들이 실행해야 하는 파일
├── .env  # 환경 변수 파일 (필요한 경우)
└── README.md  # 📝 실행 방법 정리


2) dockerfile 작성

유레카 서버 (eureka-server/Dockerfile)

FROM openjdk:17
WORKDIR /app
COPY target/discoveryservice.jar discoveryservice.jar
EXPOSE 8761
ENTRYPOINT ["java", "-jar", "discoveryservice.jar"]


API Gateway 서버(gateway/Dockerfile)

FROM openjdk:17
WORKDIR /app
COPY target/apigateway-service.jar apigateway-service.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "apigateway-service.jar"]


유레카 클라이언트 서비스 (first-service/Dockerfile)

FROM openjdk:17
WORKDIR /app
COPY target/first-service.jar first-service.jar
EXPOSE 8081
ENTRYPOINT ["java", "-jar", "first-service.jar"]


유레카 클라이언트 서비스 (second-service/Dockerfile)

FROM openjdk:17
WORKDIR /app
COPY target/second-service.jar second-service.jar
EXPOSE 8081
ENTRYPOINT ["java", "-jar", "second-service.jar"]



3) docker-compose.yaml 작성
services:
  discoveryservice:
    build:
      context: ./discoveryservice
      dockerfile: Dockerfile
    container_name: discoveryservice
    ports:
      - "8761:8761"
    networks:
      - msa_network
    environment:
      - JAVA_OPTS=-XX:+UseContainerSupport

  apigateway-service:
    build:
      context: ./apigateway-service
      dockerfile: Dockerfile
    container_name: apigateway-service
    depends_on:
      - discoveryservice
    ports:
      - "8080:8080"
    environment:
      - EUREKA_SERVER=http://discoveryservice:8761/eureka/
    networks:
      - msa_network

  first-service:
    build:
      context: ./first-service
      dockerfile: Dockerfile
    container_name: first-service
    depends_on:
      - discoveryservice
    ports:
      - "8081:8081"
    environment:
      - EUREKA_SERVER=http://discoveryservice:8761/eureka/
    networks:
      - msa_network

  second-service:
    build:
      context: ./second-service
      dockerfile: Dockerfile
    container_name: second-service
    depends_on:
      - discoveryservice
    ports:
      - "8082:8082"
    environment:
      - EUREKA_SERVER=http://discoveryservice:8761/eureka/
    networks:
      - msa_network

networks:
  msa_network:
    driver: bridge


4) 빌드

 docker-compose up -d --build​


5) 컨테이너 작동 확인

docker ps

 

728x90