[Docker] 실무에서 많이 쓰는 Dockerfile 예제 5개

비전·2025년 6월 6일

Docker

목록 보기
9/9
post-thumbnail

1. Java Spring Boot 애플리케이션

# Java 17 기반 경량 이미지 사용
FROM openjdk:17-jdk-slim

# 빌드된 JAR 파일 복사 (Gradle or Maven 빌드 기준)
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar

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

2. Node.js Express 서버

# Node.js 18 사용
FROM node:18

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

# 의존정 설치
COPY package*.json ./
RUN npm install

# 전체 코드 복사
COPY . .

# 애플리케이션 포트 오픈
EXPOSE 3000

# 서버 실행
CMD ["npm", "start"]

3. Python Flask 앱

# Python 3.10 사용

# 작업 디렉토리 생성
WORKDIR /app

# 필요 파일 복사 및 의존성 설치
COPY requirements.txt .
RUN pip install -r requirements.txt

# 앱 코드 복사
COPY . .

# Flask 실행
EXPOSE 5000
CMD ["python", "app.py"]

4. React 정적 배포 (Nginx)

# React 앱 빌드
FROM node:18 as build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# 정적 파일을 Nginx에 복사
FROM nginx:alpine
COPY --from=build /app/build /usr/share/nginx/html

5. Nginx 정적 서버

FROM nginx:alpine
COPY ./dist /usr/share/nginx/html

결론

위의 dockerfile을 보면 알겠지만, 실무에서는 대부분 4단계 구조를 가집니다.

1. FROM

  • 어떤 언어 런타임을 쓸지 선언

2. WORKFIR/COPY/RUN

  • 애플리케이션 설치 경로와 의존성 설치 과정
  • 빌드 캐시 최적화 기능
  • WORKDIR 이후 명령(COPY, RUN 등은) WORKDIR 설정한 경로에서 실행됨
  • COPY <호스트 경로> <컨테이너 경로>
COPY . .               # 호스트의 현재 디렉토리(.) → 컨테이너의 WORKDIR(.)
COPY ./dist /var/www   # 호스트 dist 폴더 → 컨테이너 /var/www
COPY package*.json ./  # 특정 파일만 복사

3. EXPOSE

  • 컨테이너에서 열릴 포트 지정 (문서 목적, 네트워크 연동시 참고)

4. CMD/ENTRYPOINT

  • 컨테이너 시작 시 실행될 주 프로세스 지정
profile
아는 만큼 보인다

0개의 댓글