質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

538閲覧

Dockerを使ってPythonで機械学習を行うための環境構築を行いたい

complexfield

総合スコア19

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/02/28 12:28

前提・実現したいこと

Pythonで機械学習の環境を整えるために、Dockerを利用したいと考えています。
使いたいのは
vim
tmux
pip
python
numpy
pandas
keras
tensorflow
mecab
juman
cabocha
KNP
です。
実現したいことは
①数行程度のコマンドで作った環境を破棄して、クリーンな環境に戻せるようなContainerやVolumeを作りたい。また、macOSをクリーンインストールした場合でも簡単に元の開発環境を戻せるようにしたい。
②ホスト元のOS(Mojave)からPythonのコードを編集して、それを手軽に実行できるようにしたい。
③普段使っている.vimrcや.tmux.confを使いたい。

調べたこと

そのような条件を満たすものを調べたところ、ホストマシン上にデータを管理してコンテナにマウントする方法として、
volume
bind mount,
tmpfs
の3つがあることがわかりましたが、どれを使えばいいか分かりません。3つのうち、どれを使えばいいのか、どのようなコマンドを使えばいいのか、Dockerfileに何を書けばいいのかを教えて頂けませんでしょうか。

補足

普段使っているホストOS上のドットファイルを読み込んで編集することを考えていますが、vimやtmuxのドットファイルをDocker HUBにpushしてから、別の環境でpullしてコンテナ内でファイルを読み込んだ方が良いでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiitoi

2019/02/28 12:31

ホストOSのデータ領域をコンテナ側から参照するのにどれを使えばいいかという質問ですか?
complexfield

2019/02/28 12:38

表現が拙くて申し訳ありません。その質問で合ってます。 チュートリアルを見ながらコンテナを作ってみたのですが、docker runしたあとvimで編集してみると.vimrcを読み込んでないようでシンタックスハイライトが付いていませんでした。普段使っている.vimrcを読む込むにはどうすればいいのかという意図です。 それと、コンテナ内のPythonファイルを編集して再度実行したところ、同じエラーが出続けたので、その場合はコンテナを毎回破棄しないといけないのかというのも知りたいです。
tiitoi

2019/02/28 12:49 編集

Docker コンテナで使う予定の OS や Python の実行環境はなんでしょうか? > 同じエラーが出続けたので、 どのようなエラーでしょうか?
complexfield

2019/02/28 12:58

