<aside>
💡 Docker를 제대로 알고 사용하기 위한 필수 개념 정리
</aside>
File System
컴퓨터에서의 파일 시스템은 운영 체제에서 하드 드라이브, SSD(Solid-State Drive) 또는 USB 플래시 드라이브와 같은 저장 장치에 있는 파일을 구성하고 관리하는 데 사용하는 구조다. 파일 시스템은 저장 장치에 데이터를 저장, 액세스 및 구성하는 방법을 정의한다.
컨테이너 내에서의 파일 시스템도 비슷하다. 파일과 디렉터리를 저장하고 관리하는 구조를 의미한다. Docker는 파일 시스템을 관리하기 위해 Union File System(UnionFS)을 사용한다. UnionFS는 여러 파일 시스템을 하나의 파일 시스템으로 결합하여 읽기 전용 레이어와 읽기/쓰기 레이어를 결합할 수 있게 해준다.
- 기본 구조: Docker 이미지는 여러 레이어로 구성된 파일 시스템을 사용하여 이미지를 구축한다. 각 레이어는 읽기 전용이며, 최상위 레이어만 읽기/쓰기가 가능하다.
- 이미지와 컨테이너: Docker 이미지가 파일 시스템의 여러 레이어로 구성되어 있다면, 컨테이너는 이 이미지의 최상위 레이어에 추가된 읽기/쓰기 레이어를 포함한다.
Union File System
여러 파일 시스템 레이어를 하나의 단일 파일 시스템으로 결합하는 기술이다. 여러 개의 디렉터리(또는 파일 시스템)를 하나의 단일 파일 시스템으로 결합하여 제공한다. 이 접근 방식은 여러 레이어를 결합하여 단일 파일 시스템으로 보이게 하고, 주로 컨테이너 기술에서 이미지 레이어링을 지원하는 데 사용된다.
주요 개념
- Layer:
- UnionFS는 여러 디렉터리를 "Layer"라는 형태로 결합한다. 각 레이어는 파일 시스템의 스냅샷처럼 동작한다.
- 레이어는 읽기 전용(read-only)일 수도 있고 읽기/쓰기(read-write)일 수도 있다.
- Overlay:
- 여러 레이어가 결합되어 하나의 단일 파일 시스템으로 보이게 하는 것을 오버레이라고 한다. 사용자는 이 오버레이 파일 시스템을 통해 파일에 접근한다.
- 카피 온 라이트 (Copy-on-Write):
- 읽기 전용 레이어에서 파일을 수정하려고 하면, 파일 시스템은 파일의 사본을 만들고 이를 읽기/쓰기 레이어에 저장한다. 원본 파일은 변경되지 않는다.
- 이 메커니즘을 통해 효율적인 스토리지 사용과 빠른 파일 시스템 스냅샷이 가능하다.
Snapshot
특정 시점의 파일 시스템 상태를 캡처한 것이다. Docker에서는 이미지를 빌드하거나 컨테이너를 생성할 때 이러한 스냅샷 개념이 사용된다.
- 이미지 빌드 과정: 각 Dockerfile 명령은 새로운 레이어를 생성하며, 이는 스냅샷과 유사하다. 예를 들어,
RUN 명령을 실행하면, 해당 명령이 적용된 파일 시스템의 상태가 새로운 레이어로 저장된다.
- 컨테이너 상태: 컨테이너의 상태를 저장하고 복원할 수 있다. 이는 데이터 손실을 방지하고, 테스트 및 개발 환경에서 유용하다.
파일 시스템 상태를 캡처한다는 말에 대해 자세히 설명하면,
- 파일 시스템의 상태: 특정 시점에서 파일 시스템에 존재하는 모든 파일, 디렉토리, 그리고 이들에 대한 메타데이터(예: 파일 크기, 권한, 생성 및 수정 날짜 등)의 전체를 의미하며 다음을 포함한다:
- 파일 및 디렉토리 구조: 파일 시스템에 존재하는 모든 파일과 디렉토리의 계층 구조.
- 파일 내용: 각 파일의 실제 데이터 내용.
- 메타데이터: 파일 및 디렉토리에 대한 속성 정보(예: 파일 소유자, 권한, 타임스탬프 등).
- 캡처: 특정 시점의 파일 시스템 상태를 기록하고 저장하는 과정을 의미한다. 스냅샷을 통해 이 시점의 상태를 그대로 보존할 수 있으며, 이를 나중에 복원하거나 참조할 수 있다.
Layer