# 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"]
# Node.js 18 사용
FROM node:18
# 작업 디렉토리 설정
WORKDIR /app
# 의존정 설치
COPY package*.json ./
RUN npm install
# 전체 코드 복사
COPY . .
# 애플리케이션 포트 오픈
EXPOSE 3000
# 서버 실행
CMD ["npm", "start"]
# Python 3.10 사용
# 작업 디렉토리 생성
WORKDIR /app
# 필요 파일 복사 및 의존성 설치
COPY requirements.txt .
RUN pip install -r requirements.txt
# 앱 코드 복사
COPY . .
# Flask 실행
EXPOSE 5000
CMD ["python", "app.py"]
# 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
FROM nginx:alpine
COPY ./dist /usr/share/nginx/html
위의 dockerfile을 보면 알겠지만, 실무에서는 대부분 4단계 구조를 가집니다.
WORKDIR 이후 명령(COPY, RUN 등은) WORKDIR 설정한 경로에서 실행됨COPY <호스트 경로> <컨테이너 경로>COPY . . # 호스트의 현재 디렉토리(.) → 컨테이너의 WORKDIR(.)
COPY ./dist /var/www # 호스트 dist 폴더 → 컨테이너 /var/www
COPY package*.json ./ # 특정 파일만 복사