Spring 입문 (Docker)

KimGwangmin·2026년 9월 7일

Docker

  • 애플리케이션실행 환경(라이브러리, 설정 등)을 함께 패키징하는 컨테이너 기술
  • 어디서든 동일하게 실행될 수 있도록 해줌: 일관성, 이식성, 확장성
  1. 이미지: 애플리케이션과 그 환경을 정의한 파일, 변경 불가능, Dockerfile에 정의됨
  2. 컨테이너: 이미지의 인스턴스(이미지를 실행한 상태), 실제 애플리케이션이 돌아가는 환경을 제공

기초 실습

  • 새 스프링 프로젝트를 만들고, Gradle로 프로젝트 빌드
  • Dockerfile 추가
# 베이스 이미지 지정
# Alpine Linux(경량 리눅스) 사용
FROM eclipse-temurin:21-jdk-alpine

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

# 빌드 파일을 컨테이너로 복사
COPY build/libs/*.jar /app/myapp.jar

#  실행 명령어
# `java -jar /app/myapp.jar` 명령어와 같음
ENTRYPOINT ["java", "-jar", "/app/myapp.jar"]
  • docker build -t test-docker-hello .: 도커 이미지 빌드

  • docker run -d -p 8080:8080 --name custom-container-name test-docker-hello: 도커 이미지 실행
    • -d(--detach): 컨테이너를 터미널 화면이 아닌 백그라운드 프로세스로 실행
    • -p xxxx:yyyy: 로컬(호스트 컴퓨터) 포트와 도커 컨테이너 내부 포트를 연결 (포트포워딩)
      • 스프링 기본 포트는 8080 이고, 보통 컨테이너 쪽도 같은 포트로 설정한다.
    • --name: 컨테이너 이름을 지정

하나의 포트는 한 프로세스만 점유할 수 있으므로, port is already allocated 에러가 발생 시 기존 프로세스를 정리해야 한다.

  • Mac: kill $(lsof -t -i:{port})
  • Windows: netstat -ano | findstr {port}로 PID 찾고 taskkill /f /pid {pid}

0개의 댓글