본문 바로가기
Docker

[Docker] Dockerfile 작성법 및 이미지 만들기

by 임혁진 2025. 4. 17.

📌 Dockerfile이란?

Dockerfile은 도커 이미지를 만들기 위한 스크립트 파일입니다.

🤔 왜 필요할까?

  • 이미지를 수동으로 만드는 건 비효율적 → 명령어를 자동화
  • 누가 어떤 환경에서 만들었는지 추적 어려움 → Dockerfile로 버전 관리 가능
  • 배포 환경마다 설정이 다름 → Dockerfile로 표준화

🧱 Dockerfile 기본 구조

# 1. 사용할 베이스 이미지
FROM openjdk:17-jdk

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

# 3. jar 파일 복사
COPY build/libs/demo.jar app.jar

# 4. 포트 오픈
EXPOSE 8080

# 5. 컨테이너 실행 시 실행할 명령어
ENTRYPOINT ["java", "-jar", "app.jar"]

📘 주요 명령어 정리


 

명령어 설명
FROM 베이스 이미지 지정
WORKDIR 작업 디렉토리 설정 (없으면 생성)
COPY 호스트의 파일/디렉토리를 이미지로 복사
ADD COPY + 압축해제 기능 (복잡한 경우 사용)
RUN 이미지 빌드 도중 실행할 명령어 (ex. apt install)
CMD 컨테이너 시작 시 기본 실행 명령
ENTRYPOINT CMD와 유사, 더 고정적인 실행 방식
EXPOSE 외부로 노출할 포트 설정
ENV 환경 변수 설정
Volume 컨테이너와 호스트 간의 데이터를 공유할 수 있게 해주는 기능

도커 컨테이너는 독립적인 가상화 플랫폼이라 하였는데 왜 호스트 간 데이터를 공유해야하는지 의문이 들 수 있습니다.

 Volume을 사용하는 이유

  • 데이터 유지: 컨테이너 삭제돼도 데이터는 유지
  • 공유: 여러 컨테이너가 같은 데이터를 사용할 수 있음
  • 퍼포먼스: 로그나 DB 데이터를 외부에 저장할 때 유리

🧪  Spring Boot Dockerfile 만들기 예시

# 1. 사용할 베이스 이미지 설정 (OpenJDK 17 버전, slim은 경량 이미지)
FROM openjdk:17-jdk-slim

# 2. 외부에서 JAR 파일 이름을 매개변수로 받음 (기본값: build/libs/*.jar)
ARG JAR_FILE=build/libs/*.jar

# 3. 지정한 JAR 파일을 컨테이너 내부에 app.jar 라는 이름으로 복사
COPY ${JAR_FILE} app.jar

# 4. 애플리케이션에서 사용할 포트 (8080)를 외부에 노출
EXPOSE 8080

# 5. 호스트와 컨테이너 데이터 연결
VOLUME ["/data"]

# 6. 컨테이너가 실행될 때 실행할 명령어 정의 (java -jar /app.jar)
ENTRYPOINT ["java", "-jar", "/app.jar"]

🔨 Dockerfile → 이미지 만들기

📁 현재 디렉토리에 Dockerfile 있다고 가정

# 1. 이미지 빌드
docker build -t my-spring-app .

# 2. 이미지 확인
docker images

# 3. 이미지 실행
# 실행 시 --mount 또는 -v 옵션으로 볼륨 지정
docker run -d -p 8080:8080 -v /host/data:/data --name my-container my-spring-app
# 3-1. /host/data : 실제 내 컴퓨터의 디렉토리
# 3-2. /data : 컨테이너 내부 경로

 


🗂️ .dockerignore란?

.dockerignore는 Docker 이미지 빌드 시, 복사되지 않아야 할 파일이나 디렉토리를 지정하는 파일

 

📄 사용 방법

- 루트 디렉토리에 .dockerignore 파일을 만들고, 제외할 경로를 한 줄씩 작성

# .dockerignore 예시
# Git 관련 파일 제외
.git
.gitignore

# 빌드 결과물 제외
target/
build/

# IDE 관련 파일 제외
*.iml
.idea/
.vscode/

# 로그 파일 제외
*.log

# 환경 설정 파일 제외
.env

마무리 요약

  • Dockerfile은 이미지 자동 생성 스크립트
  • FROM → WORKDIR(없으면 자동생성) → COPY → RUN/ENTRYPOINT 흐름 기억!

 

 

📚 관련 글 추천

 

[Docker] 도커란? 도커의 핵심개념 파헤치기

🐳 도커란?도커는 애플리케이션을 컨테이너라는 단위로 패키징하여 어디서나 실행할 수 있도록 해주는 컨테이너 기반 오픈소스 가상화 플랫폼입니다.한 마디로, “애플리케이션을 실행하는

ohj9575.tistory.com

 

[Docker] 도커 설치부터 실행하여 기본 사용법을 알아보자

🐳 도커란?도커(Docker)는 컨테이너 기반의 오픈소스 가상화 플랫폼으로, 애플리케이션을 환경에 구애받지 않고 빠르게 빌드, 배포, 실행할 수 있게 도와줍니다.✅ "한 번 만들면 어디서나 실행

ohj9575.tistory.com

  • [Docker] Docker Compose로 여러 컨테이너 쉽게 관리하기