개발자라면 한번쯤 겪어봤을 문제가 있다. 

 

"엥? 로컬에서는 잘 됐는데... 왜 서버에서는 안되는걸까?"

 

이 문제의 원인은 내 컴퓨터와 서버의 환경(OS, 자바 버전, 설치된 라이브러리 등)이 다르기 때문이다. Docker는 이런 문제를 해결하기 위해 나왔다.

 

Docker는 '컨테이너'라는 기술을 사용한다. 컨테이너는 내 애플리케이션과 그 실행에 필요한 모든 환경(자바, 라이브러리 등)을 하나의 패키지로 묶어서 격리시킨 공간이다.

 

이 패키지는 어디서든 똑같이 동작하기 때문에, 내 컴퓨터에서 실행되던 것이 서버에서도, 동료의 컴퓨터에서도 똑같이 실행되는 것을 보장한다.

 

꼭 알아야 할 Docker 핵심 용어 3가지

붕어빵을 만든다고 생각해보자.

 

1. 이미지 (Image) : 

  •  비유 : 붕어빵 틀에 해당한다. 붕어빵을 만들기 위한 모든 재료(밀가루 반죽, 팥)와 레시피가 담겨있는 '설계도' 또는 '압축 파일'같은 것이다.
  •  애플리케이션을 실행하는 데 필요한 모든 것(Java, Spring 애플리케이션 코드, 라이브러리 등)이 포함된 읽기 전용(Read-Only) 템플릿이다.

2. 컨테이너 (Container) : 

  • 비유 : 붕어빵 틀(이미지)로 찍어낸 실제 붕어빵이다. 우리는 붕어빵을 먹는 것이지, 붕어빵 틀을 먹는게 아니다.
  • 이미지(Image)를 실제로 메모리에 올리고 실행한 인스턴스(프로세스)이다. 하나의 이미지로 여러 개의 컨테이너를 만들 수 있다. 

3. Dockerfile : 

  • 비유 : 붕어빵 레시피이다. "밀가루 반죽을 넣고, 팥을 넣고, 3분간 굽는다"와 같이 이미지를 어떻게 만들지 순서대로 적어놓은 텍스트 파일이다.
  • 개발자가 이미지를 만들기 위해 작성하는 스크립트이다. 이 Dockerfile을 실행하면 Docker가 알아서 이미지를 만들어준다.

정리해보면 개발자는 Dockerfile을 작성해서, Image를 만들고, 그 이미지를 실행해서 Container를 띄운다.

 

 

 

그렇다면 직접 내 애플리케이션을 Docker에 띄워보자

 

STEP 0 : Docker 설치하기

 

가장 먼저 내 컴퓨터에 Docker를 설치해야 한다. 아래 링크에서 'Docker Desktop'을 다운로드하여 설치한다. (Windows나 Mac에 맞는 버전을 설치하시면 된다.)

설치 후 Docker Desktop을 실행하면 준비 완료이다.

 

STEP 1: Spring Boot 애플리케이션 준비

 

1. 간단한 "Hello World"를 출력하는 Spring Boot 애플리케이션을 준비한다.

 

2. 가장 중요한 단계! 애플리케이션을 .jar 파일로 빌드해야 한다.

  • Gradle 사용자: 터미널에서 .\gradlew build (또는 ./gradlew build) 실행
  • Maven 사용자: 터미널에서 .\mvnw package (또는 ./mvnw package) 실행

3. 빌드가 성공하면 build/libs 또는 target 폴더 안에 프로젝트명-0.0.1-SNAPSHOT.jar 같은 파일이 생성된 것을 확인합니다.

 

STEP 2: Dockerfile 작성하기 (레시피 만들기)

# 1. 베이스 이미지 선택 (Java 17 버전을 사용)
# 'slim' 버전은 불필요한 것들을 빼서 용량이 가볍다.

FROM openjdk:17-jdk-slim

# 2. 컨테이너 내에서 작업할 디렉토리 생성

WORKDIR /app

# 3. 빌드된 .jar 파일을 컨테이너의 /app 디렉토리로 복사
# Gradle: build/libs/*.jar, Maven: target/*.jar 경로를 확인한다.

COPY build/libs/*.jar app.jar

# 4. 컨테이너가 시작될 때 실행할 명령어
# "java -jar app.jar" 명령어를 실행하여 애플리케이션을 구동한다.

ENTRYPOINT ["java", "-jar", "app.jar"]

 

 

STEP 3: Docker 이미지 빌드하기 (붕어빵 틀 만들기)

이제 터미널을 열고 프로젝트 최상위 폴더(Dockerfile이 있는 위치)에서 아래 명령어를 실행한다.

 

docker build -t my-spring-app .

 

 

  • docker build: 이미지를 만드는 명령어이다.
  • -t my-spring-app: 이미지에 my-spring-app이라는 이름(태그)을 붙여줍니다. 이름은 원하는 대로 바꿀 수 있다.
  • . : 현재 디렉토리에 있는 Dockerfile을 사용하라는 의미이고, 마지막에 점(.)을 꼭 찍어야한다.

 

STEP 4: Docker 컨테이너 실행하기 (붕어빵 굽기)

이미지가 완성되었으니, 이제 이 이미지로 컨테이너를 실행할 차례이다. 터미널에 아래 명령어를 입력한다.

 

docker run -p 8080:8080 my-spring-app

 

 

  • docker run: 이미지를 컨테이너로 실행하는 명령어이다.
  • -p 8080:8080: 포트 포워딩(Port Forwarding) 설정이다. "내 컴퓨터(Host)의 8080 포트를 컨테이너의 8080 포트와 연결해줘" 라는 의미이다. Spring Boot는 기본적으로 8080 포트를 사용하므로 이렇게 설정한다.
  • my-spring-app: 아까 STEP 3에서 만든 이미지의 이름이다.

명령어를 실행하면 Spring Boot 애플리케이션이 실행될 때의 로그가 터미널에 나타난다.

 

STEP 5: 실행 확인

웹 브라우저를 열고 주소창에 http://localhost:8080 을 입력해보면  애플리케이션이 정상적으로 보인다면 성공이다!

 

 

 

+ Recent posts