- 바인드 마운트와 볼륨을 효율적으로 활용하려면 각 요소의 핵심 사용 시나리오와 한계점을 이해해야 한다.
컨테이너의 마운트 대상 디렉터리가 이미 존재하고 이미지 레이어에 이 디렉터리의 파일이 포함돼 있다면
- 이미 존재하는 대상 디렉터리에 마운트하면 마운트의 원본 디렉터리가 기존 디렉터리를 완전히 대체한다.
- 이미지에 포함돼 있던 원래 파일은 사용할 수 없게 된다.
001) ➜ source="$(pwd)/new" && target='/init'
002) ➜ echo $source
003) /Users/woogie/Desktop/real/080258/ch06/exercises/bind-mount/new
004) ➜
005) ➜ docker container run diamol/ch06-bind-mount
006) abc.txt
007) def.txt
008) ➜
009) ➜ docker container run --mount type=bind,source=$source,target=$target diamol/ch06-bind-mount
010) 123.txt
011) 456.txt
- 005~007: 컨테이너를 실행하면 /init 디렉터리의 파일 목록을 출력한다.
- 009~011: /init를 대상으로 바인드 마운트를 마운트해 컨테이너를 실행하면 원래 디렉터리의 내용은 숨겨지고 바인드 마운트의 원본 디렉터리가 이를 대체한다.
호스트 컴퓨터의 파일 하나를 컨테이너에 이미 존재하는 디렉터리로 마운트
- 디렉터리의 파일이 합쳐져 이미지에서 온 파일과 호스트에서 마운트된 파일이 모두 나타난다.
- 단, 윈도 컨테이너는 이 기능을 제공하지 않아 동작이 달라진다.
- 컨테이너 파일 시스템은 윈도 컨테이너와 리눅스 컨테이너의 동작이 일치하지 않는 몇 안 되는 영역 중 하나다.
분산 파일 시스템을 컨테이너에 바인드 마운트
- 분산 파일 시스템을 사용하면 네트워크상의 모든 컴퓨터에서 데이터에 접근할 수 있지만 로컬 컴퓨터 운영체제의 파일 시스템과 다른 경우가 많다.
- 이러한 분산 파일 스토리지를 컨테이너에 마운트하면 일반적인 파일 시스템의 일부처럼 보이기는 하겠지만 지원하지 않는 동작이 있을 수 있다.
예시 * 애저 파일스 서비스의 스토리지를 컨테이너 스토리지로 사용해 Postgres 데이터베이스를 실행한 경우 * 애저 파일스는 읽기 및 쓰기 기능은 똑같이 제공하지만 파일 링크 생성 기능은 지원하지 않기 때문에 애플리케이션이 오류를 일으킬 수 있다.