개발 공부
Docker Node.js vs. Nginx 본문
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