본문 바로가기

DevOps/Docker

[Docker] 도커의 데이터 관리 및 저장 (volume, mount)

1. Volume 볼륨

기본적으로 도커 컨테이너는 독립적인 저장소를 가지고 있다. 하나의 이미지 여러 컨테이너를 만든다면 해당 컨테이너마다 독립적인 볼륨이 할당되고 컨테이너가 삭제되면 해당 볼륨 또한 삭제된다.

여기서 문제는 컨제이너 내부에 저장된 데이터는 컨테이너가 삭제되었을 경우 같이 삭제된다.

도커에서 돌아가는 애플리케이션이 컨테이너의 생명주기와 관계없이 데이터를 영속적으로 저장해야할 필요가 있다. 특히 여러 개의 도커 컨테이너가 하나의 저장 공간을 공유해서 데이터를 읽거나 써야한다.

도커에서 데이터의 영속성을 보장하기 위해서는 볼륨과 바인드 마운트를 이용해야한다.

 

도커 공식 문서에서 권장하는 방식으로 도커 엔진이 관리하는 도커 스토리지 디렉토리에 새 디렉토리를 생성하여 컨테이너 내부의 볼륨 데이터를 저장하는 방식이다.

생성된 볼륨은 자동으로 호스트의 도커 스토리지 디렉토리인 /var/lib/docker/volumes/~에 저장된다. 볼륨을 컨테이너에 탑재하면 이 디렉토리가 컨테이너에 탑재되며, 도커에 의해 관리되고 호스트 시스템의 핵심 기능과 분리된다. 즉, 볼륨은 도커에 의해 완전히 관리된다는 의미이다.

 

 

 

2. 바인드 마운트 (bind mount)

바인드 마운트는 도커가 관리하는 디렉토리가 아닌, 호스트 시스템의 파일이나 디렉터리가 컨테이너에 마운트되며 호스트 시스템의 절대 경로가 참조되는 방식이다. 이 방식의 단점은 도커의 관리없이 호스트 디렉터리와 마운트를 하다 보니 컨테이너에서 호스트의 파일 시스템에 접근하여 컨테이너에 지정된 파일이 아닌 다른 파일을 삭체하거나 수정할 수 있게 된다. 그래서 호스트 시스템의 비 Docker 프로세스에 영향을 줄 수 있고 보안에도 영향을 미칠 수 있다. 따라서 도커 Volume을 사용하는 것을 권장한다.