-
Notifications
You must be signed in to change notification settings - Fork 0
/
Dockerfile
64 lines (44 loc) · 1.83 KB
/
Dockerfile
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
64
# Multi-stage build
# 1단계: 환경 설정 및 dependancy 설치
FROM node:18-alpine AS deps
RUN apk add --no-cache libc6-compat
# 명령어를 실행할 디렉터리 지정
WORKDIR /app
# Dependancy install을 위해 package.json, package-lock.json, yarn.lock 복사
COPY package.json yarn.lock ./
# Dependancy 설치 (새로운 lock 파일 수정 또는 생성 방지)
RUN yarn --frozen-lockfile
###########################################################
# 2단계: next.js 빌드 단계
FROM node:18-alpine AS builder
# 명령어를 실행할 디렉터리 지정
WORKDIR /app
# Build-time arguments
ARG NEXT_PUBLIC_MAP_KEY
ARG NEXT_PUBLIC_BACKEND_URL
ARG NEXT_PUBLIC_GOOGLE_ANALYTICS
ARG NEXT_PUBLIC_NAVER_ANALYTICS
# node_modules 등의 dependancy를 복사함.
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN yarn build
###########################################################
# 3단계: next.js 실행 단계
FROM node:18-alpine AS runner
# 명령어를 실행할 디렉터리 지정
WORKDIR /app
# container 환경에 시스템 사용자를 추가함
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
# next.config.js에서 output을 standalone으로 설정하면
# 빌드에 필요한 최소한의 파일만 ./next/standalone로 출력이 된다.
# standalone 결과물에는 public 폴더와 static 폴더 내용은 포함되지 않으므로, 따로 복사를 해준다.
COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
# 컨테이너의 수신 대기 포트를 3000으로 설정
EXPOSE 3000
# node로 애플리케이션 실행
CMD ["node", "server.js"]
# standalone으로 나온 결과값은 node 자체적으로만 실행 가능
# CMD ["npm", "start"]