ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Docker] UnionFS, OverlayFS 알아보기
    Docker 2022. 7. 21. 11:01
    반응형

    - 목차

     

    들어가며.

    Union File System 은 여러 개의 디렉토리를 하나의 단일 파일 시스템처럼 합쳐서 보여주는 파일 시스템입니다. 

    가장 큰 특징은 UnionFS 는 ReadOnly 영역과 Writable 영역으로 나누어 크게 두가지의 계층을 나눠서 활용합니다. 

    이 방식은 각 레이어가 독립적으로 관리되어서 기본적인 Docker Image Layer 를 불변 상태로 유지시킵니다. 

    Docker 에서 UnionFS 는 Image 와 Container 사이의 저장 공간의 격리를 제공할 수 있습니다. 

    Docker Image 가 제공하는 기본적인 File 들은 ReadOnly 상태의 레이어에서 관리하고, 

    Docker Container 가 관리하는 디스크 공간은 쓰기 가능한 영역에 해당합니다. 

    특히 이러한 방식의 쓰기 방식을 Copy-on-Write 라고 합니다. 

     

    OverlayFS 와 구조.

    Docker 에서는 컨테이너 이미지의 레이어 구조를 구현하기 위해서 UnionFS 계열의 파일시스템을 사용합니다. 

    그 중에서 OverlayFS 가 주로 사용됩니다. 

    OverlayFS 는 Linux 커널에서 정식으로 지원하는 파일 시스템으로 여러 계측의 디렉토리를 하나의 통합된 뷰로 제공합니다. 

    Docker 에서는 읽기 전용 이미지 레이어들을 lowerdir , Container 가 쓰기 동작을 수행하는 영역을 upperdir 로 부릅니다. 

    이 두 계층이 조합되어 최종적인 merged 상태가 만들어집니다. 

     

    lowerdir 과 upperdir.

    우선 아래와 같은 명령어를 실행해서 Alpine Docker Container 를 실행합니다. 

    docker run -dit --name test-alpine alpine sh

     

    실행된 Alpine Docker Container 의 OverlayFS 의 Directory 들은 아래와 같은 방식으로 확인이 가능합니다. 

    docker inspect test-alpine | grep -A10 GraphDriver
    "GraphDriver": {
        "Data": {
            "ID": "94e8709631bfd66a50b943dc9f4de01f5dce23254f5fff6e548f44989f5654c9",
            "LowerDir": "/var/lib/docker/overlay2/96049bcbd7013f17a9f74d2c642741b8ada606d8d0c278ee3d977a6688bc132a-init/diff:/var/lib/docker/overlay2/fc8aa4dec036c6856a032a61d016a8b6ba2cc1ad7f8925aa68c1f712d8f4795a/diff",
            "MergedDir": "/var/lib/docker/overlay2/96049bcbd7013f17a9f74d2c642741b8ada606d8d0c278ee3d977a6688bc132a/merged",
            "UpperDir": "/var/lib/docker/overlay2/96049bcbd7013f17a9f74d2c642741b8ada606d8d0c278ee3d977a6688bc132a/diff",
            "WorkDir": "/var/lib/docker/overlay2/96049bcbd7013f17a9f74d2c642741b8ada606d8d0c278ee3d977a6688bc132a/work"
        },
        "Name": "overlay2"
    },

     

    Copy-on-Write.

    Docker Container 에서 발생하는 파일의 변경 사항들은 OverlayFS 의 UpperDir 에 반영되게 됩니다. 

    실제로 Container 내부에서 여러 파일과 디렉토리들이 생성된다면 도커 호스트의 UpperDir 디렉토리에 해당 내용들이 반영됩니다. 

    /var/lib/docker/overlay2/UpperDir/diff/
    └── root
        ├── a
        ├── b
        └── test
            └── test.txt

     

    Copy-on-Write 는 이러한 방식처럼 Container 의 파일 변경사항이 발생하면 LowerDir 과 UpperDir 중에서 UpperDir 에 변경된 파일이 생성이 됩니다. 

    즉, Write (Create, Delete, Update) 등의 동작이 발생하면 LowerDir 의 파일을 복사하여 UpperDir 영역에 반영하게 됩니다. 

     

    반응형
Designed by Tistory.