도커 파일 배포 문제

# Dockerfile

# **********
# base stage
# **********
FROM node:20.9.0-alpine AS base

WORKDIR /app

# **********
# deps stage
# **********
FROM base AS deps

# Copy package.json to /app
COPY package.json ./

# Copy available lock file
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./

# Instal dependencies according to the lockfile
RUN if [ -f "pnpm-lock.yaml" ]; then \\
        npm install -g pnpm && \\
        pnpm install; \\
    elif [ -f "yarn.lock" ]; then \\
        npm install -g yarn && \\
        yarn install; \\
    elif [ -f "package-lock.json" ]; then \\
        npm install; \\
    else \\
        npm install; \\
        # If you want to throw error on lockfile not being available, 
        # uncomment the following lines
        # echo "No Lockfile!"; \\
        # exit 1; \\
    fi

# Disable the telementary
ENV NEXT_TELEMETRY_DISABLED 1

# ***********
# inter stage
# ***********
FROM deps AS inter

# Copy all other files excluding the ones in .dockerignore
COPY . .

# exposing the port
EXPOSE 3000

# **********
# prod stage
# **********
#FROM inter AS prod

#RUN npm run build

#CMD ["npm", "start"]

# **********
# dev stage
# **********
FROM inter AS dev

CMD ["npm", "run", "dev"]

dev 환경으로 배포하면 문제가 생기나?

확인한 문제 1. dev dependencies 포함(eslint 등 ) - 하지만 mb 굉장히 적음..

image.png

기타 고민 부

# 1. Node.js 기반 이미지를 사용
FROM node:18-alpine AS build

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

# 3. package.json 및 package-lock.json 복사
COPY package*.json ./

# 4. 의존성 설치
RUN npm install

# 5. 프로젝트 파일 전체 복사
COPY . .

# 6. Next.js 앱을 빌드 (정적 파일 생성)
RUN npm run build

# 7. NGINX 이미지 사용 (빌드한 정적 파일을 서빙하기 위해)
FROM nginx:alpine

# 8. NGINX의 기본 정적 파일 경로에 빌드 결과물 복사
COPY --from=build /app/.next /usr/share/nginx/html

# 9. NGINX 포트 설정
EXPOSE 80

# 10. NGINX 시작
CMD ["nginx", "-g", "daemon off;"]

image.png

FROM node:18-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm install --only=production  # devDependencies 제외
COPY . .
RUN npm run build

# 빌드 후 NGINX 사용하여 배포
FROM nginx:alpine
COPY --from=build /app/.next /usr/share/nginx/html
COPY --from=build /app/public /usr/share/nginx/html