인프라/docker
[docker/도커] volumes 와 Bind Mounts (볼륨 및 바인드 마운트)
첸첸
2023. 6. 5. 14:33
728x90
1. 익명볼륨 (Anonymous Volume)
- 도커 시스템에 의해 관리됨
- --rm으로 시작 된 컨테이너가 중지 될 때 제거된다.
- 컨테이너간에 공유 할 수 없다
- 컨테이너에 이미 존재하는 특정 데이터를 잠그는데 유용 -> 데이터가 다른 모듈에 의해 덮어쓰여지는 것을 방지하는데 유용
- 외부 경로보다 컨테이너 내부 경로의 우선순위를 높이는데 사용된다.
-v /app/data
2. 명명된 볼륨 (Named Volume)
- 컨테이너를 종료하고 삭제해도 유지된다.
- 다수의 다양한 컨테이너에서 동일하게 명명된 볼륨 하나를 마운트 할 수 있다 -> 컨테이너간 데이터 공유가 가능하다
docker volume create my_volume
docker run -d -v my_volume:/app/data my_image
* 볼륨 리스트 확인
docker voluems list
3. 바인드 마운트 (Bind Mount)
- 호스트 머신의 파일 시스템에 존재하며, 특정한 컨테이너에 국한되지 않는다.
- 컨테이너를 종료하고 삭제해도 유지된다.
- 다수의 다양한 컨테이너에서 동일하게 명명된 볼륨 하나를 마운트 할 수 있다 -> 컨테이너간 데이터 공유가 가능하다
- 도커 명령어로는 삭제 할 수 없으며, 프로젝트 내의 모든 로컬 데이터를 삭제해야만 컨테이너의 모든 데이터를 제거 할 수 있다.
-v /path/test/code:/app/data/code
⚠️ volume과 bind mount의 기본 값은 read-write이다.
그러나, 우리가 파일을 변경 할 수 있는 곳은 호스트 머신 파일 시스템이지 컨테이너 내부가 아니다. 컨테이너 내부에서는 파일을 변경해서는 안되기 때문에, 볼륨 및 바운드마운트를 읽기전용으로 변경하는 것이 좋다.
내부 경로 뒤에 :ro 를 추가하여 제한 할 수 있다.
-v /path/test/code:/app/data/code:ro
🚀 결론: 언제 사용해야 할까?
- 바인드 마운트 → 호스트의 특정 파일/폴더를 컨테이너에서 그대로 사용해야 할 때
📌 (예: 개발 환경, 설정 파일, 로그 파일 공유) - 볼륨 → 컨테이너 간 데이터 공유, 장기적인 데이터 보관이 필요할 때
📌 (예: 데이터베이스 스토리지, 영구적인 데이터 저장)
👉 일반적으로 애플리케이션 데이터를 저장할 때는 "볼륨"을, 개발 환경에서는 "바인드 마운트"를 사용!