Docker를 실무에서 쓸 때 핵심은 “명령어 많이 아는 것”보다 재현 가능한 루틴을 만드는 것입니다. 이 문서는 배포/운영 기준으로 자주 쓰는 흐름만 남긴 실전 압축판입니다.

flowchart LR
A[build] --> B[run]
B --> C[logs]
C --> D[fix]
D --> E[restart]
E --> F[cleanup]

10분 실무 루틴 (복붙)

# 1) 이미지 빌드
docker build -t myapp:latest .
 
# 2) 컨테이너 실행
docker run -d --name myapp -p 8080:8080 myapp:latest
 
# 3) 상태/로그 확인
docker ps
docker logs myapp --tail 100
 
# 4) 내부 점검
docker exec -it myapp sh
 
# 5) 정리
docker stop myapp && docker rm myapp
docker image prune -f

Dockerfile 실무 템플릿 (멀티스테이지)

FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
 
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/package*.json ./
RUN npm ci --omit=dev
USER node
EXPOSE 8080
CMD ["node", "dist/server.js"]

Compose 최소 템플릿

services:
  app:
    image: myapp:latest
    container_name: myapp
    ports:
      - "8080:8080"
    restart: unless-stopped

자주 터지는 장애 3가지

  1. 컨테이너가 바로 종료됨
    • docker logs <name> 먼저 확인
  2. 포트 충돌 (bind: address already in use)
    • 포트 변경 또는 기존 프로세스 종료
  3. 디스크 부족
    • docker system dfdocker system prune -f

보안 최소 원칙

  • root 대신 USER 지정
  • 불필요한 패키지 제거(경량 이미지)
  • 시크릿을 이미지에 하드코딩 금지
  • 배포 전 취약점 스캔 1회

함께 보면 좋은 문서