[Docker] Layered Architecture

Manx·2025년 2월 22일
0

DevOps

목록 보기
2/5

Layered Architecture에 대해 이해하기 쉽게 간략하게 정리하고자 한다.

Layered Architecture

  • Dockerfile을 읽어서, 파일 시스템에 변화를 주는 커맨드마다 새로운 이미지 레이어를 만든다.

예를 들어 다음과 같은 Docker File이 있다.

FROM Ubuntu # Layer 1

RUN apt-get update && apt-get -y install python # Layer 2

RUN pip install flask flask-mysql # Layer 3

COPY . /opt/source-code # Layer 4

ENTRYPOINT FLASK_APP=/opt/source-code/app.py flask run $ Layer 5

해당 Docker File에서 5개의 Layer가 생성된다.

  • Layer 1 : Base Ubuntu Layer ( 120MB )
  • Layer 2 : Changes in apt packages ( 306MB )
  • Layer 3 : Changes in pip packages ( 6.3MB )
  • Layer 4 : Source code ( 229 B )
  • Layer 5 : Update Entrypoint 0B

각 Layer는 이전 Layer의 변경 사항만을 저장한다.

해당 Layer 파일들은 Docker Cache에 저장되고, Base Ubuntu Layer가 필요한 다른 Docker File에서 재사용된다.
-> 따라서 이 파일들은 Read Only여야 한다.


이후 해당 컨테이너를 실행할 시 다음과 같은 일이 벌어진다.

  • Layer 1 ~ 5는 Read Only이기 때문에, Read Only가 아닌 쓸 수 있는 파일로 복제하여 Layer 6를 생성한다.

Layer 6. Container Layer ( Read/Write )

-> 이를 COPY-ON-WRITE 라 한다.


Storage Driver

앞서 말한 Layer를 담당하고, 효율적인 작업을 위한 Driver로 생각하면 된다.

  • 레이어 관리: 이미지와 컨테이너의 각 레이어를 어떻게 저장하고, 캐시하며, 복제할지를 결정
  • 데이터 최적화: 데이터의 효율적인 읽기, 쓰기 작업을 위해 레이어 합성, 복사 시의 최적화를 담당

종류 : AUFS, ZFS, overlay2, 등이 있다.


StorageDriver : https://docs.docker.com/engine/storage/drivers/
종류 : https://junstar92.tistory.com/170

0개의 댓글