CentOS7에서 Spring Cloud 마이크로서비스를 도커로 배포하는 방법

환경 구성

  1. 필수 도구 준비
  • 가상머신 관리: VMware
  • 리모트 접속 및 파일 전송: Xshell, Xftp
  • 애플리케이션 런타임: Docker
  • 프로젝트 패키징: IntelliJ IDEA, Maven
  • 구성 파일 편집: 텍스트 에디터 (예: vim, nano)
  1. CentOS7 환경 설정
  • 방화벽 설정 서비스 포트만 개방하는 방식을 채택함. 다음 포트를 열어야 함: 8848, 10086, 8080, 8081, 8091 변경 후 반드시 방화벽 재시작 및 Docker 재시작 필요.

  • JDK8 설치

yum install -y yum-utils device-mapper-persistent-data lvm2 --skip-broken
yum install java-1.8.0-openjdk* -y
  1. Docker 환경 구축
  • 레파지토리 설정 (알리바바 클라우드)
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's@download.docker.com@mirrors.tuna.tsinghua.edu.cn/docker-ce@g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
  • Docker 설치
yum install -y docker-ce
  • 레지스트리 가속기 설정
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://n0dwemtq.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
  • Docker Compose 설치
curl -SL https://get.daocloud.io/docker/compose/releases/download/v2.17.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
  • 자동 시작 설정
systemctl enable docker

프로젝트 준비

1. 각 모듈의 Dockerfile 작성

각 서비스별로 EXPOSE 포트만 수정하면 됨. 예시: 게이트웨이 모듈

FROM java:8-alpine
COPY ./app.jar /app.jar
EXPOSE 10086
ENTRYPOINT ["java", "-jar", "/app.jar"]

2. docker-compose.yml 구성

version: "3.2"

services:
  nacos:
    image: nacos/nacos-server
    environment:
      MODE: standalone
    ports:
      - "8848:8848"
    restart: always
    logging:
      driver: "json-file"
      options:
        max-size: "100m"

  user-service:
    build: ./user-module
    restart: always
    logging:
      driver: "json-file"
      options:
        max-size: "100m"

  order-service:
    build: ./order-module
    restart: always
    logging:
      driver: "json-file"
      options:
        max-size: "100m"

  gateway:
    build: ./gateway
    ports:
      - "10086:10086"
    restart: always
    logging:
      driver: "json-file"
      options:
        max-size: "100m"

3. Maven 패키징

  • 프로젝트 구조

  • feign-api: 클라이언트 통신용, 실행 클래스 없음 → <build> 제외

  • gateway, order-module, user-module: 각각 독립된 서비스

  • pom.xml 설정 요소

  • 실행 가능한 모듈에만 <build> 포함

  • <finalName>app</finalName>로 일관성 유지

  • application.yml 및 bootstrap.yml 수정

  • 데이터베이스 연결 주소: localhostmysql

  • Nacos 서비스 주소: localhostnacos

  • 실제 운영 환경에서는 내부 호스트 이름 사용 필요

  • 패키징 명령어

mvn clean package

결과물은 target/app.jar 생성

4. 파일 정리 및 리눅스 전송

  • 각 서비스의 app.jar를 해당 모듈 폴더(예: user-module, gateway)에 복사
  • 전체 프로젝트 폴더(Cloud01)를 Xftp 등으로 리눅스 서버로 전송
  • 예: /usr/myProject/springcloud/

마이크로서비스 배포

1. Docker Compose로 배포

  • 디렉터리 이동
cd /usr/myProject/springcloud/
  • 백그라운드 실행
docker compose up -d

💡 참고: 처음 실행 시 이미지 다운로드 시간이 오래 걸림. -d 없이 먼저 실행해 로그 확인 권장.

  • 서비스 순서 문제 해결
  • Nacos가 먼저 시작되지 않으면 다른 서비스는 등록 실패.
  • 해결 방법:
  1. 먼저 docker compose up -d nacos 실행 → Nacos 기동 완료 후 나머지 서비스 시작
  2. 또는 전체 실행 후, docker compose restart order-service user-service gateway로 재시작

2. 서비스 접근 테스트

  • Nacos 웹 대시보드 확인 브라우저에서 http://<서버IP>:8848/nacos 접속 → 서비스 목록 확인

  • 게이트웨이 요청 테스트 예: http://<서버IP>:10086/order/query 요청이 order-serviceuser-service로 연쇄 호출됨

자주 발생하는 문제 해결

1. 시작 지연 및 응답 느림

  • 원인: 메모리 부족으로 인한 컨테이너 초기화 지연
  • 해결책: 가상머신 메모리 증설 (최소 4GB 권장) → 성능 향상 및 서비스 가동 속도 개선

2. JDK 미설치로 인한 오류

  • 자바 애플리케이션 실행을 위해 반드시 JDK8 설치 필요
  • 누락 시 NoClassDefFoundError 등 오류 발생
  • 설치 여부 확인: java -version

태그: Spring Cloud docker CentOS7 Docker Compose microservices

6월 15일 19:29에 게시됨