Docker Volume과 Bind Mount

이애옹·2023년 11월 28일
0

📝 문제 확인

업무하는 내용 중 관리자가 서버에 파일을 올려두면,
사용자가 그 파일을 다운 받아 조회 할 수 있는 기능이 있었는데 어느날부터 파일 다운로드가 불가능 한 현상이 발생했다.

📝 문제 원인 분석

문제 원인을 확인 해 보니 원래는 배포 할때 docker를 사용하지 않았었는데,
docker를 사용한 이후로 배포가 진행 될 때 마다 Container가 지워지게 되면서 서버에 저장된 파일들도 모두 사라지고 있던 것이였다.

사실 잘 이해가 되지 않아서 정리 된 내용을 확인 해 보니,

Docker를 실행하게 되면 프로세스 위에 Container가 돌아가게 된다.
이런 Container들은 Docker image를 기반으로 만들어지고 실행된다.


여기서 Container들은 Image layer위에 write형식으로 데이터들을 저장하게 되고,
이러한 것들을 sha256 digest 형태로 저장하고 관리하게 된다.


이제 layer는 Overlay2 드라이버로 저장되며, /var/lib/docker/image/overlay2/layerdb/sha256 라는 경로에 저장되게 된다.
해당 경로 안에는 Container에 작성되고 저장된 모든 데이터와 파일이 담겨있다.


단, Container가 지워지면 기존에 write형식으로 저장되었던 layer도 지워지게 되므로 내가 발생했던 문제 처럼 기존 Image를 지우고 새로운 Image로 배포를 진행하게 될 경우 기존 파일들이 모두 삭제되는 것 이다.

따라서 Docker에서 제공하는 데이터 관리 방법을 통해 데이터를 별도로 관리 해 줘야 할 필요가 있다!

📝 해결 방법

Docker에서는 데이터를 저장하고 관리하기 위해 여러가지 방법을 제공하는데,
그 중 대표적으로 사용되는 것이 Docker Volume, Docker Bind mount 다.

📌 Docker Volume

Docker Volume은 Docker에 의해 만들어지고 관리되는 하나의 Volume이다.
주로 Host의 /var/lib/docker/volumes/ 경로에 저장되며, Container에 마운트 하지 않아도 미리 생성이 가능하다.


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

Docker Volume은 데이터를 컨테이너 밖에 저장하기 위해 사용된다.

호스트와 독립적으로 관리되며, 컨테이너의 생명주기와 독립적으로 존재하기 때문에 컨테이너가 삭제 되더라도 데이터가 보존된다.

📌 Bind Mount

Bind Mount는 Host의 디렉토리에 직접 Access 하는것을 말한다.
Host의 디렉터리와 서로 공유함으로써 Container가 지워져도 Host는 남게되어 데이터 보존이 가능하다.


출처 : https://docs.docker.com/storage/bind-mounts/

Bind Mount는 호스트의 파일 시스템에 있는 경로를 직접 컨테이너에 연결하여 사용한다.

호스트 파일 시스템의 특정 경로를 컨테이너 경로와 바인딩 하고, 호스트 파일 시스템의 변경 사항이 즉시 컨테이너에 반영되며 컨테이너의 변경 사항도 호스트에 영향을 미친다.

직접 접근하기 때문에 볼륨보다 빠르게 접근이 가능하지만, 컨테이너 종료 시 바인딩이 해제되어 컨테이너 내부의 변경 사항이 영구적으로 보존되지는 않는다.

📝 Docker Volume vs Bind mount

이 둘의 차이점은 다음과 같다

  • Docker volume으로 만들면 Docker가 관리하는 Directory내 생성된다.
  • Mount는 사용자의 소유자와 권한 때문에 실행/수정에 문제가 있을 수 있다.(보안에 취약)

따라서

Docker Volume을 사용하는 경우:

  • 데이터의 관리가 Docker에 의해 이루어져야 할 때.
  • 여러 컨테이너 간에 데이터를 공유하거나 전달해야 할 때.
  • 데이터를 볼륨으로 명시적으로 관리하고 백업해야 할 때.

Bind Mount를 사용하는 경우:

  • 호스트의 특정 경로를 직접 컨테이너와 연결하여 사용해야 할 때.
  • 개발 중에 코드 또는 설정 파일을 빠르게 수정하고 테스트해야 할 때.
  • 호스트 파일 시스템의 변경이 즉시 컨테이너에 반영되어야 할 때.

요즘은 Volume형식을 좀 더 선호하는 추세라고 한다~

👀 참고자료

profile
안녕하세요

0개의 댓글