docker pull python でpullしたOSを最初は使ってましたが、特には決めてません。機械学習初心者が手を動かすのに使い勝手の良い親ImageやOSがあればご教授いただけるとありがたいです。 エラーについて 公式チュートリアルの日本語版(http://docs.docker.jp/get-started/part2.html)のpart2で出てくるapp.pyというコードを実行したところ、 # Redis に接続 の部分でエラーになりました。エンコーディングの問題だったのでその行のコメントを消しても同じエラーを吐き続けたので、コンテナを破棄して、app.pyの一番上に # coding: UTF-8 を入れてコンテナを起動して、コンテナ内で python app.py したところ、問題なく動くようになりました。
guest

回答1

0

ベストアンサー

機械学習初心者が手を動かすのに使い勝手の良い親ImageやOSがあれば

OS は Utubntu 16.04 が広く使われており、おすすめです。
Utubntu 18.04 もありますが、ソフトの対応状況や情報量といった観点で現時点では 16.04 がよいと思います。

Image は、Jupyter Notebook を使う場合は公式が出してる以下のノートブックはどうでしょうか。

datascience-notebook
Dockerで基本的なData Science環境(Jupyter, Python, R, Julia, 定番ライブラリ)を構築する。

そうでない場合は ubuntu:16.04 をベース Image に使って、自分で Dockerfile を作るといいと思います。

簡単に元の開発環境を戻せるようにしたい。

これが目標であれば、入れたいライブラリがすべて入っている既存のイメージはないと思うので、Dockerfile を作ることは必須でしょう。

ホスト元のOS(Mojave)からPythonのコードを編集して、それを手軽に実行できるようにしたい。

コンテナを起動するときに -v オプションを付けて、ホストOSのデータ領域を参照するようにできます。
Python のスクリプトは共有しているディレクトリに置いておけばよいのではないでしょうか。

Docker の Data Volume まわりを整理する

普段使っている.vimrcや.tmux.confを使いたい。

ホスト側と設定ファイルを共有するという使い方は基本的にしないと思います。
docker build 時にコンテナに必要な設定ファイル等はコピーするようにしてみてはどうでしょうか。(COPY コマンド)


追記

2点間違いがあります。

1 複数コマンドを1回の入力で実行するには、&& でつなげる。

シェルコマンド1行で複数コマンドや条件に応じた実行をする

Docker は関係なく、bash の話です。

2 apt-get install した際、-y オプションを付ける。
-y オプションを付けないとインストールしますかと対話してきますが、インタラクティブシェルじゃないので、応答できず失敗します。

apt-get コマンド

Dockerfile

1FROM python:3 2 3WORKDIR /usr/src/app 4 5COPY requirements.txt ./ 6RUN pip install --no-cache-dir -r requirements.txt && \ 7 apt-get update && \ 8 apt-get install -y vim 9

bash

1$ docker build --tag test . 2$ docker run -it --name hoge test /bin/bash 3# python 4>>> import numpy 5>>> print(numpy.__version__) 61.16.2

投稿2019/02/28 14:13

編集2019/03/01 15:29
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

complexfield

2019/02/28 15:49

>そうでない場合は ubuntu:16.04 をベース Image に使って、自分で Dockerfile を作るといいと思います。 ubuntu:16.04をベースimageにして自分でDockerfileを作ってみたのですが、pipのインストールができません。 https://hub.docker.com/_/python/ のDockerfileの書き方を真似て、自分でDockerファイルを書いてみました。以下、Dockerfile。 ---------------- FROM ubuntu:16.04 WORKDIR /usr/src/app COPY requirements.txt ./ CMD ["curl" "https://bootstrap.pypa.io/get-pip.py" "-o" "get-pip.py"] RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD [ "python", "./your-daemon-or-script.py" ] -------------------------- コマンドとエラーメッセージは以下のようになりました。 $docker build ./ -t first Sending build context to Docker daemon 19.46kB Step 1/7 : FROM ubuntu:16.04 ---> 7e87e2b3bf7a Step 2/7 : WORKDIR /usr/src/app ---> Using cache ---> 9fd849fb142a Step 3/7 : COPY requirements.txt ./ ---> Using cache ---> e30be817f895 Step 4/7 : CMD ["curl" "https://bootstrap.pypa.io/get-pip.py" "-o" "get-pip.py"] ---> Running in b1ef3518c5b4 Removing intermediate container b1ef3518c5b4 ---> 0e0289970a1a Step 5/7 : RUN pip install --no-cache-dir -r requirements.txt ---> Running in 549a8650f0c9 /bin/sh: 1: pip: not found The command '/bin/sh -c pip install --no-cache-dir -r requirements.txt' returned a non-zero code: 127
complexfield

2019/02/28 15:50

カレントディレクトリの中身は .tmux.conf .vimrc Dockerfile requirements.txt です。
tiitoi

2019/02/28 16:03

CMD コマンドはコンテナ起動時に実行するコマンドを記述する命令なので使い方が間違っているのでないでしょうか。 http://docs.docker.jp/engine/reference/builder.html#cmd ビルド時に実行する命令はすべて RUN <コマンド> です。
tiitoi

2019/02/28 16:06

ちなみに ubuntu:16.04 は必要最低限のミニマムなイメージなので、vim、python 等一切入っていないため、build 時にインストールしてあげる必要があります。自分は必要なアプリケーションは明示的に自分で入れたいのでベースイメージを ubuntu:16.04 にしてますが、python:3 をベースイメージにしてもいいかもしれませんね。 python:3 は pip が最初から入っているので、requirements.txt でそのままインストールできると思います。
tiitoi

2019/02/28 16:08 編集

Dockerfile を作るときのコツとしてはベースイメージのコンテナを立ち上げ、 docker run --rm --name hoge -it python:3 /bin/bash 必要なものをインストールしながら、コマンドをメモしていきます。 自分の望む環境ができたら、それを Dockerfile に転記します。 一々、Dockerfile 編集→build を繰り返すのも面倒なので。
complexfield

2019/03/01 15:10

Dockerファイルを以下のように書き直したところ FROM python:3 WORKDIR /usr/src/app COPY requirements.txt ./ RUN pip install --no-cache-dir -r requirements.txt \ apt-get update \ apt-get install vim COPY . . CMD [ "python", "./your-daemon-or-script.py" ] 次のようなエラーが出ました。 Collecting apt-get Could not find a version that satisfies the requirement apt-get (from versions: ) No matching distribution found for apt-get The command '/bin/sh -c pip install --no-cache-dir -r requirements.txt apt-get update apt-get install vim' returned a non-zero code:
complexfield

2019/03/01 15:11

コンテナの中に入って apt-get update apt-get install vim とコマンドを打ったところ、問題なくインストールできたのですが、何が原因でしょうか。
complexfield

2019/03/01 15:28

すみません。 RUN コマンド &&\ のように、&&を入れたらエラーになりませんでした。
tiitoi

2019/03/01 15:29

追記の Dockerfile で動作確認しました。 && の件と apt-get は -y オプションを付ける必要があります。
complexfield

2019/03/01 15:41

Dockerfileを FROM python:3 WORKDIR /usr/src/app COPY requirements.txt ./ RUN pip install --no-cache-dir -r requirements.txt && \ apt-get update && \ apt-get install -y vim COPY . . CMD [ "python", "./your-daemon-or-script.py" ] にしたところ、無事にbuildすることができました。ありがとうございます!
complexfield

2019/03/01 15:42

ちなみに、requirements.txtは以下のようになりました。 absl-py==0.7.0 appnope==0.1.0 astor==0.7.1 attrs==18.2.0 backcall==0.1.0 bleach==3.1.0 Click==7.0 cycler==0.10.0 decorator==4.3.2 defusedxml==0.5.0 entrypoints==0.3 Flask==1.0.2 gast==0.2.2 grpcio==1.18.0 h5py==2.9.0 ipykernel==5.1.0 ipython==7.3.0 ipython-genutils==0.2.0 ipywidgets==7.4.2 itsdangerous==1.1.0 jedi==0.13.2 Jinja2==2.10 jsonschema==3.0.0 jupyter==1.0.0 jupyter-client==5.2.4 jupyter-console==6.0.0 jupyter-core==4.4.0 Keras==2.2.4 Keras-Applications==1.0.7 Keras-Preprocessing==1.0.9 kiwisolver==1.0.1 Markdown==3.0.1 MarkupSafe==1.1.0 matplotlib==3.0.2 mistune==0.8.4 nbconvert==5.4.1 nbformat==4.4.0 notebook==5.7.4 numpy==1.16.1 pandas==0.24.1 pandocfilters==1.4.2 parso==0.3.4 pexpect==4.6.0 pickleshare==0.7.5 prometheus-client==0.6.0 prompt-toolkit==2.0.9 protobuf==3.6.1 ptyprocess==0.6.0 Pygments==2.3.1 pyparsing==2.3.1 pyrsistent==0.14.11 python-dateutil==2.8.0 pytz==2018.9 PyYAML==3.13 pyzmq==18.0.0 qtconsole==4.4.3 redis==3.2.0 scikit-learn==0.20.2 scipy==1.2.1 Send2Trash==1.5.0 six==1.12.0 termcolor==1.1.0 terminado==0.8.1 testpath==0.4.2 Theano==1.0.4 tornado==5.1.1 traitlets==4.3.2 wcwidth==0.1.7 webencodings==0.5.1 Werkzeug==0.14.1 widgetsnbextension==3.4.2 tensorboard==1.13.0 tensorflow==1.13.1 tensorflow-estimator==1.13.0
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問