스토리지 드라이버(Storage Driver)

weekbelt·2021년 3월 26일
0

Docker

목록 보기
3/3

스토리지 드라이버

도커는 특정 스토리지 백엔드 기술을 사용해 도커 컨테이너와 이미지를 저장하고 관리합니다. 일부 운영체제는 도커를 설치할 때 기본적으로 사용하도록 설정된 스토리지 드라이버가 있는데 우분투 같은 데비안 계열 운영체제는 overlay2를 사용합니다.

docker info명령어로 확인해 보겠습니다.

# docker info | grep "Storage Driver"
Storage Driver: overlay2

도커 데몬 실행 옵션에서 스토리지 드라이버를 변경할 수도 있습니다.

# dockerd --storage-driver=devicemapper

1. 스토리지 드라이버의 원리

스토리지 드라이버를 사용하면 컨테이너의 쓰기 가능 계층에 데이터를 생성 할 수 있습니다. 우선 스토리지 드라이버를 알아보기 전에 도커의 이미지와 레이어가 어떻게 구성되는지 살펴 보겠습니다.

Docker 이미지는 일련의 레이어로 구성됩니다. 각 레이어는 이미지의 Dockerfile에 있는 명령어를 나타냅니다. 다음 Dockerfile을 살펴 보겠습니다.

FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py

이 Dockerfile에는 각각 계층을 생성하는 네 개의 명령이 포함되어 있습니다.

새 컨테이너를 만들 때 기본레이어 위에 새 쓰기 가능한 레이어를 추가하고 이 레이어를 보통 container layer 라고 합니다. 새 파일 쓰기, 기존 파일 수정 및 파일 삭제와 같이 실행중인 컨테이너에 대한 모든 변경 사항은 container layer에 기록됩니다.

레이어
스토리지 드라이버는 이러한 계층이 서로 상호 작용하는 방식에 대한 세부 정보를 처리합니다. 상황에 따라 장점과 단점이 있는 다양한 스토리지 드라이버를 사용할 수 있습니다.


실제로 컨테이너 내부에서 읽기와 새로운 파일 쓰기, 기존의 파일 쓰기 작업이 일어날 때는 드라이버에 따라 Copy-on-Write(Cow)와 같은 개념을 사용합니다. 그래서 이 개념에 대해 간단히 짚고 넘어가겠습니다.

1.1 Copy-on-Write(CoW)

Copy-on-Write는 최대의 효율성을 위해 파일을 공유하고 복사하는 전략입니다. 이미지 내의 하위 레이어에 파일이나 디렉토리가 존재하고 최상위 레이어(쓰기 가능 계층)에 읽기 액세스가 필요한 경우 기존파일만 사용합니다. 반면 다른 레이어가 파일을 처음 수정해야 할 때 파일이 해당 레이어에 복사되고 수정됩니다.

CoW

2. overlayFS

OverlayFS는 Linux의 통합 마운트 파일 시스템입니다. OverlayFS는 다른 스토리지 드라이버와는 달리 계층화된 이미지 구조를 사용하지 않으며, lowedir이라는 단일화된 이미지 레이어를 사용합니다. 하위 디렉토리를 lowerdir로, 상위 디렉토리를 upperdir로 참조합니다. 통합 뷰는 merged라는 자체 디렉토리를 통해 노출됩니다.

overlay구조
이미지의 top 레이어는 lowerdir이고 읽기 전용입니다. 컨테이너를 위한 새로운 디렉토리는 upperdir이고, 쓰기 가능한 디렉토리입니다. 이들의 통합된 View를 "merged" 디렉토리를 통해 노출됩니다.

ubuntu 이미지 가져오기

# docker pull ubuntu:14.04
14.04: Pulling from library/ubuntu
2e6e20c8e2e6: Pull complete
95201152d9ff: Pull complete
5f63a3b65493: Pull complete
Digest: sha256:63fce984528cec8714c365919882f8fb64c8a3edf23fdfa0b218a2756125456f
Status: Downloaded newer image for ubuntu:14.04
docker.io/library/ubuntu:14.04

호스트로 빠져나와 /var/lib/docker/overlay2 디렉토리의 내용을 보면 다음과 같이 컨테이너와 이미지의 파일을 담고 있는 디렉토리가 존재하는 것을 확인할 수 있습니다.

ubuntu 이미지를 다운로드 한 후 /var/lib/docker/overlay2 아래에 4개의 디렉토리를 볼 수 있습니다.

# ls -l /var/lib/docker/overlay2
total 16
drwx------ 4 root root 4096 Mar 16 16:31 73752f2027e257307c502753955b8307b625e195cd27a1c08ef6612f484746af
drwx------ 3 root root 4096 Mar 16 16:31 981c5c5acdf4169f7ce87c72a5db5f59a23befaf15791fcb8ef532bc03adabca
drwx------ 4 root root 4096 Mar 16 16:31 c783d26bc409b21f61f9080b2b653289cb5212f7ff0cdd37e938bb0688fa6d68
drwx------ 2 root root 4096 Mar 16 16:31 l

l 디렉토리에는 단축된 레이어 식별자가 심볼릭 링크로 포함되어 있습니다.

# ls -l /var/lib/docker/overlay2/l
total 12
lrwxrwxrwx 1 root root 72 Mar 16 16:31 3COF6GXVV7XOR7XNVUGY6EUVUI -> ../73752f2027e257307c502753955b8307b625e195cd27a1c08ef6612f484746af/diff
lrwxrwxrwx 1 root root 72 Mar 16 16:31 GXK3BQEBN77IJCXKGHWRLHGAZI -> ../c783d26bc409b21f61f9080b2b653289cb5212f7ff0cdd37e938bb0688fa6d68/diff
lrwxrwxrwx 1 root root 72 Mar 16 16:31 NAO6MYAM2VGYAJTMSECSHJJ2TB -> ../981c5c5acdf4169f7ce87c72a5db5f59a23befaf15791fcb8ef532bc03adabca/diff

가장 낮은 레이어에는 단축된 식별자의 이름이 포함된 link라는 파일과 레이어의 내용이 포함된 diff라는 디렉토리가 있습니다.

# ls /var/lib/docker/overlay2/981c5c5acdf4169f7ce87c72a5db5f59a23befaf15791fcb8ef532bc03adabca
committed  diff  link

참고자료 : https://docs.docker.com/get-started/overview/

참고자료 : https://www.oreilly.com/library/view/getting-started-with/9781838645700/4da0f0db-5661-4599-91f7-53fc1ec62698.xhtml

profile
백엔드 개발자 입니다

0개의 댓글