nextJS의 도커 이미지 크기 줄이기
레거시 Dockerfile은 다음과 같습니다.
FROM node:16
WORKDIR /app
COPY . .
RUN yarn install --frozen-lockfile
CMD ["yarn","start"]
첫 번째 문제가 발생했습니다. Dockerfile에서.
첫 번째 솔루션
도커 이미지 크기를 줄이기 위해 다단계 빌드를 사용하려고 합니다.
FROM node:16 AS dependency
WORKDIR /app
COPY package.json .
COPY yarn.lock .
RUN yarn install --frozen-lockfile
FROM node:16-alpine AS builder
WORKDIR /app
COPY --from=dependency /app/node_modules ./node_modules
COPY . .
RUN env
RUN yarn build
CMD [ "yarn","start" ]
그러나 이미지의 크기는 여전히 만족스럽지 않습니다.
초
도커 이미지를 사용하여 nextjs 애플리케이션을 빌드하고 배포하는 방법을 조사하려고 노력했고 next.js에서 솔루션을 찾았습니다Github.
next.config.js 편집
module.exports = {
// ... rest of the configuration.
output: 'standalone',
}
FROM node:16-alpine AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY yarn.lock* package-lock.json* pnpm-lock.yaml* ./
RUN \
if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
elif [ -f package-lock.json ]; then npm ci; \
elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i; \
else echo "Lockfile not found." && exit 1; \
fi
FROM node:16-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN yarn build
FROM node:16-alpine AS runner
WORKDIR /app
ENV NODE_ENV production
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
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
USER nextjs
EXPOSE 3000
ENV PORT 3000
CMD ["node", "server.js"]
node_modules
build
.dockerignore
Dockerfile
Dockerfile.*
결과
이미지 크기가 1GB 이상에서 약 1xxMB로 줄어듭니다.
캐시 사용
이 프로젝트에서는 실을 패키지 종속성으로 사용합니다. 우리가 실행하면 Dockerfile에서
yarn --frozen-lockfile
매우 오랜 시간이 걸리므로 패키지 종속성에서 캐시를 사용하도록 Dockerfile을 변경했습니다.
FROM node:16-alpine AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY yarn.lock* package-lock.json* pnpm-lock.yaml* ./
# RUN \
# if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
# elif [ -f package-lock.json ]; then npm ci; \
# elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i; \
# else echo "Lockfile not found." && exit 1; \
# fi
RUN --mount=type=cache,target=/root/.yarn YARN_CACHE_FOLDER=/root/.yarn yarn install --frozen-lockfile
...
Reference
이 문제에 관하여(nextJS의 도커 이미지 크기 줄이기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/goffity/reduce-image-size-of-nextjs-54mg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)