[Docker] 스프링 프로젝트를 도커(Docker)로 컨테이너화하기

스프링 프로젝트를 도커로 컨테이너화하는 과정은 현대적인 애플리케이션 배포의 필수 단계입니다. 이 포스팅에서는 Maven을 사용하여 스프링 프로젝트를 빌드하고 도커를 통해 컨테이너화하는 과정을 상세히 설명하겠습니다.

1. 스프링 프로젝트 준비

먼저, 터미널에서 프로젝트 루트 디렉토리로 이동한 후, 아래의 명령어를 사용하여 빌드가 성공적으로 완료되는지 확인합니다:

Maven
mvn clean install

Gradle
./gradlew build

이 명령어는 Maven이 프로젝트의 모든 의존성을 다운로드하고, 소스 코드를 컴파일한 뒤, 최종적으로 JAR 파일을 생성하는 과정을 수행합니다. 빌드가 완료되면 target 패키지 안에 JAR 파일이 생성될 것입니다.

 

2. Dockerfile 작성

이제 프로젝트를 빌드했으므로, Dockerfile을 작성하여 애플리케이션을 도커 이미지로 컨테이너화할 준비를 합니다. 프로젝트 루트 디렉토리에 Dockerfile을 생성합니다.

# 1. 베이스 이미지 선택
FROM openjdk:17-jdk-alpine

# 2. 작업 디렉토리 설정
WORKDIR /app

# 3. 빌드된 JAR 파일을 컨테이너로 복사
COPY target/babylion-0.0.1-SNAPSHOT.jar app.jar

# 4. 애플리케이션 실행
ENTRYPOINT ["java", "-jar", "app.jar"]

# 5. 포트 노출 (필요 시)
EXPOSE 8080

각 단계에 대한 설명은 다음과 같습니다:

  • 베이스 이미지 선택: OpenJDK 17을 사용하여 애플리케이션을 실행할 환경을 설정합니다.
  • 작업 디렉토리 설정: 컨테이너 내부에서 작업할 디렉토리를 /app으로 지정합니다.
  • JAR 파일 복사: 빌드한 JAR 파일을 컨테이너의 작업 디렉토리로 복사합니다.
  • 애플리케이션 실행: JAR 파일을 실행하는 명령어를 설정합니다.
  • 포트 노출: 컨테이너가 사용하는 포트를 외부에 노출합니다.

 

3. .dockerignore 파일 생성 (선택 사항)

.dockerignore 파일을 생성하여 도커 이미지에 포함하지 않을 파일 및 디렉토리를 지정할 수 있습니다. 예를 들어:

build/
*.md
.git

이 파일을 사용하여 이미지 빌드 시 불필요한 파일이 포함되지 않도록 합니다.

 

4. 도커 이미지 빌드 및 테스트

  • 터미널을 열고 프로젝트 루트 디렉토리에서 다음 명령어를 실행하여 도커 이미지를 빌드합니다.
  • 이 때, your-dockerhub-username은 도커 허브 사용자명, your-app-name은 애플리케이션 이름으로 바꿉니다.

 

docker build -t your-dockerhub-username/your-app-name:latest .

로컬에서 도커 이미지 테스트:

이미지가 성공적으로 빌드되면, 로컬에서 이미지를 실행하여 정상 동작하는지 확인합니다:

docker run -p 8080:8080 your-dockerhub-username/your-app-name:latest

컨테이너가 정상적으로 실행되고 있는지 확인하려면 아래 명령어를 사용할 수 있습니다:

docker ps

이제 웹 브라우저에서 http://localhost:8080으로 이동하면 애플리케이션에 접근할 수 있습니다. 😊

5. 도커 허브에 이미지 푸시

도커 허브에 이미지를 푸시하려면 먼저 도커 허브에 계정을 생성하고 로그인하세요.

로그인 명령어:

docker login

푸시 명령어:

docker push your-dockerhub-username/your-app-name:latest

6. 도커 허브에서 확인

도커 허브에서 자신의 이미지를 확인하여 올바르게 푸시되었는지 확인합니다.

아래는 확인해야 할 두 가지 사항입니다:

 

  • 컨테이너 생성 확인: 이미지를 기반으로 컨테이너가 정상적으로 생성되었는지 확인합니다.

 

  • 이미지 생성 확인: 푸시한 이미지가 도커 허브에서 잘 보이는지 체크합니다.

여기까지가 파트 1: 스프링 프로젝트를 도커로 컨테이너화하기였습니다.

다음 포스팅에서는 파트 2: EC2 인스턴스에 도커 설치 및 설정을 이어서 진행하겠습니다. 감사합니다~!~!