'--v' 옵션을 사용하는 기본적인 세 가지 방식.
- docker run -v /app/data ... -> Anonymous Volume
- docker run -v data:/app/data -> Named Volume
- docker run -v /path/to/code:/app/code -> Bind Mount
이 3가지 방식은 Container의 내부 Data를 관리하기 위한 주요한 방식이다.
만약, Container 실행 시, '--rm' 을 사용했다면 Container 중지시에 익명 볼륨 역시 사라짐
-> Container 중지하는 것은, 기본적으로 Container를 제거하는 것을 의미하기 때문이다.
그래서 Container가 제거될 때 Anonymous Volume 또한 제거되므로 Anonymous Volume을 사용하여 Container간 Data를 공유할 수 없다.
컨테이너의 파괴, 재생성에 걸쳐 데이터를 저장하는데 Anonymous Volume을 사용할 수 없다.
But, Dockerfile의 VOLUME 명령으로 생성되거나 TERMINAL에서의 '-v'로 생성된 익명 볼륨은 Container에 이미 존재하는 특정 데이터를 잠그는데 유용, 이러한 Data가 다른 모듈에 의해 overwrite 방지에 유용하다.
Anonymous Volume은 시간 절약의 장점이 있고, 여전히 호스트 머신에 폴더를 생성한다. (단, Container 제거시, 그 폴더도 제거)
-> 이는 Docker가 Container 내부에 모든 Data를 저장할 필요가 없으며 Docker가 이 Container read-write layer 내부의
모든 Data를 관리할 필요는 없다는 것을 의미. 하지만 특정 데이터를 호스트 머신 파일 시스템에 아웃소싱할 수 있다. 👉 이는 성능과 효율성에도 도움이 된다.
Named Volume은 Dockerfile에서 생성할 수 없다. 컨테이너를 실행할 때 '-v' 명령으로 생성!
콜론(:) 앞에 이름을 지정
가장 큰 장점은 일반적으로 생성된다는 것 - (특정 컨테이너에 연결되어 있지 않아서 컨테이너를 종료하고, 제거하더라도 살아남아있다.
제거를 하려면 할 수는 있지만 Docker CLI에 분리된 내장 명령으로 해야만 한다.
Named Volume은 Container를 제거해도 살아남으므로, 다수의 다양한 Container에 동일하게 Named Volume 하나를 Mount 할 수 있고 그를 사용하여 여러 컨테이너 간에 데이터를 공유할 수 있다.
또한 Container 종료 및 제거 전반에 걸쳐 데이터를 저장하는데 사용할 수도 있다.
Bind Mount는 다른 용도로 사용되는데 우리는 호스트 머신에 Data가 저장되는 위치를 알고 있다.
Bind Mount 또한 하나의 특정 Container에 국한되지 않습니다. 다수의 Container에 연결할 수 있으며 Container 종료 및 제거 후에도 유지가 된다.
만약 Bind Mount의 Data를 지우려면 실제의 호스트 머신에서 삭제해야 한다. (Docker 명령으로는 삭제할 수 없다)
Container간 공유 가능하고, Restart를 거쳐 동일한 Container 중 하나에서 재사용할 수도 있다.