새소식

Linux/Ubuntu

Ubuntu - Docker + nginx + spring boot 띄우기

  • -

Docker 설치

# 필수 패키지 설치
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
# Docker GPG key 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Docker 저장소 추가
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Docker 설치
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 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" # 호스트:컨테이너 포트 매핑

디렉토리 구조 확인

~.ssh/project
├── my-project
│   ├── Dockerfile
│   └── ...(기타 프로젝트 파일)
├── nginx
│   └── default.conf
└── docker-compose.yml

실행

cd ~.ssh/project
docker-compose up --build
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.