도커가 익숙하지 않으시다면 아래 블로그에서 도커란 무엇인가를 읽어보시길 추천합니다.
node 17버전 에서는 아래와 같은 오류가 납니다.
16으로 바꾸시거나 위의 해결 방법을 적용해 보시길 바랍니다.
아래 코드는 node 16을 사용했습니다.
Dockerfile
# lock 파일 복제 후 , lock-file 기반으로 설치 (옵션 --frozen-lockfile)
# node:alpine으로 설정 시 node 17버전이 설치되는데 오류가 발생합니다.
# node:16-alpine 설정하시길 권장합니다.
FROM node:16-alpine AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile
# deps 에서 설치한 파일중 node_modules만 가져온걸 볼 수 있다.
# 옵션 --production devDependencies에 있는 모듈 설치 안함
# 옵션 --ignore-scripts 실행중 다른 스크립트 비활성화
# 옵션 --prefer-offline 네트워크 연결 없이 오프라인으로 install 진행
FROM node:16-alpine AS builder
WORKDIR /app
COPY . .
COPY --from=deps /app/node_modules ./node_modules
RUN yarn build && yarn install --production --ignore-scripts --prefer-offline
# Production image, copy all the files and run next
FROM node:16-alpine AS runner
WORKDIR /app
ENV NODE_ENV production
# os 사용자 추가
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
# builder 에서 복사해야할 파일이 있다면 추가하면 된다.
# COPY --from=builder /app/next.config.js ./
COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./package.json
USER nextjs
# 외부 포트 사용한다는 알림 없어도 상관없음
EXPOSE 3000
ENV PORT 3000
CMD ["node_modules/.bin/next", "start"]
반응형
'도커' 카테고리의 다른 글
Docker - Dockerfile (0) | 2022.06.19 |
---|---|
Docker - Container, Image (0) | 2022.06.19 |
Docker 설치 (window, linux) (0) | 2022.06.19 |
Docker 그게 뭔데? (0) | 2022.06.19 |
docker mysql 세팅 (0) | 2021.12.30 |
댓글