출처: https://www.infoq.com/jp/news/2022/02/docker-desktop-code-sharing
Docker Desktop은 로컬 파일 시스템의 일부를 컨테이너와 공유하기 위해 두 가지 메커니즘을 제공한다. 즉, 바인드 마운트와 명명된 볼륨이다. 또한 파일 시스템의 일부를 컨테이너 자체의 파일 시스템에 복사 할 수 있다.
각각의 접근법은 로컬 파일 시스템과 컨테이너(및 별개의 컨테이너간)에서 파일을 공유하는 것과 같은 목표를 완수하고 있다. 다만, 각각의 메카니즘에 장점과 단점의 밸런스가 있으며, 각각의 유스 케이스에 적합하다.
파일을 컨테이너에 복사하는 것에는 큰 단점이 있다. 컨테이너를 삭제하면 파일에 대한 변경을 포함하여 복사된 모든 데이터가 손실된다. 편집해야 할 코드를 공유하고 싶다면 이것은 확실히 바람직한 결과가 아니다.
다른 두 가지 옵션의 경우 바인드 마운트가 가장 유연한 솔루션이지만 성능은 공유 볼륨보다 열등하다.
가상화의 본질상, 호스트와 VM의 경계를 넘을 때 불가피한 작은 오버헤드가 항상 존재한다. 매우 작지만 거대한 소스 트리와 많은 읽기와 쓰기가 있는 개발 환경에서는 이것이 누적되어 성능에 눈에 띄는 영향을 줄 수 있다.
macOS와 Windows 시스템에서 Docker를 실행하는 경우에만 발생하는 문제입이다. Linux는 바인드 마운트된 파일 시스템에 직접 액세스할 수 있다.
이를 바탕으로 바인드 마운트 또는 공유 볼륨을 사용할 때를 이해하기 위한 몇 가지 기준을 제안한다.
바인드 마운트는 편집해야 할 코드를 공유하고 싶은 경우에 가장 좋은 방법이다. 그러나 많은 읽기/쓰기 작업을 수행해야 하는 대규모 리포지토리에서는 문제가 될 수 있다. 이 경우 Mutagen 이나 docker-sync 와 같은 타사 솔루션을 사용하여 미러링을 시도 할 수 있다.
한편, 바인드 마운트는 데이터베이스, 종속성 트리, 라이브러리, 캐시, 로그 파일 등에 적합하지 않다. 이 모든 경우 공유 볼륨을 사용하는 것이 좋다.
이 상황이 바뀔 수 있다. 호스트와 VM 사이에 파일을 공유하기 위해 특별히 설계된 Virtiofs 에 서이다. Virtiofs는 macOS의 Docker Desktop 미리보기 에서 이미 사용할 수 있다.
[Docker] Volume과 Bind mount에 대하여