본문 바로가기
Web/Infra

도커 볼륨의 종류

by EricJeong 2020. 9. 6.

도커 볼륨을 왜 사용해야 할까?

도커 컨테이너는 컨테이너마다 기본적으로 독자적인 저장소를 가지고 있습니다. 하나의 이미지로 여러 컨테이너를 만든다면 해당 컨테이너마다 독립적인 볼륨이 할당되고, 컨테이너가 삭제되면 해당 볼륨 또한 삭제됩니다. 이러한 구조에서 오는 이슈가 하나 있는데, 컨테이너 내부에 저장되는 데이터는 컨테이너가 삭제되었을 경우 같이 삭제된다는 점입니다.

 

예를 들어 제가 도커 컨테이너 내부에 제 블로그 글을 txt 파일 형식으로 저장해두었다고 가정해보겠습니다. 열심히 만든 제 글이 이 컨테이너에 존재하고 있습니다. 컨테이너 내부 볼륨에 제가 작성한 파일이 저장되어 있습니다. 컨테이너가 삭제되는 순간 제 파일도 함께 삭제될 것입니다.

 

컨테이너가 삭제되는순간 같이 지워질 소중한 파일

 

이처럼 컨테이너 내부에 중요한 데이터를 두는 것은 그다지 안전한 방법으로 보이지는 않습니다. 그렇다면 어떤 방법을 사용해야 도커 컨테이너 내부에 있는 데이터를 안전하게 보관할 수 있을까요? 도커에서는 데이터의 영속성을 보장하기 위하여 여러 방법을 지원하고 있는데, 이중 가장 쉽고 대중적인 방법은 도커 볼륨을 이용하는 것입니다.

 

도커 볼륨은 영속성을 보장하며 파일 시스템과 컨테이너를 분리하여 관리합니다. 즉 컨테이너를 지웠다가 다시 실행해도 도커 볼륨과 연결한다면 데이터는 그대로 유지된 상태입니다.

도커 볼륨의 종류

Docker volume

docker volume create 명령어를 통해 도커 엔진이 관리하는 볼륨을 생성할 수 있습니다. 생성된 볼륨은 호스트 디렉터리의 /var/lib/docker/volumes/ 루트에 저장됩니다. 도커 doc에서 가장 권장하는 방법입니다. 도커 볼륨은 컨테이너의 특정 디렉터리를 도커 볼륨과 마운트 합니다. 호스트 마운트 방식과 비슷하지만 도커 볼륨은 도커에 의해 관리되며 해당 볼륨을 어떤 컨테이너가 사용하는지, 어떻게 마운트 되는지 관리하기 용이합니다.

 

Host bind mount

Host bind mount 방식은 Docker Volume 방식과 기능적으로는 거의 유사합니다. 호스트 파일 시스템의 특정 디렉터리를 컨

 

테이너 내부 볼륨의 디렉터리와 마운트 합니다.

 

이 방식의 가장 큰 단점은 도커의 관리 없이 Host Directory와 마운트를 하다 보니 컨테이너에서 호스트의 파일 시스템에 접근하여 컨테이너에 지정된 파일이 아닌 다른 파일을 삭제/추가/수정할 수 있다는 것입니다. 도커 doc에서는 이 기능은 호스트 시스템의 비 Docker 프로세스에 영향을 주는 것을 포함하여 보안에 영향을 미칠 수 있는 강력한 기능이라고 경고하고 있습니다. 대신 같은 기능을 하는 Docker Volume을 사용하는 것을 권장하고 있습니다.

 

tmpfs 마운트

리눅스에서 도커를 실행하는 경우에만 사용할 수 있는 기능입니다. 볼륨을 호스트의 파일 시스템이 아닌, 메모리에 저장하는 방식을 사용합니다. 호스트/컨테이너 어느 파일 시스템에도 저장되지 않고 오직 컨테이너가 살아있는 동안 메모리에 저장되어있습니다. 파일로 저장되면 안 되는 민감정보/비밀 정보를 저장할 때 사용한다고 합니다.

 

 

마무리

도커 볼륨을 사용한다면, 데이터는 외부에 저장하고 컨테이너는 외부 데이터대로 동작하도록 Stateless 한 서비스를 개발할 수 있습니다. 또한 하나의 볼륨에 여러 컨테이너가 동시에 접근하여 Read/Write를 하도록 만들 수 있습니다. MySQL의 데이터 저장소 부분을 볼륨으로 저장한다면 여러 MySQL 컨테이너를 띄운 후 하나의 볼륨을 사용하도록 할 수 있을 것이며 동시에 데이터의 영속성을 보장할 수 있을 것입니다.

 

그렇기 때문에 로그 저장, 데이터 저장 등 영속성이 필요한 데이터를 저장할 때에는 도커 볼륨을 사용하여 데이터를 관리하는 것이 바람직한 방법으로 보입니다.

References

http://www.yes24.com/Product/Goods/84927385

 

시작하세요! 도커/쿠버네티스

본서는 도커를 처음 접하는 개발자를 위한 도커 컨테이너와 이미지의 기본적인 개념을 먼저 설명한 뒤, 도커 컴포즈와 스웜 모드를 통해 컨테이너 애플리케이션을 YAML 파일로 작성하고 클러스��

www.yes24.com

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

 

Use volumes

Volumes are the preferred mechanism for persisting data generated by and used by Docker containers. While bind mounts are dependent on the directory structure of the host machine, volumes are...

docs.docker.com

 

댓글