1. 바인드 마운트 (Bind Mount)
바인드 마운트는 호스트 시스템의 특정 파일이나 디렉토리를 컨테이너에 연결하는 방식입니다. 바인드 마운트를 사용하면 호스트 시스템의 파일 시스템에 의존하게 됩니다.
특징:
- 호스트 시스템과의 직접적인 연결: 바인드 마운트는 호스트 시스템의 디렉토리나 파일을 컨테이너에 직접 연결합니다.
- 호스트 파일 시스템 의존: 바인드 마운트는 호스트의 파일 시스템에 의존하기 때문에, 호스트 시스템에서 변경된 내용이 컨테이너에 실시간으로 반영됩니다.
- 사용 예:
- 호스트 시스템의 개발 환경 파일을 컨테이너에서 사용하거나, 컨테이너 내에서 생성된 로그 파일을 호스트에서 직접 관리하려는 경우 유용합니다.
- 예시:
위 명령에서docker run -v /host/directory:/container/directory myimage
/host/directory
는 호스트 시스템의 디렉토리이고,/container/directory
는 컨테이너 내에서 바인드 마운트된 위치입니다.
장점:
- 실시간 파일 시스템 연동: 파일이나 디렉토리가 호스트와 연결되어 있기 때문에, 호스트에서 파일을 수정하면 컨테이너에서도 즉시 반영됩니다.
- 간단한 설정: 바인드 마운트는 간단히 호스트 시스템의 경로를 지정하는 방식으로 설정됩니다.
단점:
- 호스트 시스템에 의존적: 바인드 마운트는 호스트 시스템에 의존하므로, 컨테이너의 이동성(portability)에 제한이 있을 수 있습니다.
- 호스트 시스템 변경 시 영향을 받음: 호스트 시스템에서 변경된 내용이 의도치 않게 컨테이너에 영향을 미칠 수 있습니다.
2. 볼륨 (Volumes)
볼륨은 Docker가 관리하는 독립적인 데이터 저장소입니다. 볼륨은 Docker의 파일 시스템 외부에 저장되어 있으며, 호스트 시스템의 파일 시스템에 의존하지 않습니다.
특징:
- Docker 관리: 볼륨은 Docker가 관리하며, 호스트 시스템의 파일 시스템에 의존하지 않습니다. 볼륨은
/var/lib/docker/volumes/
디렉토리에 저장되지만, 직접적으로 호스트의 경로와 연결되지 않습니다. - 데이터의 독립성: 컨테이너가 삭제되어도 볼륨에 저장된 데이터는 영구적으로 유지됩니다.
- 사용 예:
- 컨테이너 간에 데이터를 공유하거나, 컨테이너가 삭제되고 재생성되더라도 데이터를 보존하고 싶을 때 유용합니다.
- 예시:
여기서docker run -v myvolume:/container/directory myimage
myvolume
은 Docker가 관리하는 볼륨의 이름입니다.
장점:
- 호스트 시스템 독립성: 볼륨은 호스트 시스템의 파일 시스템과 독립적이므로, 컨테이너의 이동성(portability)에 유리합니다.
- 데이터 영속성: 컨테이너가 종료되거나 삭제되어도 데이터는 볼륨에 남아 있기 때문에 영구적으로 데이터를 저장할 수 있습니다.
- 컨테이너 간 데이터 공유: 여러 컨테이너가 동일한 볼륨을 마운트하여 데이터를 공유할 수 있습니다.
단점:
- 호스트와의 연동 어려움: 바인드 마운트와 달리 호스트 시스템의 파일 시스템과 직접 연결되지 않으므로, 호스트에서 직접 파일을 수정하기 어렵습니다.
바인드 마운트 vs 볼륨
바인드 마운트 | 볼륨 | |
---|---|---|
의존성 | 호스트 시스템의 파일 시스템에 의존 | Docker가 관리하며 호스트 시스템과 독립 |
장점 | 호스트와의 직접적인 연동, 실시간 파일 변경 반영 | 데이터 영속성, 호스트 시스템 독립성, 컨테이너 간 데이터 공유 |
단점 | 호스트 시스템에 의존, 이동성 제한 | 호스트 시스템에서 파일 수정 불가능 |
사용 사례 | 개발 환경, 실시간 파일 변경 필요 | 데이터 영속성, 여러 컨테이너 간 데이터 공유, 호스트 시스템과 독립적인 데이터 관리 |
결론
- 바인드 마운트는 호스트 시스템의 파일 시스템에 의존하며, 실시간 파일 공유가 필요하거나 개발 환경에서 유용합니다.
- 볼륨은 독립적인 데이터 저장소로, Docker가 관리하며 데이터 영속성과 이동성을 제공합니다. 여러 컨테이너 간에 데이터를 공유하거나, 컨테이너가 삭제되더라도 데이터를 유지하려는 경우에 적합합니다.
따라서, 호스트 시스템에 의존하지 않으려면 볼륨을 사용하는 것이 더 적합합니다.
'Docker' 카테고리의 다른 글
Docker Compose 구성요소 (1) | 2024.12.15 |
---|---|
멀티스테이지 빌드(Multi-Stage Build) (0) | 2024.12.10 |
도커 인 액션 8장 (2) | 2024.12.06 |
도커 인 액션 7장 (0) | 2024.12.06 |
Dockerfile 명령어 (0) | 2024.12.06 |