[Docker] 컨테이너 이미지 최적화와 UFS 심화 이해

🐳 컨테이너 이미지 최적화와 UFS(Union File System) 심화 #

Docker 컨테이너를 다루다 보면 이미지 사이즈와 **Union File System(UFS)**를 이해하는 것이 필수입니다.
이번 글에서는 이미지 구조 분석, UFS 동작 원리, 최적화 실전 예제까지 다룹니다.


1️⃣ 컨테이너 이미지 사이즈(Container Size) 이해 #

컨테이너 이미지는 애플리케이션 코드 + 런타임 + 라이브러리 + OS 레이어가 합쳐진 패키지입니다.

Container Image = Base OS Layer + App Dependencies + Application Code
  • 이미지가 크면: 다운로드/배포 시간이 길어지고 디스크 사용량 증가
  • 이미지가 작으면: 배포 속도 빠르고 CI/CD 효율 상승

🔹 Tip: Alpine, Distroless 같은 경량 베이스 이미지 활용


2️⃣ UFS(Union File System) 이해 #

Union File System은 컨테이너 이미지의 레이어 구조를 합쳐서 관리하는 파일 시스템입니다.

  • 여러 파일 시스템 레이어를 합쳐 하나의 파일 시스템처럼 표시
  • 읽기 전용(Read-Only) 레이어 + 쓰기 가능한(Writeable) 레이어 구성
[Read-Only Layers]
├─ Base OS
├─ Dependencies
├─ Application Code
[Writable Layer]
└─ Container Runtime Changes
----------------------------

Merged View → 컨테이너에서 하나의 파일 시스템처럼 보임

2.1 UFS 동작 원리 #

  1. Read-Only 레이어

    • 이미지 빌드 시 생성
    • 재사용 가능 → 레이어 캐싱 효과
  2. Writable 레이어

    • 컨테이너 실행 시 생성
    • 컨테이너 내부 변경 사항 반영
  3. 파일 읽기/쓰기 흐름

    • 파일 읽기 → 가장 위 레이어부터 검색
    • 파일 쓰기 → Writable 레이어에 기록
    • 파일 삭제 → “whiteout” 파일 생성 → 하위 레이어 숨김 처리

3️⃣ 이미지 최적화 실전 예제 #

3.1 불필요 파일 제거 #

1# 불필요 캐시 제거
2RUN apt-get update && apt-get install -y curl \
3    && rm -rf /var/lib/apt/lists/*

3.2 멀티스테이지 빌드(Multi-stage Build) #

 1# Build stage
 2FROM maven:3.9-jdk17 AS build
 3WORKDIR /app
 4COPY pom.xml .
 5COPY src ./src
 6RUN mvn clean package -DskipTests
 7
 8# Production stage
 9FROM openjdk:17-jdk-slim
10WORKDIR /app
11COPY --from=build /app/target/myapp.jar .
12ENTRYPOINT ["java", "-jar", "myapp.jar"]

✅ 결과: 최종 이미지에는 빌드 도구와 캐시가 제거되어 사이즈 최소화


4️⃣ 이미지 레이어 확인 #

1# 로컬 이미지 사이즈 확인
2docker images
3
4# 레이어별 사이즈 확인
5docker history <image-name>
  • 레이어 구조를 분석하면 어디서 이미지가 커지는지 쉽게 파악 가능

5️⃣ 실무 팁 #

  • 📝 .dockerignore 활용 → 불필요 파일 제외
  • 📝 자주 변경되는 파일은 하위 레이어에 두어 캐시 활용
  • 📝 베이스 이미지는 경량 이미지 권장
  • 📝 이미지 빌드 단계 분리 → 멀티스테이지 활용

6️⃣ 요약 #

  • 컨테이너 이미지 사이즈 = OS + 라이브러리 + 애플리케이션 코드

  • UFS(Union File System) = 레이어를 합쳐 읽기 전용 + 쓰기 레이어 구조 제공

  • 이미지 최적화 포인트:

    • 불필요 파일 제거
    • 멀티스테이지 빌드
    • 레이어 캐시 전략

💡 결론: 컨테이너 효율과 배포 속도를 높이려면 이미지 구조와 UFS 동작 원리, 멀티스테이지 최적화 전략을 이해하는 것이 필수입니다.

Advertisement