📌 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] 도커란? 도커의 핵심개념 파헤치기 https://ohj9575.tistory.com/190
[Docker] 도커란? 도커의 핵심개념 파헤치기
🐳 도커란?도커는 애플리케이션을 컨테이너라는 단위로 패키징하여 어디서나 실행할 수 있도록 해주는 컨테이너 기반 오픈소스 가상화 플랫폼입니다.한 마디로, “애플리케이션을 실행하는
ohj9575.tistory.com
- [Docker] 도커 사용법 및 자주 쓰는 명령어 정리 https://ohj9575.tistory.com/191
[Docker] 도커 설치부터 실행하여 기본 사용법을 알아보자
🐳 도커란?도커(Docker)는 컨테이너 기반의 오픈소스 가상화 플랫폼으로, 애플리케이션을 환경에 구애받지 않고 빠르게 빌드, 배포, 실행할 수 있게 도와줍니다.✅ "한 번 만들면 어디서나 실행
ohj9575.tistory.com
- [Docker] Docker Compose로 여러 컨테이너 쉽게 관리하기
'Docker' 카테고리의 다른 글
[Docker] Docker Network - 컨테이너 간 통신 제어 (0) | 2025.04.17 |
---|---|
[Docker] docker-compose.override.yml 개념 및 사용법 (0) | 2025.04.17 |
[Docker] Docker Compose로 여러 컨테이너 쉽게 관리하기 (1) | 2025.04.17 |
[Docker] 도커 설치부터 실행하여 기본 사용법을 알아보자 (0) | 2025.04.17 |
[Docker] 도커란? 도커의 핵심개념 파헤치기 (0) | 2025.04.17 |