Online-Investment-Platform / stock-back-end

서버 개발
0 stars 3 forks source link

Feat: Docker 배포를 진행한다. #56

Open SEUNGBOONG opened 3 weeks ago

SEUNGBOONG commented 3 weeks ago
  1. Dockerfile 작성 먼저, Docker는 애플리케이션을 컨테이너라는 격리된 환경에서 실행할 수 있게 해주는 도구입니다. Spring Boot 애플리케이션을 Docker 컨테이너로 배포하려면, 먼저 Dockerfile을 작성해야 합니다. Dockerfile은 Docker가 컨테이너 이미지를 빌드할 때 따라야 할 명령어들을 담고 있는 파일입니다.

Dockerfile 작성 단계 Dockerfile 생성 프로젝트 루트 디렉토리(예: src/main 같은 곳이 아닌 최상위)에 Dockerfile을 생성하세요. 이름은 반드시 Dockerfile이어야 합니다.

bash 코드 복사 touch Dockerfile Dockerfile에 내용 작성 이 Dockerfile을 통해 Java 애플리케이션이 실행될 환경을 정의할 수 있습니다. 기본적으로, Java를 실행할 수 있는 이미지를 기반으로 애플리케이션을 실행하게 됩니다.

다음은 간단한 Spring Boot 애플리케이션을 위한 Dockerfile 예시입니다.

Dockerfile 코드 복사

1. Java 17을 사용할 기본 이미지를 지정

FROM openjdk:17-jdk-slim

2. Docker 컨테이너 내에서 사용할 작업 디렉토리를 설정

WORKDIR /app

3. Spring Boot에서 생성된 JAR 파일을 복사 (경로를 정확히 설정)

COPY build/libs/your-app-name.jar /app/app.jar

4. JAR 파일을 실행하는 명령어 지정

ENTRYPOINT ["java", "-jar", "app.jar"] 위에서 설정한 각 단계에 대해 자세히 설명드리겠습니다:

Dockerfile의 각 부분 설명 FROM openjdk:17-jdk-slim: Docker 이미지를 빌드할 때 사용할 기본 이미지를 지정합니다. 여기서는 Java 17이 설치된 slim(가벼운) 이미지를 사용합니다. 이는 Spring Boot 애플리케이션이 Java로 작성되었으므로 필요합니다.

WORKDIR /app: 컨테이너 내부에서 작업 디렉토리를 설정합니다. /app 디렉토리가 없으면 자동으로 생성되며, 이 디렉토리가 이후 명령어들이 실행될 기본 디렉토리가 됩니다.

COPY build/libs/your-app-name.jar /app/app.jar: 빌드된 JAR 파일을 컨테이너의 /app 디렉토리에 복사합니다. 여기서 your-app-name.jar 부분은 실제 빌드된 JAR 파일의 이름으로 교체해야 합니다. 예를 들어, 프로젝트 이름이 myproject라면 myproject-0.0.1-SNAPSHOT.jar 같은 식으로 파일명을 지정해야 합니다.

JAR 파일은 일반적으로 Gradle로 프로젝트를 빌드하면 build/libs/ 디렉토리에 생성됩니다.

ENTRYPOINT ["java", "-jar", "app.jar"]: 컨테이너가 실행될 때 JAR 파일을 실행하는 명령어를 설정합니다. 여기서는 java -jar app.jar 명령을 실행하여 Spring Boot 애플리케이션을 시작하게 됩니다.

  1. Dockerfile 작성 후 Dockerfile을 작성한 후, Docker는 이 파일을 기반으로 애플리케이션을 패키징하게 됩니다. Dockerfile이 있으면, 다음 단계에서 Docker 이미지를 빌드할 수 있게 됩니다.

  2. Gradle 빌드 및 Docker 이미지 빌드 애플리케이션을 컨테이너로 패키징하기 위해서는 JAR 파일이 먼저 필요합니다. Spring Boot 프로젝트를 Gradle로 빌드하여 JAR 파일을 생성합니다.

Gradle 빌드 명령 프로젝트 루트 디렉토리에서 아래 명령어를 실행하여 애플리케이션을 빌드합니다.

bash 코드 복사 ./gradlew bootJar 이 명령은 build/libs/ 폴더에 JAR 파일을 생성합니다. 이때 build/libs/your-app-name.jar 파일이 생성됩니다. Dockerfile에서 이 JAR 파일을 컨테이너에 복사하여 애플리케이션을 실행할 것입니다.

Docker 이미지 빌드 JAR 파일이 생성되면, 이제 Docker 이미지를 빌드할 차례입니다. 프로젝트의 루트 디렉토리에서 다음 명령을 실행합니다.

bash 코드 복사 docker build -t your-dockerhub-username/your-app-name:latest . 위 명령어는 현재 디렉토리(.)에 있는 Dockerfile을 사용해 Docker 이미지를 빌드합니다. -t는 이미지를 태그하는 옵션으로, your-dockerhub-username/your-app-name:latest로 태그된 이미지를 생성합니다.

  1. Docker Hub에 이미지 푸시 이미지를 빌드한 후, Docker Hub에 푸시해야 다른 서버에서 이를 가져와 실행할 수 있습니다. Docker Hub 계정이 없다면 Docker Hub에 가입 후 저장소를 만들 수 있습니다.

Docker Hub 로그인 Docker Hub에 로그인하려면 터미널에서 다음 명령어를 실행합니다.

bash 코드 복사 docker login 로그인 정보(Docker Hub ID와 비밀번호)를 입력하면 Docker Hub에 접속할 수 있습니다.

Docker 이미지 푸시 로그인 후, 다음 명령어로 이미지를 Docker Hub에 푸시합니다.

bash 코드 복사 docker push your-dockerhub-username/your-app-name:latest 이 명령어는 Docker Hub에 빌드한 이미지를 업로드합니다. 이 이미지를 다른 서버나 클라우드 환경에서 사용할 수 있습니다.

  1. 서버에서 Docker 컨테이너 실행 이제 서버에서 Docker 이미지를 가져와서 애플리케이션을 실행할 수 있습니다. 예를 들어, AWS EC2 같은 서버에 SSH로 접속한 후 아래 명령을 실행합니다.

Docker 이미지 실행 bash 코드 복사 docker pull your-dockerhub-username/your-app-name:latest docker run -d -p 8080:8080 your-dockerhub-username/your-app-name:latest 이 명령어는 Docker Hub에서 이미지를 가져오고, 포트 8080에서 Spring Boot 애플리케이션을 실행합니다. -d는 백그라운드에서 실행할 수 있도록 합니다.

이렇게 하면 애플리케이션이 Docker 컨테이너로 실행됩니다. http://<서버 IP>:8080으로 접속하여 애플리케이션이 실행 중인지 확인할 수 있습니다.