VFS 스토리지 드라이버

VFS 스토리지 드라이버

VFS 스토리지 드라이버는 유니온 파일시스템(union filesystem)이 아니에요. 각 레이어는 디스크의 디렉터리로 존재하고, copy-on-write(COW)를 지원하지 않아요. 새 레이어를 만들 때는 이전 레이어를 '깊은 복사(deep copy)'하기 때문에 다른 스토리지 드라이버보다 성능이 낮고 디스크 공간도 더 많이 사용해요. 하지만 견고하고 안정적이며 모든 환경에서 동작한다는 장점이 있어서, 테스트 환경에서 다른 스토리지 백엔드를 검증하는 용도로도 사용할 수 있답니다.

출처: 공식문서

본문

Docker에 vfs 스토리지 드라이버 설정하기

  1. Docker를 중지해요.
$ sudo systemctl stop docker
  1. /etc/docker/daemon.json 파일을 편집해요. 파일이 없다면 새로 만들면 돼요. 파일이 비어 있다고 가정하고 다음 내용을 추가해요.
{
 "storage-driver": "vfs"
}

VFS 스토리지 드라이버가 사용할 수 있는 최대 크기를 제한하는 쿼터를 설정하려면 storage-opts 키에 size 옵션을 지정하면 돼요.

{
 "storage-driver": "vfs",
 "storage-opts": ["size=256M"]
}

daemon.json 파일에 유효하지 않은 JSON이 들어 있으면 Docker가 시작되지 않으니 주의해야 해요.

  1. Docker를 시작해요.
$ sudo systemctl start docker
  1. 데몬이 vfs 스토리지 드라이버를 사용하는지 확인해요. docker info 명령어를 실행해서 Storage Driver 항목을 찾아보면 돼요.
$ docker info

Storage Driver: vfs
...

이제 Docker가 vfs 스토리지 드라이버를 사용하게 됐어요. Docker는 /var/lib/docker/vfs/ 디렉터리를 자동으로 생성하며, 이 디렉터리에는 실행 중인 컨테이너가 사용하는 모든 레이어가 들어 있어요.

vfs 스토리지 드라이버의 동작 방식

각 이미지 레이어와 쓰기 가능한 컨테이너 레이어는 Docker 호스트에서 /var/lib/docker/ 안의 하위 디렉터리로 표현돼요. 유니온 마운트가 모든 레이어를 하나로 통합된 뷰로 보여주는 거예요. 디렉터리 이름은 레이어 자체의 ID와 직접적으로 대응하지 않아요.

VFS는 copy-on-write(COW)를 지원하지 않아요. 새 레이어가 생성될 때마다 부모 레이어를 깊은 복사해요. 이 레이어들은 모두 /var/lib/docker/vfs/dir/ 아래에 위치해요.

예시: 이미지와 컨테이너의 디스크 구조

다음 docker pull 명령어는 Docker 호스트가 다섯 개의 레이어로 구성된 Docker 이미지를 다운로드하는 모습을 보여줘요.

$ docker pull ubuntu

Using default tag: latest
latest: Pulling from library/ubuntu
e0a742c2abfd: Pull complete
486cb8339a27: Pull complete
dc6f0d824617: Pull complete
4f7a5649a30e: Pull complete
672363445ad2: Pull complete
Digest: sha256:84c334414e2bfdcae99509a6add166bbb4fa4041dc3fa6af08046a66fed3005f
Status: Downloaded newer image for ubuntu:latest

풀(pull)이 끝나면 각 레이어는 /var/lib/docker/vfs/dir/의 하위 디렉터리로 표현돼요. 디렉터리 이름은 docker pull 명령어에서 본 이미지 레이어 ID와 관련이 없어요. 각 레이어가 디스크에서 차지하는 크기를 확인하려면 du -sh 명령어를 사용하면 사람이 읽기 쉬운 값으로 크기를 알 수 있어요.

$ ls -l /var/lib/docker/vfs/dir/

total 0
drwxr-xr-x. 2 root root 19 Aug 2 18:19 3262dfbe53dac3e1ab7dcc8ad5d8c4d586a11d2ac3c4234892e34bff7f6b821e
drwxr-xr-x. 21 root root 224 Aug 2 18:23 6af21814449345f55d88c403e66564faad965d6afa84b294ae6e740c9ded2561
drwxr-xr-x. 21 root root 224 Aug 2 18:23 6d3be4585ba32f9f5cbff0110e8d07aea5f5b9fbb1439677c27e7dfee263171c
drwxr-xr-x. 21 root root 224 Aug 2 18:23 9ecd2d88ca177413ab89f987e1507325285a7418fc76d0dcb4bc021447ba2bab
drwxr-xr-x. 21 root root 224 Aug 2 18:23 a292ac6341a65bf3a5da7b7c251e19de1294bd2ec32828de621d41c7ad31f895
drwxr-xr-x. 21 root root 224 Aug 2 18:23 e92be7a4a4e3ccbb7dd87695bca1a0ea373d4f673f455491b1342b33ed91446b
$ du -sh /var/lib/docker/vfs/dir/*

4.0K /var/lib/docker/vfs/dir/3262dfbe53dac3e1ab7dcc8ad5d8c4d586a11d2ac3c4234892e34bff7f6b821e
125M /var/lib/docker/vfs/dir/6af21814449345f55d88c403e66564faad965d6afa84b294ae6e740c9ded2561
104M /var/lib/docker/vfs/dir/6d3be4585ba32f9f5cbff0110e8d07aea5f5b9fbb1439677c27e7dfee263171c
125M /var/lib/docker/vfs/dir/9ecd2d88ca177413ab89f987e1507325285a7418fc76d0dcb4bc021447ba2bab
104M /var/lib/docker/vfs/dir/a292ac6341a65bf3a5da7b7c251e19de1294bd2ec32828de621d41c7ad31f895
104M /var/lib/docker/vfs/dir/e92be7a4a4e3ccbb7dd87695bca1a0ea373d4f673f455491b1342b33ed91446b

위 출력을 보면 세 개의 레이어는 각각 104M, 두 개의 레이어는 각각 125M를 사용하고 있어요. 이 디렉터리들은 서로 아주 작은 차이만 있는데도 모두 같은 양의 디스크 공간을 차지해요. 이것이 vfs 스토리지 드라이버의 단점 중 하나랍니다.

더 알아보기 (Learn more)