스토리지 드라이버 선택하기
스토리지 드라이버 선택하기
컨테이너를 운영할 때는 가능하면 데이터를 컨테이너의 쓰기 가능 레이어(writable layer)에 저장하지 않고, Docker 볼륨을 사용하는 게 좋아요. 그런데 어떤 워크로드는 어쩔 수 없이 컨테이너의 쓰기 가능 레이어에 데이터를 써야 할 때가 있어요. 이때 바로 스토리지 드라이버가 필요해진답니다. 이 문서에서는 Docker가 제공하는 여러 스토리지 드라이버 중에서 어떤 기준으로 고르면 좋은지, 그리고 각 드라이버의 특징을 쉽게 설명해 드릴게요.
출처: 공식문서
본문
시작하기 전에 알아둘 점
참고
Docker Engine 29.0 이상을 새로 설치하면 기본적으로 containerd 이미지 스토어를 사용해요. 이전 버전에서 업그레이드한 경우에는 데몬이 이 페이지에서 설명하는 기존 클래식 스토리지 드라이버를 계속 사용하니까, containerd 이미지 스토어로 전환하려면 containerd 이미지 스토어 문서의 안내를 따라 하면 돼요.
Docker는 플러그인 방식으로 여러 스토리지 드라이버를 지원해요. 스토리지 드라이버는 Docker 호스트에서 이미지와 컨테이너를 어떻게 저장하고 관리할지를 결정해요. 스토리지 드라이버 개요를 읽었다면, 이제 워크로드에 가장 적합한 드라이버를 고를 차례예요. 일반적인 상황에서 성능과 안정성이 가장 좋은 드라이버를 선택하는 게 핵심이에요.
참고
이 페이지는 Linux에서 Docker Engine을 운영할 때의 스토리지 드라이버를 다루고 있어요. 호스트 OS가 Windows라면 지원되는 유일한 스토리지 드라이버는windowsfilter예요. 자세한 내용은 windowsfilter 문서를 참고하세요.
Docker Engine이 Linux에서 제공하는 스토리지 백엔드는 다음과 같아요.
| 백엔드 | 설명 |
|---|---|
containerd (snapshotters) |
Docker Engine 29.0 이상의 기본값이에요. containerd 스냅샷터를 사용해서 이미지를 저장하며, 멀티 플랫폼 이미지와 attestation을 지원해요. 자세한 내용은 containerd 이미지 스토어 문서를 보세요. |
overlay2 |
클래식 스토리지 드라이버예요. 현재 지원되는 Linux 배포판 대부분에서 호환성이 가장 좋고, 별도 설정이 필요 없어요. |
fuse-overlayfs |
루트리스 Docker를 실행할 때, 호스트가 루트리스 overlay2를 지원하지 않는 경우에만 선호돼요. Linux 커널 5.11부터는 overlay2가 루트리스 모드에서 동작하므로 굳이 필요하지 않아요. 자세한 내용은 루트리스 모드 문서를 참고하세요. |
btrfs 및 zfs |
스냅샷 생성 같은 고급 옵션을 제공하지만, 설정과 유지보수가 더 필요해요. 각각 백킹 파일시스템이 올바르게 설정되어 있어야 해요. |
vfs |
테스트 목적이나 copy-on-write 파일시스템을 사용할 수 없는 상황을 위한 드라이버예요. 성능이 좋지 않아서 프로덕션에는 권장하지 않아요. |
Docker Engine은 명시적으로 스토리지 드라이버를 설정하지 않으면, 사전 요구사항을 충족하는 드라이버 중에서 우선순위에 따라 자동으로 호환되는 드라이버를 선택해요. 그 순서는 Docker Engine 29.8.1 소스 코드에서 확인할 수 있어요.
일부 스토리지 드라이버는 백킹 파일시스템을 특정 형식으로 사용해야 해요. 외부 요구사항 때문에 특정 백킹 파일시스템을 써야 한다면 선택할 수 있는 드라이버가 제한될 수 있어요. 자세한 내용은 지원되는 백킹 파일시스템을 참고하세요.
Linux 배포판별 지원되는 스토리지 드라이버
참고
Docker Desktop에서는 데몬 설정 파일을 편집해서 스토리지 드라이버를 바꾸는 걸 지원하지 않아요. Docker Desktop은 기본적으로 containerd 이미지 스토어를 사용해요 (클린 설치 기준 4.34 이상). 아래 표는 루트리스 모드의 Docker Engine에는 적용되지 않아요. 루트리스 모드에서 사용 가능한 드라이버는 루트리스 모드 문서를 참고하세요.
이 섹션은 클래식 스토리지 드라이버에만 해당해요. containerd 이미지 스토어(Docker Engine 29.0+의 기본값)를 사용 중이라면 containerd 이미지 스토어 문서를 대신 확인하세요.
운영체제와 커널에 따라 모든 클래식 스토리지 드라이버를 지원하지 않을 수 있어요. 예를 들어 btrfs는 시스템이 btrfs를 스토리지로 사용할 때만 지원돼요. 일반적으로 최신 Linux 배포판에서는 다음 구성이 잘 동작해요.
| Linux 배포판 | 기본 클래식 드라이버 | 대체 드라이버 |
|---|---|---|
| Ubuntu | overlay2 |
zfs, vfs |
| Debian | overlay2 |
vfs |
| CentOS | overlay2 |
zfs, vfs |
| Fedora | overlay2 |
zfs, vfs |
| SLES 15 | overlay2 |
vfs |
| RHEL | overlay2 |
vfs |
클래식 스토리지 드라이버를 사용하는 시스템에서는 overlay2가 Linux 배포판 전반에 걸쳐 폭넓은 호환성을 제공해요. 쓰기 작업이 많은 워크로드는 컨테이너의 쓰기 가능 레이어에 데이터를 쓰는 대신 Docker 볼륨을 사용하는 게 좋아요.
vfs 스토리지 드라이버는 보통 최선의 선택이 아니에요. 주로 다른 스토리지 드라이버를 지원하지 않는 상황에서 디버깅 목적으로 사용해요. vfs 드라이버를 사용하기 전에 성능 및 저장 특성과 제한 사항을 꼭 읽어보세요.
위 표의 권장 구성은 많은 사용자에게 잘 동작하는 것으로 알려져 있어요. 권장 구성을 사용하다가 재현 가능한 문제를 발견하면 빠르게 수정될 가능성이 높아요. 표에서 권장하지 않는 드라이버를 사용하고 싶다면, 본인 책임 하에 실행할 수 있어요. 문제가 생기면 리포트하는 게 좋지만, 권장 구성을 사용할 때 발생한 이슈보다 우선순위는 낮아요.
Linux 배포판에 따라 btrfs 같은 다른 스토리지 드라이버를 사용할 수도 있어요. 이런 드라이버는 특정 사용 사례에서 장점이 있을 수 있지만, 추가 설정이나 유지보수가 필요해서 일반적인 시나리오에서는 권장하지 않아요. 자세한 내용은 각 스토리지 드라이버 문서를 참고하세요.
지원되는 백킹 파일시스템
Docker에서 백킹 파일시스템은 /var/lib/docker/가 위치한 파일시스템을 의미해요. 일부 스토리지 드라이버는 특정 백킹 파일시스템에서만 동작해요.
| 스토리지 드라이버 | 지원되는 백킹 파일시스템 |
|---|---|
overlay2 |
xfs (ftype=1), ext4, btrfs 등 |
fuse-overlayfs |
모든 파일시스템 |
btrfs |
btrfs |
zfs |
zfs |
vfs |
모든 파일시스템 |
참고
대부분의 파일시스템은 필요한 기능만 갖추고 있으면 동작할 거예요. 더 자세한 내용은 OverlayFS 문서를 참고하세요.
그 외 고려 사항
워크로드에 맞는지
각 스토리지 드라이버는 성능 특성이 달라서 워크로드에 따라 적합도가 달라져요. 일반적으로 다음과 같이 정리할 수 있어요.
overlay2는 블록 레벨이 아니라 파일 레벨에서 동작해요. 메모리를 더 효율적으로 사용하지만, 쓰기 작업이 많은 워크로드에서는 컨테이너의 쓰기 가능 레이어가 꽤 커질 수 있어요.btrfs,zfs같은 블록 레벨 스토리지 드라이버는 쓰기 작업이 많은 워크로드에서 더 좋은 성능을 보여줘요 (하지만 Docker 볼륨만큼은 아니에요).btrfs와zfs는 메모리를 많이 필요로 해요.zfs는 PaaS 같은 고밀도 워크로드에 좋은 선택이에요.
성능, 적합성, 모범 사례에 대한 자세한 내용은 각 스토리지 드라이버 문서에서 확인할 수 있어요.
공유 스토리지 시스템과 스토리지 드라이버
SAN, NAS, 하드웨어 RAID 같은 공유 스토리지 시스템을 사용하면 고가용성, 향상된 성능, 씬 프로비저닝, 중복 제거, 압축 같은 기능을 활용할 수 있어요. 많은 경우 Docker가 이런 스토리지 시스템 위에서 동작하지만, Docker가 이들과 긴밀하게 통합되지는 않아요.
각 Docker 스토리지 드라이버는 Linux 파일시스템이나 볼륨 매니저를 기반으로 해요. 공유 스토리지 시스템 위에서 스토리지 드라이버(파일시스템 또는 볼륨 매니저)를 운영할 때는 기존 모범 사례를 따르는 게 중요해요. 예를 들어 공유 스토리지 시스템 위에서 ZFS 스토리지 드라이버를 사용한다면, 해당 공유 스토리지 시스템 위에서 ZFS 파일시스템을 운영하는 모범 사례를 반드시 따라야 해요.
안정성
어떤 사용자에게는 성능보다 안정성이 더 중요해요. Docker는 여기서 언급한 모든 스토리지 드라이버를 안정적이라고 간주하지만, 일부는 비교적 새롭고 아직 활발히 개발 중이에요. 일반적으로 overlay2가 가장 높은 안정성을 제공해요.
직접 워크로드로 테스트
다양한 스토리지 드라이버에서 자신의 워크로드를 실행해 Docker 성능을 테스트해 볼 수 있어요. 프로덕션 환경과 동일한 하드웨어와 워크로드를 사용해서 어떤 드라이버가 전반적으로 가장 좋은 성능을 보여주는지 확인하는 게 좋아요.
현재 스토리지 드라이버 확인
각 스토리지 드라이버에 대한 자세한 문서에는 해당 드라이버를 사용하기 위한 모든 설정 단계가 나와 있어요.
Docker가 현재 사용 중인 스토리지 드라이버를 확인하려면 docker info 명령을 실행하고 Storage Driver 줄을 찾아보세요.
$ docker info
Containers: 0
Images: 0
Storage Driver: overlay2
Backing Filesystem: xfs
<...>
스토리지 드라이버를 변경하려면 새 드라이버에 대한 구체적인 안내를 확인하세요. 일부 드라이버는 Docker 호스트의 물리적 또는 논리적 디스크 설정을 포함한 추가 구성이 필요해요.
중요
스토리지 드라이버를 변경하면 기존 이미지와 컨테이너에 접근할 수 없게 돼요. 새 드라이버가 기존 레이어를 사용할 수 없기 때문이에요. 변경을 되돌리면 예전 이미지와 컨테이너에 다시 접근할 수 있지만, 새 드라이버로 pull하거나 생성한 것들은 접근할 수 없게 돼요.