DevOps

[Docker] 볼륨, 바인드 마운트, tmpfs 마운트

da77777 2022. 7. 6. 05:04

도커 컨테이너 내부에 저장된 데이터는 컨테이너 삭제 시 함께 삭제된다.

도커에서 컨테이너의 생명주기와 관계 없이 데이터를 영속적으로 저장할 수 있는 방법으로는 볼륨과 바인드 마운트가 있다.

더불어 영구저장은 아니지만 tmpfs 마운트도 있는데, 이 3가지를 살펴보고자 한다.

이 3가지 방법의 가장 큰 차이점은 데이터가 어디에 저장되는가 이다.

 

 


 

볼륨(volume)

  • 볼륨을 생성하면 도커 host의 디렉터리 내에서 도커가 관리하는 영역에 저장 된다. (리눅스의 경우 /var/lib/docker/volumes/[volume명]) 볼륨을 컨테이너에 마운트하면 이 디렉터리가 컨테이너에 마운트되는 것
  • 도커에 의해 관리된다.
  • 볼륨을 마운트 할 때 볼륨 이름을 명시하거나 명시하지 않을 수 있는데, 이름을 명시하지 않은 볼륨은 컨테이너에 마운트 될 때 도커가 유니크한 임의의 이름을 부여해준다.
  • 하나의 볼륨을 여러 컨테이너가 동시에 마운트 할 수 있다. 즉, 여러 컨테이너 간 데이터 공유가 가능하다.
  • 컨테이너 용량을 늘리지 않고 데이터를 저장할 수 있다.
  • 공식문서에서는 볼륨이 도커에서 데이터를 유지하는 가장 좋은 방법이라고 한다.

바인드 마운트와 비교했을 때 볼륨의 장점

  • host의 디렉터리 구조나 OS로부터 독립적이다.
  • CLI 명령이나 도커 api를 사용해 관리할 수 있다.
  • 바인드 마운트보다 백업 혹은 마이그레이션이 용이하다.
  • 새 볼륨은 컨테이너를 통해 내용을 미리 채울 수 있다. 
  • 도커 Desktop의 볼륨은 Mac, Windows 호스트 바인드 마운트보다 성능이 우수하다.

적합한 사용 사례

  • 실행 중인 여러 컨테이너 간 데이터를 공유해야 하는 경우
  • 컨테이너의 데이터를 로컬이 아닌 원격 호스트나 클라우드에 저장하고자하는 경우
  • 한 도커 host에서 다른 도커 host로 데이터를 백업 혹은 마이그레이션 해야하는 경우
     * 마이그레이션 : 한 운영환경에서 좀 더 나은 다른 운영환경으로 데이터를 옮겨가는 과정
  • 응용 프로그램에 도커 Desktop에서 고성능 IO가 필요한 경우.
    볼륨은 host가 아닌 리눅스 VM에 저장되므로 읽기/쓰기가 빠르다. 

 

바인드 마운트(Bind Mount)

  • 마운트 되는 파일 또는 디렉토리는 요청 시 새로 생성되므로 미리 존재하지 않아도 된다.
  • 데이터 저장 위치는 호스트 시스템 전체 (쉽게 말하면 내 로컬 컴퓨터에 저장되는 것)
  • 바인드 마운트 사용 시 컨테이너에서 실행 중인 프로세스들이 host 파일 시스템에서 관련 없는 파일을 삭제하거나 수정할 수 있어 보안상 문제를 야기할 수 있다.
  • 도커가 아닌 사용자가 직접 관리하며, 볼륨에 비해 기능이 제한적이다. 
  • 성능이 좋으나, host의 파일 또는 디렉터리의 절대경로가 컨테이너에 마운트되기 때문에 host의 파일 시스템에 의존적이다.
  • Docker CLI 명령을 사용한 관리가 불가능하다.

적합한 사용 사례

  • 공식문서에서는 바인드 마운트보다는 볼륨을 대신 사용할 것을 계속 권장하고 있다.

 

tmpfs 마운트

  • 데이터 저장 위치는 호스트 시스템의 메모리로, 호스트 시스템의 파일 시스템에는 저장되지 않는다.
  • 리눅스에서 Docker를 사용할 때만 가능한 방법이다.
  • 컨테이너 중지 시 tmpfs 마운트가 제거되며 그에 작성된 파일 또한 제거된다.
  • 컨테이너 간 공유는 불가능하다. 
  • 리눅스에서 tmpfs는 Temp File System의 약어이다. 

적합한 사용 사례

  • host 시스템이나 컨테이너 내에서 데이터가 유지되지 않아야 할 경우.
    즉, 보안상 혹은 대량의 비영구 상태 데이터를 사용해야할 때 컨테이너의 성능을 보호하고자 하는 경우

 

 

 

 

 

 


참고

https://docs.docker.com/storage/

 

Manage data in Docker

 

docs.docker.com

 

https://bentist.tistory.com/79

 

도커 데이터 관리(volume, mount)

도커 컨테이너는 컨테이너마다 기본적으로 독립적인 저장소를 가지고 있다. 하나의 이미지로 여러 컨테이너를 만든다면 해당 컨테이너마다 독립적인 볼륨(하나의 파일 시스템을 갖춘 접근 가

bentist.tistory.com