본문 바로가기
클라우드/쿠버네티스

CKAD: 쿠버네티스 마스터를 위한 Docker 이미지 최적화 전략

by gasbugs 2026. 2. 1.

'CKAD'을 꿈꾸는 여러분, 안녕하세요! 지난번 모니터링 편에 이어 오늘은 CKAD(Certified Kubernetes Application Developer)의 핵심이자, 클라우드 네이티브 엔지니어의 기본 소양인 "효율적인 Dockerfile 작성 전략"을 다뤄보려고 합니다. 🐳

쿠버네티스 환경에서 애플리케이션을 배포할 때, 잘 만들어진 Docker 이미지 하나는 배포 속도와 보안, 그리고 비용 절감까지 책임지는 아주 중요한 요소입니다. 지금부터 실무와 시험 모두에 적용 가능한 꿀팁들을 대방출합니다!


🛠️ 효율적인 Dockerfile 작성을 위한 5가지 황금률

1. 경량 베이스 이미지 선택 (Distroless & Alpine) 🧊

Dockerfile의 첫 줄, FROM에서 승부가 납니다. 무거운 OS(Ubuntu, Debian 등)를 베이스로 쓰면 이미지 크기가 커지고 보안 취약점 노출 확률도 높아집니다.

  • Alpine Linux: 5MB 내외의 초경량 배포판입니다.
  • Distroless: 실행 파일만 포함하고 쉘(shell)조차 없는 구글의 보안 강화 이미지입니다.
Dockerfile
# Bad: 무거운 이미지는 지양하세요.
FROM node:18 

# Good: 꼭 필요한 런타임만 포함된 경량 이미지를 사용하세요.
FROM node:18-alpine

2. 멀티 스테이지 빌드 (Multi-stage Build) 🏗️

빌드 도구(Maven, Go compiler 등)는 빌드할 때만 필요하고, 실행할 때는 필요 없습니다. 멀티 스테이지 빌드를 사용하면 최종 이미지에는 실행 파일만 남길 수 있습니다. CKAD에서 가장 권장하는 방식입니다.

Dockerfile
# Stage 1: Build
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o my-app main.go

# Stage 2: Final (Run)
FROM alpine:latest
WORKDIR /root/
# 빌드 결과물만 복사해 옵니다.
COPY --from=builder /app/my-app .
CMD ["./my-app"]

결과: 수백 MB의 SDK 대신 수십 MB의 실행용 이미지만 생성됩니다! 🚀


3. 레이어 캐싱 최적화 (Layer Caching) ⚡

Docker는 명령어를 레이어 단위로 저장합니다. 변경이 잦은 코드 복사(COPY . .)를 레이어 하단에 배치하면, 변경되지 않은 패키지 설치 단계는 캐시를 사용하여 빌드 시간을 획기적으로 줄일 수 있습니다.

Dockerfile
WORKDIR /app

# 변경이 적은 의존성 설치를 먼저 수행
COPY package.json .
RUN npm install

# 소스 코드는 마지막에 복사 (코드 수정 시 위 단계 캐시 활용 가능)
COPY . .

4. .dockerignore 파일 활용하기 🚫

.git, node_modules, 로컬 로그 파일 등 컨테이너 내부에 들어갈 필요 없는 파일들을 빌드 컨텍스트에서 제외하세요. 이미지 크기가 줄어들 뿐만 아니라 빌드 속도도 빨라집니다.

Plaintext
# .dockerignore 예시
.git
node_modules
dist
*.log
Dockerfile

5. 최소 권한 원칙과 가독성 🛡️

루트(root) 권한으로 컨테이너를 실행하는 것은 보안상 매우 위험합니다. 전용 유저를 생성하여 실행하고, 가독성을 위해 명령어를 적절히 결합하세요.

Dockerfile
FROM python:3.9-slim

# 명령어 결합으로 레이어 수 최소화
RUN apt-get update && apt-get install -y \
    curl \
    && rm -rf /var/lib/apt/lists/*

# 비루트 사용자 생성
RUN useradd -m appuser
USER appuser

WORKDIR /home/appuser
COPY . .

CMD ["python", "app.py"]

🎯 CKAD 실전 대비 포인트

시험 환경에서는 수차례 이미지를 빌드하고 수정해야 할 수도 있습니다. 이때 아래 사항을 기억하세요.

  1. 레이어 수 줄이기: RUN 명령어를 &&로 묶어 레이어 생성을 최소화하세요.
  2. 보안: USER 지시어를 사용하여 비루트 권한으로 실행되는지 확인하세요. (CKS 시험과도 연계되는 중요 포인트!)
  3. 환경 변수: ENV를 적절히 활용하여 애플리케이션 설정을 유연하게 만드세요.

💡 마무리하며

이미지 최적화는 단순히 용량을 줄이는 작업이 아니라, 전체 인프라의 파이프라인 효율을 높이는 과정입니다. 여러분이 만든 경량화된 이미지가 쿠버네티스 클러스터에서 더 빠르고 안정적으로 오케스트레이션될 것입니다.