Docker서버구성
🐳 Docker 기반 서버 구성
정의
Docker 기반 서버 구성은 애플리케이션과 실행 환경을 컨테이너 단위로 분리해 배포하는 방식이다.
Spring Boot 백엔드와 React 프런트엔드를 각각 컨테이너로 분리하면 배포와 운영이 더 깔끔해진다.
🧭 기본 구성 흐름
- 서버에 Docker와 관련 도구를 설치한다.
- 백엔드와 프런트엔드를 각각 이미지로 만든다.
docker-compose.yml로 전체 서비스를 묶는다.- 포트와 볼륨, 환경 변수를 설정한다.
- 컨테이너를 실행하고 운영한다.
🛠️ 서버 환경 준비
sudo apt update && sudo apt upgrade -y
sudo apt install -y docker.io docker-compose openjdk-17-jdk git
🧱 Spring Boot 컨테이너 예시
정의
Spring Boot는 Gradle로 빌드한 JAR 파일을 컨테이너에 복사해 실행하는 방식으로 구성할 수 있다.
FROM openjdk:17
VOLUME /tmp
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENV SPRING_PROFILES_ACTIVE=prod
ENTRYPOINT ["java","-jar","/app.jar"]
🎨 React 컨테이너 예시
정의
React는 정적 파일을 빌드한 뒤 nginx로 서빙하는 구성이 일반적이다.
FROM nginx:alpine
COPY ./dist /usr/share/nginx/html
COPY ./default.conf /etc/nginx/conf.d/default.conf
🧩 Docker Compose 예시
참고
docker-compose.yml로 백엔드와 프런트엔드를 함께 관리하면 실행과 배포가 편하다.
services:
backend:
build:
context: ./pictureManagerServer
dockerfile: Dockerfile
container_name: springboot-app
ports:
- "8080:8080"
volumes:
- /home/user/application/pictureManagerServer/photos:/app/photos
- /home/user/application/pictureManagerServer/logs:/app/logs
environment:
SPRING_PROFILES_ACTIVE: prod
frontend:
build:
context: ./pictureManagerClient
dockerfile: Dockerfile
container_name: react-nginx
ports:
- "3000:80"
volumes:
db_data:
docker-compose up --build -d
⚠️ 주의사항
- DB 비밀번호나
.env파일은 별도로 관리한다. - nginx reverse proxy와 HTTPS 설정도 함께 확인한다.
- 운영 환경에 맞게 포트와 볼륨 경로를 조정한다.
- 컨테이너 재시작 정책과 로그 경로도 함께 고려한다.
📌 정리
- Docker 기반 서버 구성은 서비스를 컨테이너 단위로 분리해 운영하는 방식이다.
- 백엔드, 프런트엔드, DB를 분리하면 관리가 쉬워진다.
docker-compose를 사용하면 여러 컨테이너를 함께 다루기 편하다.
댓글남기기