먼저 도커 홈페이지로 이동후 각각 OS 환경에 맞는 도커 데스크탑을 설치해준다. 편한 개발환경을 위해 vscode 익스텐션도 설치해주자!!
설치를 한뒤 프로젝트 파일로 이동한 뒤
루트디랙토리에 Dokerfile, doker-compose.yml 파일을 생성해준다
.dokerignore 파일도 만들어주면 좋다!!(뒤에서 설명할 예정)
# Dockerfile
FROM node:18-alpine AS base
# Dependencies
FROM base AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile
# Builder
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN yarn build
# Runner
FROM base AS runner
WORKDIR /app
ENV NODE_ENV production
ENV NEXT_TELEMETRY_DISABLED 1
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
USER nextjs
EXPOSE 3000
ENV PORT 3000
ENV HOSTNAME "0.0.0.0"
CMD ["node", "server.js"]
현재 나는 yarn 패키지 매니저를 이용중이므로 yarn을 이용했다
현재 나는 멀티스테이지 빌드 방식을 이용하고 있다
멀티 스테이지 빌드는 하나의 Dockerfile 안에서 여러 단계(stage)로 나누어 빌드하는 방식입니다.
주요목적은
FROM node:18-alpine AS base
FROM base AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN yarn build
FROM base AS runner
WORKDIR /app
ENV NODE_ENV production
...
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
이미지 크기 최소화
보안 강화
캐시 최적화
빌드 속도 향상
이러한 방식은 특히 Next.js와 같은 프론트엔드 애플리케이션에서 매우 효율적이라고 한다!
여기서 .dockerignore 파일에 넣어줄 수 있는 파일들이 생기는데
node_modules
.next
.git
*.md
.env*
이렇게 있다 위 파일들을 넣어주는 이유는
yarn install로 새로 설치됨yarn build로 새로 빌드됨결론적으로
1. 성능 최적화
보안
환경 독립성
이러한 설정으로 더 효율적이고 안전한 도커 이미지를 만들 수 있다고 한다
nextjs 프로젝트는 평균적으로 5~10분정도 빌드하는데 걸린다고 한다..
이제
# 도커 컴포즈 버전 명시
version: "3"
# 실행할 서비스들을 정의
services:
# 'web'이라는 서비스 정의
web:
# 빌드 설정
build:
# 빌드 컨텍스트 (Dockerfile이 있는 위치)
context: .
# 사용할 Dockerfile 지정
dockerfile: Dockerfile
# 포트 매핑 (호스트:컨테이너)
ports:
- "3000:3000"
# 환경 변수 설정
environment:
- NODE_ENV=production
# 컨테이너 재시작 정책
restart: always
이런식으로 설정을해주고
docker build -t projectname . 를 해주면 빌드가 시작된다.
빌드가 완료 되면 도커 데스크탑 혹은 cli 명령어인 docker images를 입력하면 빌드된 이미지가 보일것이다.
다음에는 빌드한 이미지를 aws 를 통해 배포하는것 까지 해보겠습니다