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