2017-03-21 2 views
0

私は再現可能なデータサイエンスワークに非常に興味があります。そのために、コード、データ、環境の設定を束ねるプラットフォームとしてDockerを探求しています。私の最初の簡単な試みは、必要なデータを含むDocker画像です(link)。ドッカーを使用したデータボリュームの画像

ただし、これは最初の手順にすぎません。この例では、データはイメージの一部であるため、イメージがコンテナに読み込まれると、データは既にそこにあります。私の次の目的は、分析コードとデータを切り離すことです。私が理解する限り、それはコード(code)とデータ(data)の2つのコンテナを持つことを意味します。

FROM continuumio/miniconda3 
RUN conda install ipython 

data用:

data.csvは、私がイメージにコピーしていたデータファイルである
FROM atlassian/ubuntu-minimal 
COPY data.csv /tmp 

私はシンプルDockerfileを使用codeするため

。私は他の一つの容器にpingを実行することができますこれらのステップの後docker network create data-testing

、おそらく:ネットワークを開始した後

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 

thisソリューションで説明したように、私はそれらを実行することができ、これらの2枚の画像を構築した後

data.csvcodeからアクセスしてください。しかし、私はこれが最適な解決策ではないと感じており、良い練習とはみなされません。

データにアクセスできるコンテナを使用するとよい方法は何でしょうか?私は少しだけ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をコピーするのはどうですか?私は研究の共有を簡素化しようとしており、その目的のためにコードとデータを提供する必要があります。 1つの興味深いアプローチは、2つの異なるイメージと、これを独立して提供することです。初期配信の場合は – Dror

+0

、ファイルを画像にコピーしてください。私の答えがどこに来るのかは、データセットの更新と配布のために、データのために第2のイメージを配布する必要はありません。彼らにデータを与えてください。 –

+0

コンテナの実行後に呼び出される起動フックはいくつかありますか?このフックは、リポジトリからデータをプルする必要があります。 – Dror

関連する問題