-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
63 lines (52 loc) · 2.15 KB
/
Copy pathDockerfile
File metadata and controls
63 lines (52 loc) · 2.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# --- Stage 1: The "Builder" ---
# 1. Node.js 22 공식 이미지를 기반으로 시작합니다.
# 이 이미지는 Debian 12 (Bookworm)을 기반으로 하므로 apt를 사용할 수 있습니다.
FROM node:22-bookworm-slim AS builder
# 작업 디렉토리 설정
WORKDIR /app
# CodeBuild에서 전달받을 Build Argument 선언
ARG TABLE_NAME
ARG REGION_PRIMARY
ARG REGION_SECONDARY
ARG CACHE_AGE
# ARG를 컨테이너 내부의 환경 변수로 설정
# 이래야 'RUN npm run build' 단계에서 process.env로 읽을 수 있음
ENV TABLE_NAME=$TABLE_NAME
ENV REGION_PRIMARY=$REGION_PRIMARY
ENV REGION_SECONDARY=$REGION_SECONDARY
ENV CACHE_AGE=$CACHE_AGE
# 2. Python 3 및 pip, zip 유틸리티 설치
# Debian 12의 기본 Python 3 (3.11.x)을 설치합니다.
# python-minifier는 이 버전과 호환됩니다.
# zip은 buildspec의 zip 명령을 동일하게 수행하기 위해 추가합니다.
RUN apt-get update && apt-get install -y \
python3 \
python3-pip \
zip \
&& rm -rf /var/lib/apt/lists/*
# 3. Node.js 의존성 설치 (Terser, Csso 등)
# package.json부터 복사하여 Docker 레이어 캐시를 활용합니다.
COPY package.json package-lock.json ./
RUN npm install
# 4. Python 의존성 설치 (python-minifier)
COPY requirements.txt ./
RUN pip install -r requirements.txt --break-system-packages
# 5. 전체 소스 코드 복사
# (src/, build.mjs, config.json 등)
# .dockerignore 파일에 의해 불필요한 파일(node_modules 등)은 제외됩니다.
COPY . .
# 6. 빌드 스크립트 실행
# build.mjs가 dist/ 폴더에 경량화된 .js, .css, .py 파일을 생성합니다.
RUN npm run build
# 7. buildspec.yml의 zip 압축 단계를 Docker 빌드에 포함
RUN cd dist && \
zip lambda_function_py.zip lambda_function.py && \
zip index_mjs.zip index.mjs && \
cd ..
# --- Stage 2: The Final Output ---
# 8. 최종 스테이지는 빈 'scratch' 이미지를 사용합니다.
# 이 이미지는 오직 빌드 결과물(dist 폴더)만 담기 위한 용도입니다.
FROM scratch
# 9. "builder" 스테이지의 /app/dist 폴더 내용을
# 최종 이미지의 루트(/)로 복사합니다.
COPY --from=builder /app/dist /