UFS(Union File System)이란?
- 하나의 디렉토리 위치에 여러 개의 디렉토리를 마운트하여도, 하나의 통합된 디렉토리처럼 보이게 하는 방법
(원래는 기존 디렉토리 위치에 새로운 파일 시스템을 마운트하면 새롭게 마운트된 내용만 보이게 됨)- UFS에서 사용하는 주요 개념으로 Image Layer와 CoW가 있습니다.
다음 이미지와 같이 Process1은 physical memory로부터 page A, B, C를 사용하고 있습니다.
이때, page A, B, C에 대해 읽기 작업을 수행하는 새로운 Process 2가 생성된다면, 다음 그림처럼 Process 2는 그저 physical memory에 접근하여 파일들의 내용을 그저 읽으면 됩니다.
그러나 process가 기존 파일들에 쓰기 작업을 해야 할 경우, 상황이 조금 달라집니다. 원본 파일을 유지하면서 쓰기를 저장할 수 있어야 하기 때문입니다.
이를 해결하기 위해, 쓰기 요청을 수행해야 할 경우에는 다음 그림처럼 physical memory에서 원본 파일을 복사(Read & Write)한 뒤 요청을 반영하게 됩니다. 이것이 바로 Copy on Write 전략입니다.
RoW는 CoW와 비슷하지만, 쓰기 작업 시 Copy(Read & Write)를 하는 것이 아니라, 변경점만을 저장(Write)한다는 차이가 있습니다. 따라서 CoW와는 다르게 한 번의 쓰기 작업만 일어납니다.
이제 위에서 살펴봤던 도커 storage driver의 구조를 다시 한 번 보겠습니다.
원본 파일 + 변경점
이 하나의 원본 파일(layer)이 될 것입니다.도커는 드라이버에 따라 CoW 또는 RoW 개념을 사용합니다. 이제 도커에서 사용하는 Union FileSystem을 지원하는 대표적인 드라이버(AUFS, OverlayFS)에 대해서 알아보도록 하겠습니다.
docker diff
명령어를 통해, lowerdir로부터 upperdir에 어떤 변화가 있었는지를 확인할 수 있습니다.-v </host/directory>:</container/directory>
:<ro 혹은 rw>
을 붙여서 사용하여 '읽기 전용' or '쓰기 가능'의 권한을 설정할 수 있습니다.-v /host/name:/container/directory:ro
-v <volume-name>:</container/directory>
/var/lib/docker/volumes/
docker volume create <volume-name>
docker volume ls
docker volume inspect <volume-name>
docker volume rm <volume-name>
:<ro 혹은 rw>
을 붙여서 사용하여 '읽기 전용' or '쓰기 가능'의 권한을 설정할 수 있습니다.-v volume-name:/container/directory:ro
--tmpfs </container/directory>
Reference