- Published on
Docker Container lifetime & Persistent Data
- Authors
- Name
Docker
에서 컨테이너를 생성하고 컨테이너에 쓰여진 데이터들은 컨테이너를 삭제하면 기본적으로 같이 사라지게 된다. 기껏 생긴 데이터들이 없어진다는 것이다. 데이터를 영구히 보존시키기 위해 Docker에서는 두 가지의 방법을 제시하고 있다.
Docker Volume
과bind mount
이다.
Docker Volume

불륨(volume)은 Docker 컨테이너에서 생성하고 사용하는 데이터를 유지하기 위한 방법 중 하나이다. 또다른 방법인 바인딩 마운트와 비교되는데 바인딩 마운트는 호스트 시스템의 디렉토리 구조와 OS에 따라 달라지지만 불륨은 이와 별개로 Docker에 의해 완전히 관리된다. Docker CLI 명령어를 통해 쉽게 생성이 가능하다.
Volume의 장점
- 불륨은 바인드 마운트에 비해 백업 또는 마이그레이션이 쉽다.
- Docker CLI나 Docker API를 사용해 불륨을 관리할 수 있다.
- 불륨은 Linux 및 Windows 컨테이너에서 모두 작동한다.
- 여러 컨테이너 간에 불륨을 사용할 떄 보다 안전하게 공유가 가능하다.
- CLI를 통해 불륨 드라이버를 사용하면 불륨의 세부적인 설정이 가능해지는데 원격 호스트 또는 클라우드 공급자에 불륨을 저장하고 불륨의 내용을 암호화하거나 다른 기능을 추가할 수 있다.
- 새 불륨은 컨테이너로 컨텐츠를 미리 채울 수 있다.
- Docker Desktop의 불륨은 Mac 및 Windows 호스트의 바인드 마운트보다 훨씬 높은 성능을 제공한다.
Bind Mount

바인드 마운트를 사용하면 호스트의 파일 또는 디렉토리가 컨테이너에 마운트된다. 파일 또는 디렉토리는 호스트의 절대 경로로 참조된다. 이게 무슨 소리냐면 호스트 시스템, 예를 들어 Mac OS 환경의 시스템에서 /test
라는 파일 경로가 있다고 할 때 여기 안에 test_file.txt
라는 파일을 생성하고 해당 경로로 마운트를 했다고 하면 해당 컨테이너 터미널을 열어서 똑같은 경로로 들어가서 확인해보면 test_file.txt
가 존재하는 것을 확인할 수 있다. 물론 그 반대도 가능하다.
Volume VS Bind Mount
Volume
과 Bind Mount
의 가장 큰 차이점은 Docker가 관리를 해주는가 안해주는가의 차이이다. 불륨을 사용하면 컨테이너나 이미지와 같이 Docker를 통해 관리를 할 수 있다는 장점이 있다. 때문에 대부분의 경우 불륨으로 생성해서 사용하지만 로컬에서 개발을 할 때 간혹 이런 특징을 이용해야할 때가 있는데 예를 들어 보통 개발을 하면 로컬에서 작업을 하게 되는데 만약 컨테이너로 올려서 확인해야한다면 코드를 수정할 때마다 매번 컨테이너로 올리는 불편함이 생길 것이다. 개발하는 작업 디렉토리를 바인드 마운트해주면 코드를 변경할 때마다 실시간으로 컨테이너에서도 확인이 가능해진다.
번외 tmpfs Mount

앞서 말한 두 가지 옵션 외에 Linux
에서만 사용 가능한 옵션이 하나 있는데, tmpfs Mount
이다. tmpfs Mount
는 영구히 저장되는 것이 아니라 임시적으로 호스트 메모리에서만 지속되고, 컨테이너를 내리면 tmpfs Mount
가 제거되고 메모리에서 있었기 때문에 사라지게 된다.
일반적으로 거의 쓰이지않는 옵션이지만 호스트나 컨테이너에서 파일을 임시로 저장할 필요가 있을 때 유용할 수 있다.
tmpfs 마운트의 한계
- 불륨이나 바인드 마운트와 달리 컨테이너 간에
tmpfs Mount
를 공유할 수 없다. - Linux에서 도커를 실행하는 경우에만 사용할 수 있다.