도커에서 볼륨 마운트는 호스트와 컨테이너 간의 특정 디렉토리를 공유하거나 컨테이너 간에 데이터를 보존하고 공유하기 위한 방법 중 하나입니다. 볼륨 마운트는 컨테이너의 파일 시스템과 호스트 시스템의 파일 시스템을 연결하여 데이터를 외부에 보존할 수 있도록 도와줍니다. 이를 통해 컨테이너가 삭제되거나 재시작되더라도 데이터가 영구적으로 보존되며, 여러 컨테이너에서 동일한 데이터를 공유할 수 있습니다.
Bind Mount: Bind mount는 호스트 시스템의 기존 디렉토리를 컨테이너에 연결하는 방법입니다. 컨테이너에서 해당 경로에 작성된 데이터는 호스트의 파일 시스템에 실시간으로 반영됩니다.
코드 예시:
docker run -d --name my-container -v /host/path:/container/path my-image
여기서 -v /host/path:/container/path
는 호스트의 /host/path
를 컨테이너 내의 /container/path
에 바인드 마운트합니다.
Volume: Volume은 도커가 관리하는 파일 시스템 내에 별도의 공간을 할당하여 사용하는 방법입니다. 볼륨은 호스트의 파일 시스템과 독립적으로 동작하고, 컨테이너와 별도로 관리됩니다. 도커 볼륨은 컨테이너를 삭제하더라도 데이터가 보존되며 다른 컨테이너에서도 사용 가능합니다.
코드 예시:
docker volume create my-volume
docker run -d --name my-container --mount source=my-volume,target=/container/path my-image
여기서 docker volume create my-volume
명령으로 볼륨을 생성한 뒤, --mount source=my-volume,target=/container/path
로 생성된 볼륨을 컨테이너에 마운트합니다.
도커 볼륨 마운트는 데이터를 영구적으로 보존하고 여러 컨테이너와 공유할 수 있는 방법을 제공하며, 컨테이너 서비스에 대한 데이터 일관성과 안정성을 높이는 기능입니다. 데이터의 중요성을 고려한 적절한 볼륨 마운트 방식을 선택하고 사용하면 분산 시스템 환경에서 효과적으로 데이터를 관리할 수 있습니다.
도커에서 -v
옵션은 호스트와 컨테이너 간의 공유된 디렉터리나 파일을 지정할 수 있게 해주는 옵션입니다. 이 옵션을 사용하면 호스트의 폴더들을 컨테이너 안에서 마치 컨테이너 안에서 파일이 생성된 것처럼 접근이 가능합니다.
docker run -d --name my-container -v /host/path:/container/path my-image
이 예시에서, 호스트의 /host/path
를 컨테이너 내의 /container/path
에 바인드 마운트합니다.docker run -d --name my-container -v /host/path:/container/path:ro my-image
:ro
플래그를 사용하여 컨테이너에서 읽기 전용으로 설정합니다. 이 설정은 컨테이너 내에서 파일 쓰기 작업이 제한됩니다.단순한 볼륨 마운트:
docker run -d --name my-container -v my-volume:/container/path my-image
이 예시에서는 my-volume
이라는 볼륨을 컨테이너 내의 /container/path
에 마운트합니다.
읽기 전용 볼륨 마운트:
docker run -d --name my-container -v my-volume:/container/path:ro my-image
:ro
플래그를 사용하여 컨테이너에서 읽기 전용으로 설정합니다.
-v
옵션을 사용할 때 :ro
플래그가 붙지 않으면 기본적으로 읽기-쓰기 모드로 설정됩니다.-v
옵션과 --mount
옵션 차이 : 추가적으로, --mount
옵션을 사용하면 -v
옵션보다 더 많은 옵션들을 사용할 수 있지만, 일부 사용하기 쉽지 않습니다. -v
옵션은 간단한 바인드 마운트와 볼륨 마운트 정보를 모두 함께 사용할 수 있습니다.docker-compose.yml
파일에서 volumes
키를 사용하여 -v
옵션을 설정할 수 있습니다. 예를 들어:services:
web:
volumes:
- /host/path:/container/path
- my-volume:/data
volumes:
my-volume:
이 예에서는 web
서비스가 /host/path
와 /container/path
사이에 바인드 마운트됩니다. my-volume
은 container /data
에서 사용됩니다.