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 -fDockerfile 실무 템플릿 (멀티스테이지)
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가지
- 컨테이너가 바로 종료됨
docker logs <name>먼저 확인
- 포트 충돌 (
bind: address already in use)- 포트 변경 또는 기존 프로세스 종료
- 디스크 부족
docker system df→docker system prune -f
보안 최소 원칙
- root 대신
USER지정 - 불필요한 패키지 제거(경량 이미지)
- 시크릿을 이미지에 하드코딩 금지
- 배포 전 취약점 스캔 1회