1. Docker Storage Drivers란?

Docker Storage Driver는 Docker Image와 Container를 Disk에 저장하는 것을 관리하는 Component이다.

2. Storage drivers versus Docker volumes

Docker는 image layer를 저장하기 위해서 storage driver를 사용한다. 그리고 container의 writatable layer에 데이터를 저장한다.

container의 writeable layer는 container가 running 상태일 때만 데이터를 저장한다. container가 종료되면 데이터는 사라진다.

Storage Driver는 공간효율적이나, native file system에 비해서 performance가 낮다. 때문에 DB같은 Write-Intensive Application일 경우 Docker Volume을 사용하게 좋다.

3. Images and Layers

Untitled

Docker Image는 여러 Layer로 이루어져있다. 각 Layer는 image의 도커파일안의 명령을 나타낸다.

# syntax=docker/dockerfile:1

FROM ubuntu:22.04 # ubuntu 22.04에서 이미지 생성 시작
LABEL org.opencontainers.image.authors="[email protected]"
COPY . /app # Docker client의 현재 디렉토리를 복사
RUN make /app # make command로 애플리케이션을 빌드하고 결과를 새 layer로 추가
RUN rm -r $HOME/.cache # cache directory를 삭제하고 결과를 새 layer로 추가
CMD python /app/app.py # 컨테이너 내부에서 실행할 명령을 지정 새 Layer를 추가하지 않는다.

각 Layer는 전 Layer의 변경사항의 집합이다. 전 Layer에서 add or remove 작업의 결과를 새 Layer에 저장한다.

위 dockerfile을 예시로 든다면, RUN rm -r $HOME/ .cache 를 통해 .cache 파일이 삭제된 레이어가 추가되어도, 그 이전 레이어의 .cache 파일은 삭제되지 않는다.

새로운 컨테이너를 생성하게 된다면 레이어들 위에 쓰기가 가능한 layer가 추가된다. 이 레이어를 Container Layer라고 부른다. Container가 동작되면서 수행되는 작업들은 모드 Container Layer에 기록된다. Container Layer의 작업은 Container가 종료되면 사라지게된다.