피해야 할 5가지 Dockerfile 구성 오류

발행: (2026년 1월 12일 오전 01:48 GMT+9)
5 분 소요
원문: Dev.to

Source: Dev.to

Docker를 배우고 컨테이너를 최적화하기 시작했을 때, 대부분의 문제는 도구가 없어서가 아니라 Dockerfile을 작성하는 방식 때문이었습니다. 시간이 지나면서 몇 가지 반복되는 실수를 발견했고, 다른 사람들도 같은 함정을 피할 수 있도록 공유하고자 합니다.

1. Docker Desktop(또는 Docker 데몬) 실행을 잊음

이미지를 로컬에서 빌드한다면, 시작하기 전에 Docker 데몬이 실행 중인지 항상 확인하세요. 이는 몇 시간의 좌절을 예방해 줍니다.

2. 컨테이너를 루트 사용자로 실행

Docker는 기본적으로 루트 사용자로 실행되는데, 편리하지만 위험합니다. 컨테이너 내부에서는 비루트 사용자를 사용하세요.

# Dockerfile
FROM python:3.12-slim

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

WORKDIR /app
COPY . .
CMD ["python", "app.py"]

이와 같은 작은 변경만으로도 보안 수준이 크게 향상됩니다.

3. 버전이 고정되지 않았거나 과도하게 큰 베이스 이미지 사용

python:latest와 같은 태그나 크기가 큰 베이스 이미지를 사용하면 컨테이너가 부풀어 오르고 예측이 어려워집니다. 버전이 명시된 태그와 멀티스테이지 빌드를 선호하세요.

# Build Stage
FROM maven:3.9.6-eclipse-temurin-21 AS builder
WORKDIR /app
COPY . .
RUN mvn clean package

# Runtime Stage
FROM eclipse-temurin:21-jre-alpine
WORKDIR /app
COPY --from=builder /app/target/app.jar /app/
CMD ["java", "-jar", "app.jar"]

이 방법은 최종 이미지 크기를 작게 유지하고 예측 가능하게 합니다.

4. 모든 파일을 복사(COPY . .)하기

COPY . .를 무분별하게 사용하면 빌드 아티팩트, 설정 파일, 비밀 정보까지 모두 포함됩니다. 복사할 파일을 명시적으로 지정하세요.

# 빌드된 아티팩트만 복사
COPY target/app.jar /app/

조금만 더 신경 쓰면 나중에 무거워지고 위험해지는 이미지를 방지할 수 있습니다.

5. 패키지 설치를 여러 RUN 명령으로 나누기

apt-get updateapt-get install을 별도의 RUN 문으로 실행하면 불필요한 레이어가 생기고 캐시가 깨질 수 있습니다.

# 정리까지 포함한 단일 레이어 설치
RUN apt-get update && \
    apt-get install -y curl vim && \
    rm -rf /var/lib/apt/lists/*

레이어가 적을수록 = 캐시가 깔끔해지고 = 이미지가 작아집니다.

6. 불필요한 패키지 설치

추천 패키지까지 모두 설치하면 이미지 크기가 커지고 공격 표면이 넓어집니다. 필요한 것만 설치하고 나중에 정리하세요.

# 필요한 패키지만 설치
RUN apt-get update && \
    apt-get install -y --no-install-recommends curl && \
    rm -rf /var/lib/apt/lists/*

불필요한 잡동사니를 줄이고, 제어력을 높일 수 있습니다.

결론

올바른 Dockerfile 작성은 다음을 중심으로 합니다:

  • 최소 권한 – 비루트 사용자로 실행
  • 최소 베이스 이미지 – 버전이 명시된 태그와 멀티스테이지 빌드 사용
  • 명시적인 COPY 지시문 – 원치 않는 파일을 포함하지 않음
  • 단일 레이어 설치 – 이미지를 가볍게 유지하고 캐시 친화적으로
  • 불필요한 의존성 제거 – 꼭 필요한 것만 설치

이 교훈들을 적용하면 컨테이너가 더 작고, 안전하며, 예측 가능해집니다—현대 DevOps가 추구해야 할 바로 그 모습입니다.

Back to Blog

관련 글

더 보기 »

안녕, 뉴비 여기요.

안녕! 나는 다시 S.T.E.M. 분야로 돌아가고 있어. 에너지 시스템, 과학, 기술, 공학, 그리고 수학을 배우는 것을 즐겨. 내가 진행하고 있는 프로젝트 중 하나는...