개발 공부

Docker Node.js vs. Nginx 본문

Docker

Docker Node.js vs. Nginx

아이셩짱셩 2024. 12. 11. 08:37

1. Docker 컨테이너 종류 비교 및 추천

Next.js 프로젝트를 Docker로 컨테이너화할 때, 보통 두 가지 환경 중 하나를 선택합니다:

  • Node.js 기반 컨테이너: Next.js는 Node.js 서버에서 실행되므로 기본적으로 Node.js 베이스 이미지 사용이 일반적입니다.
    • 장점: Next.js 서버 실행에 최적화되어 있으며 설정이 간단합니다.
    • 추천 이미지: node:18-alpine (경량 베이스 이미지)
  • Nginx 기반 컨테이너: Next.js 앱을 정적으로 빌드(next build && next export)하여 Nginx로 서빙하는 방식.
    • 장점: 빠르고 경량화된 정적 사이트 배포.
    • 단점: Next.js의 서버사이드 렌더링(SSR) 기능을 사용할 수 없음.
    • 추천 이미지: nginx:alpine

컨테이너 명칭 및 제공자
1. node:18-alpine와 nginx:alpine의 의미
형식: <이미지 이름>:<태그>
- node: 이미지 이름 (Node.js 환경 제공)
- 18-alpine: 태그 (Node.js 버전 18 + Alpine Linux 기반)

2. 이미지 제공자와 명명 규칙
제공자: 주로 Docker Hub에서 공식 이미지를 제공합니다.
- node, nginx 등은 공식 Docker 이미지를 의미하며, Node.js나 Nginx 개발팀이 관리합니다.
태그 규칙:
- 버전: 예) 18 → Node.js 버전 18
- 베이스 이미지: 예) alpine → 경량 리눅스 배포판
- 커스텀 태그는 작성자가 자유롭게 설정.

3. 주로 사용되는 이미지 결정 요인
커뮤니티와 공식 문서에서 추천하는 이미지.신뢰성과 유지보수 수준이 높은 공식 이미지를 사용하는 것이 좋음.

 

결론

  • SSR 또는 API 통합이 필요한 경우: node:18-alpine 사용.
  • 정적 배포가 목적이라면: nginx:alpine 사용.

2. Node.js 기반 Docker 설정

1단계: Dockerfile 작성

# Node.js를 기반으로 한 도커 이미지 사용
FROM node:18-alpine

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

# 종속성 설치를 위한 package.json 복사
COPY package.json package-lock.json ./

# 종속성 설치
RUN npm install

# 프로젝트 파일 복사
COPY . .

# Next.js 앱 빌드
RUN npm run build

# 3000 포트 열기
EXPOSE 3000

# 애플리케이션 실행
CMD ["npm", "run", "start"]
 

2단계: .dockerignore 파일 작성

node_modules
npm-debug.log

 

3단계: Docker 이미지 빌드 및 실행

# 이미지 빌드
docker build -t nextjs-app .

# 컨테이너 실행
docker run -p 3000:3000 nextjs-app

3. Nginx 기반 Docker 설정

1단계: Next.js 정적 빌드

# next.config.js에서 "output: 'export'" 설정 추가 후 빌드
npm run build
 

2단계: Dockerfile 작성

# Nginx 기반 이미지 사용
FROM nginx:alpine

# 정적 파일 복사
COPY out /usr/share/nginx/html

# Nginx 포트 설정
EXPOSE 80

 

3단계: Docker 이미지 빌드 및 실행

# 이미지 빌드
docker build -t nextjs-static .

# 컨테이너 실행
docker run -p 80:80 nextjs-static
 

4. 추가 고려 사항

  • 멀티스테이지 빌드: 빌드 환경과 실행 환경을 분리하면 더 작은 이미지를 만들 수 있습니다.
  • 환경 변수 설정: .env 파일을 docker-compose와 함께 사용해 쉽게 설정 가능.
  • Docker Compose 활용: 데이터베이스 같은 추가 서비스 통합 시 유용.
version: '3.8'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production

Docker로 Next.js를 올리는 건 어렵지 않지만, 프로젝트의 필요에 따라 컨테이너 이미지를 선택하세요! 😊

'Docker' 카테고리의 다른 글

Docker Compose, Localhost,DB  (0) 2024.12.11
Docker 포트 맵핑  (0) 2024.12.11
Docker Linux 컨테이너 비추천 이유  (0) 2024.12.11
Comments