0. 기반 파일
https://github.com/nice-card/express-example
1. 프로젝트 위치 확인
현재 경로를 프로젝트 경로로 설정하고 확인하기

2. Dockerfile, .dockerignore 추가
프로젝트 루트에 Dockerfile을 새로 만들기.
Dockerfile
프로젝트 루트에 만들기.
# === build stage ===
FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci # dev 포함 (tsc 사용)
COPY . .
RUN npm run build # dist/ 생성
# === runtime stage ===
FROM node:20-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY package*.json ./
RUN npm ci --omit=dev # 런타임에 필요한 것만
# 빌드 결과만 가져오기
COPY --from=build /app/dist ./dist
EXPOSE 3000
CMD ["npm", "start"] # package.json의 "start": "node dist/index.js".dockerignore
불필요한 파일이 이미지에 안 들어가게 막는 용도
node_modules
dist
npm-debug.log
.DS_Store
3. 이미지 빌드하기
docker build -t express-example .
docker run -d -p 3000:3000 --name express-example express-example
# 확인
curl http://localhost:3000
4. 컨테이너 실행
docker run -d -p 3000:3000 --name express-example express-example