# Docker 서비스 시작 및 자동 시작 설정
sudo systemctl start docker
sudo systemctl enable docker
Docker Compose 설치
# Docker Compose 다운로드 및 설치
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep -Po '"tag_name": "\K.*?(?=")')/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 실행 권한 추가
sudo chmod +x /usr/local/bin/docker-compose
# 설치 확인
docker-compose --version
Spring 프로젝트 clone
# Git 설치
sudo apt-get install git
# 프로젝트 clone
git clone my-project
~.ssh/project/my-project/Dockerfile 작성
# 베이스 이미지 OpenJDK 21 slim 버전으로 설정
FROM openjdk:21-jdk-slim
# 작업 디렉토리를 /app으로 설정
WORKDIR /app
# Gradle Wrapper 및 설정 파일들을 컨테이너의 /app 디렉토리로 복사
COPY gradlew build.gradle settings.gradle /app/
COPY gradle /app/gradle
# 소스 코드 및 리소스 파일들을 컨테이너의 /app/src 디렉토리로 복사
COPY src /app/src
# gradlew 파일에 실행 권한 부여
RUN chmod +x gradlew
# Gradle을 사용하여 프로젝트를 빌드
RUN ./gradlew build
# 컨테이너에서 외부로 노출할 포트 설정
EXPOSE 8080
# Spring Boot 애플리케이션 실행
CMD ["java", "-jar", "/app/build/libs/my-project.jar"]
~.ssh/project/nginx/default.conf 작성
server {
listen 80; # 80번 포트에서 요청 수신
server_name my-domain.com; # 서버 도메인 이름
location / {
proxy_pass http://spring:8080; # 요청을 Spring 서비스로 프록시
proxy_set_header Host $host; # 요청의 호스트 헤더 설정
proxy_set_header X-Real-IP $remote_addr; # 클라이언트의 실제 IP 설정
}
}
~.ssh/project/docker-compose.yml 작성
version:'3'# Docker Compose 버전services:nginx:# Nginx 서비스image:nginx:latest# 최신 Nginx 이미지volumes:-./nginx/default.conf:/etc/nginx/conf.d/default.conf# 설정 파일 매핑ports:-"80:80"# 호스트:컨테이너 포트 매핑depends_on:-spring# Spring 서비스 이후 시작spring:# Spring 서비스build:context:./my-project# 빌드 컨텍스트dockerfile:Dockerfile# Dockerfile 경로ports:-"8080:8080"# 호스트:컨테이너 포트 매핑