2017-03-21 8 views
0

나는 재현 할 수있는 데이터 과학 작업에 관심이 많습니다. 이를 위해 Docker를 코드, 데이터 및 환경 설정을 번들로 묶을 수있는 플랫폼으로 탐구 중입니다. 첫 번째 간단한 시도는 필요한 데이터가 포함 된 Docker 이미지입니다 (link).도커를 사용하는 데이터 볼륨 이미지

그러나 첫 번째 단계는이 예에서 데이터가 이미지의 일부이므로 이미지가 컨테이너에로드 될 때 데이터가 이미있는 것입니다. 다음 목표는 분석 코드와 데이터를 분리하는 것입니다. 내가 이해하는 한, 이는 두 개의 컨테이너 (코드 : code)와 데이터 (data)가있는 컨테이너를 의미합니다. code를 들어

내가 사용 Dockerfile 간단한 :
FROM continuumio/miniconda3 
RUN conda install ipython 

data에 대한

:

data.csv 내가 이미지에 복사하고있어 데이터 파일입니다
FROM atlassian/ubuntu-minimal 
COPY data.csv /tmp 

.

나는 this 솔루션에 설명 된대로 실행할 수 있습니다이 두 이미지를 구축 한 후 : 네트워크를 시작한 후

docker run -i -t --name code --net=data-testing --net-alias=code drorata/minimal-python /bin/bash 
docker run -i -t --name data --net=data-testing --net-alias=data drorata/data-image /bin/bash 

: docker network create data-testing

내가 다른에서 하나 개의 컨테이너를 Ping 할 수 다음 단계 후, 그리고 아마도 에서 data.csv에 액세스하십시오. 그러나 나는 이것이 하위 최적의 해결책이며 좋은 연습으로 간주 될 수 없다는 느낌을 가지고 있습니다.

데이터에 액세스 할 수있는 컨테이너를 보유하는 것이 좋습니다. data volumes에 대해 조금 읽었지만 이미지를 활용하는 방법과 이미지로 변환하는 방법을 이해하지 못합니다.

답변

1

컨테이너를 데이터 저장소로 사용하는 것은 현재 시점에서 구형이며 비추천으로 간주됩니다. 대신 데이터 볼륨을 사용해야합니다.

데이터 볼륨은 이미지로 변환 할 수있는 것이 아닙니다. 정말로, 이것에 대한 필요가 없습니다.

.csv 파일을 누군가에게 전달하고 해당 파일을 도커 컨테이너에서 사용하게하려면 .csv 파일 만 제공하면됩니다.

파일을 컨테이너에 가져 와서 사용할 수있는 가장 쉬운 방법은 볼륨에 호스트를 마운트하는 것입니다.

docker run-v 플래그를 사용하면 로컬 폴더 나 파일을 도커 컨테이너에 장착하도록 지정할 수 있습니다.

예를 들어, 귀하의 도커 이미지가 /data/input.csv에 파일을 찾으려고한다고 가정 해보십시오. 당신이 docker run를 호출하고 자신의 input.csv 파일을 제공 할 때, 당신은

docker run -v /my/file/path/input.csv:/data/ my-image

난 당신이 보여주고있다이 예에서 모든 옵션을 제공하지 않는 것 같은 일을 할 것이지만, 나는 -v 플래그를 보여줍니다. 이것은 로컬 파일 시스템의 input.csv을 취하고 그것을 도커 컨테이너에 마운트 할 것입니다.이제 컨테이너에서 해당 데이터 사본을 사용할 수 있습니다.

+0

그리고'Dockerfile'을 사용하여'code' 이미지에 CSV를 복사하는 것은 어떻습니까? 나는 연구 공유를 단순화하기 위해 노력하고 있으며, 결국 당신은 코드와 데이터를 제공해야합니다. 하나의 흥미로운 접근법은 서로 다른 두 개의 이미지와이를 독립적으로 제공하는 것입니다. 처음 배포하려면 – Dror

+0

을 입력하고 파일을 이미지에 복사하십시오. 데이터 세트의 업데이트와 배포를 위해 내 대답이 오는 곳입니다. 데이터를 위해 두 번째 이미지를 배포 할 필요가 없습니다. 그들에게 데이터를 제공하자. 제안 된대로 –

+0

컨테이너가 실행되면 호출되는 시작 훅을 사용할 수 있습니까? 이 후크는 저장소에서 데이터를 가져와야합니다. – Dror