DevOps · Best Practices
Docker 컨테이너 성능 최적화의 모든 것: 용량 감소부터 실행 속도 개선까지
Docker 컨테이너는 현대 개발 환경의 핵심이지만, 최적화가 부족하면 리소스 낭비와 성능 저하가 발생합니다.
아래에서는 이미지 크기 최소화 → 실행 성능 향상 → 보안/안정성 강화까지, 현업에 즉시 적용 가능한 전략을 정리했습니다.
1. Docker 이미지 크기 최소화 전략
1) 멀티 스테이지 빌드 활용
최종 이미지에서 빌드 도구와 개발 의존성을 제거해 크기를 대폭 줄입니다.
# 빌드 스테이지
FROM node:16 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install --production=false
COPY . .
RUN npm run build
# 실행 스테이지
FROM node:16-slim
WORKDIR /app
COPY --from=builder /app/dist /app
# 필요 시 런타임 의존성만 설치 (예: pnpm i --prod)
CMD ["node", "main.js"]
2) 적절한 베이스 이미지 선택
이미지 타입 | 특징 | 권장 사례 |
---|---|---|
Full | 모든 도구 포함 | 개발 환경 |
Slim | 필수 도구만 포함 | 프로덕션 |
Alpine | 초경량 | 경량화 중점 |
3) .dockerignore
최적화
- 불필요한 파일/디렉터리 제외 (
.git
,node_modules
등) - 로그/임시 파일 제외
- 빌드 산출물만 들어가도록 관리
💡 실제 효과 — 일반적인 Node.js 앱은 위 전략만으로 이미지 크기를 1GB → 200MB 이하로 줄일 수 있습니다.
2. 컨테이너 실행 성능 최적화
1) 리소스 제한 설정
version: "3"
services:
app:
deploy:
resources:
limits:
cpus: "0.50"
memory: 512M
reservations:
cpus: "0.25"
memory: 256M
2) 캐시 레이어 최적화
- 종속성 설치와 코드 복사를 분리
- 자주 변경되는 레이어는 Dockerfile 하단에 배치
- 빌드 캐시 활용 극대화
3) 네트워크 최적화
네트워크 모드 | 특징 | 사용 사례 |
---|---|---|
bridge | 기본 모드 | 일반적인 사용 |
host | 호스트 네트워크 직접 사용 | 고성능 필요 시 |
none | 네트워크 비활성화 | 독립 실행 컨테이너 |
4) 성능 모니터링 도구
docker stats
— 기본 리소스 사용량 모니터링- cAdvisor — 상세 메트릭 수집
- Prometheus + Grafana — 종합 모니터링 대시보드
💡 운영 효과 — 응답 시간을 최대 40% 개선, 리소스 사용량을 30% 절감할 수 있습니다.
3. 보안 및 안정성 최적화
1) 권한 및 보안 설정
# 비권한 사용자 생성 및 전환
RUN adduser -D appuser
USER appuser
# 읽기 전용 마운트 (필요 시)
VOLUME ["/data"]
2) 컨테이너 헬스체크
유형 | 설명 | 적용 사례 |
---|---|---|
HEALTHCHECK | 컨테이너 상태 확인 | 모든 프로덕션 컨테이너 |
liveness probe | 애플리케이션 생존 확인 | Kubernetes 환경 |
readiness probe | 서비스 준비 상태 확인 | 트래픽 처리 전 |
3) 로깅 최적화
json-file
드라이버 사용 시 로그 로테이션 설정- 중앙집중식 로깅: ELK, Fluentd
- 로그 볼륨 별도 마운트
4) 보안 취약점 스캐닝
- Trivy로 정기 취약점 검사
- Docker Bench Security 체크
- CI/CD 파이프라인에 보안 검사 통합
💡 운영 효과 — 안정성을 높이고 운영 효율성을 20% 이상 개선할 수 있습니다.
결론
Docker 최적화는 이미지 크기 최소화, 실행 성능 개선, 보안/안정성 강화의 세 축으로 접근하세요.
프로덕션 환경에서 위 전략을 조합해 적용하면 비용 절감과 서비스 품질 향상을 동시에 달성할 수 있습니다.