콘텐츠로 바로가기

Docker & Containerization

애플리케이션과 모든 의존성을 격리된 컨테이너로 패키징하여 "내 로컬에서는 됐는데" 문제를 제거하는 기술.

sys.entry
M

Me

hyunyoun's Blog

software-engineering-devops2 min read

Docker & Containerization

애플리케이션과 모든 의존성을 격리된 컨테이너로 패키징하여 "내 로컬에서는 됐는데" 문제를 제거하는 기술.

VM vs Container

VM Container
격리 단위 하이퍼바이저 + 게스트 OS OS 커널 공유 (namespace + cgroup)
기동 시간 수 분 수 초
이미지 크기 GB MB
격리 강도 중 (커널 공유)

핵심 개념

Image: 읽기 전용 레이어 스택. FROM ubuntu:22.04부터 레이어 누적.
Container: 실행 중인 Image 인스턴스. 최상위에 쓰기 가능 레이어 추가.
Layer Cache: 변경된 레이어부터만 재빌드 → Dockerfile 명령어 순서가 빌드 속도에 직결.

Dockerfile 최적화

CODE
# 의존성을 소스보다 먼저 복사 → 소스 변경 시 의존성 캐시 재사용
COPY package.json .
RUN npm ci
COPY src/ ./src/

Multi-stage Build: 빌드 도구를 최종 이미지에서 제거 → 이미지 크기 최소화:

CODE
FROM node:24 AS builder
RUN npm run build

FROM node:24-alpine
COPY --from=builder /app/dist ./dist

연결 노트