2016-09-15 4 views
7

대용량 파일 (게놈 데이터가 포함되어 크기가 ~ 10GB에 이른다)을 사용하는 Docker 이미지 (결과적으로 해당 이미지의 컨테이너)를 만들어야합니다.Docker 컨테이너의 거대한 파일

어떻게 사용량을 최적화해야합니까? 용기에 넣어야합니까 (예 : COPY large_folder large_folder_in_container)? 이러한 파일을 참조하는 더 좋은 방법이 있습니까? 중요한 점은 내 개인 저장소에서 그러한 컨테이너 (10GB 이상)를 밀어내는 것이 이상하게 들린다는 것입니다. 모든 GB를 함께 포장하지 않고도 일종의 볼륨을 컨테이너에 부착 할 수있는 방법이 있는지 궁금합니다.

감사합니다.

답변

5

용기에 넣어야합니까 (COPY large_folder large_folder_in_container)?

그렇게 할 경우, 즉 이미지에 포함 할 아닌 컨테이너 : 그 이미지, 여전히 10기가바이트 것 사용되는 실제 디스크 공간에서 20 개 컨테이너를 시작할 수 있습니다.

첫 번째 이미지에서 다른 이미지를 만들면 레이어 된 파일 시스템이 상위 이미지의 레이어를 다시 사용하고 새로운 이미지는 여전히 "유일한"10GB가됩니다.

+0

확실히 유용합니다. 하지만 레지스트리에있는 이미지를 팝업 (컨테이너를 실행) 할 때 시스템의 snappiness가 걱정됩니다. 이것을 (배치 단계에서) Packer를 통해 새로운 OpenStack 인스턴스에 컨테이너를로드해야하는 CI/CD 파이프 라인에 맞추려고합니다. 그러한 인스턴스는 항상 다르기 때문에 새로 생성 된 OpenStack 인스턴스에 거대한 컨테이너를로드하기 위해 CD 파이프 라인을 통과 할 때마다 매번 커밋 할 때마다 10GB를 이동해야 할 때가 있습니다. 이 솔루션이 가장 적합한 솔루션입니까? – Eleanore

+0

@Eleanore 이미지가 슬레이브의 로컬 도커 레지스트리에로드되면 컨테이너가 즉시 시작됩니다. 그러나 이미지가 변경되면 이전 이미지를 기반으로 새 이미지를 점진적으로 작성하고 변경 사항 만 포함하는 것이 가장 좋습니다. 즉, * 모든 * 10GB가 한 이미지에서 다음 이미지로 바뀌면 ... 실제로 문제가있는 것입니다. – VonC

4

이러한 파일을 더 잘 참조 할 수 있습니까?

데이터를 배포 할 방법이 이미있는 경우 "바인드 마운트"를 사용하여 볼륨을 컨테이너에 첨부하십시오.

docker run -v /path/to/data/on/host:/path/to/data/in/container <image> ... 

그런 식으로 이미지를 변경할 수 있으므로 매번 큰 데이터 세트를 다시 다운로드 할 필요가 없습니다.

FROM scratch 
COPY dataset /dataset 
VOLUME /dataset 

에서 : 당신이 큰 데이터 세트를 배포하기 위해 레지스트리를 사용하지만, 별도로 데이터 세트에 대한 변경 사항을 관리 할 싶었다면

, 당신은이 같은 Dockerfile와 데이터 볼륨 컨테이너를 사용할 수 있습니다 응용 프로그램 컨테이너가 사용하는 볼륨 첨부 할 수 있습니다

docker run -d --name dataset <data volume image name> 
docker run --volumes-from dataset <image> ... 

어느 쪽이든을, 나는 https://docs.docker.com/engine/tutorials/dockervolumes/ 당신이 원하는 생각합니다.

관련 문제