DockerでオリジナルTensorFlowイメージを作る
最終更新日 2019/10/19
使用OS ver Ubuntu18.04
version Tensorflow 1.15.0 or 2.0.0、Docker19.03.03、OpenCV
GPU あり
Proxy あり、なし両方
はじめに
まずは下記を読んでおくこと
Tensorflowのコンテナで動作確認
イメージのDLとRUN
Docker コンテナの起動
1.xなら下記
$ docker run --gpus all -it --rm -v $(pwd)/work:/tf/work -p 8888:8888 tensorflow/tensorflow:1.15.0-gpu-py3-jupyter
2.xなら下記
$ docker run --gpus all -it --rm -v $(pwd)/work:/tf/work -p 8888:8888 tensorflow/tensorflow:2.0.0-gpu-py3-jupyter
(参考)引数の意味
--rm
終了時にコンテナ削除
-it
フォアグラウンド・モード。ターミナルでコンテナを実行することができる
-i : STDINをアタッチ。コンソールからの入力が指定したdockerコンテナ内に流れる。
-t : dockerコンテナに疑似ターミナル(tty)割当て。dockerコンテナ内のコンソールを表示する
exitでターミナル終了。コンテナも停止する。終了したくない場合は「CTRL + p + q」で抜ける
-p 8888:8888
コンテナのポートを8888でホスト側に公開する
-v $(pwd)/notebook:/tf/notebooks
現在のディレクトリ(testdir)とdocker内のworkdirを繋ぐ
下記のような表示がでるのでトークンのみコピー
Copy/paste this URL into your browser when you connect for the first time,
to login with a token:
jupyter notebookへアクセス
トークンを入れてログイン
tensorflow-tutorials/classification.ipynbを開いて実行してみよう
これはFashionMnistのノート。最後までRUNして結果が出せたら動作確認はOK
https://gyazo.com/d3cdc61e651acbf00e2b3f1df901ce23
Dockerfileでmodels、OpenCV対応のイメージを作る
元にするイメージを調査
試しにtensorflow:2.0.0-gpu-py3-jupyterを元にイメージを作ろう
イメージを作る前に色々調べる
bashでDocker コンテナの起動
$ docker run --gpus all -it --rm -v $(pwd)/work:/tf/work -p 8888:8888 tensorflow/tensorflow:2.0.0-gpu-py3-jupyter bash
OSを調べる
$ cat /etc/lsb-release
ubuntu18.04.3ベースであることがわかる
pythonのverを調べる
$ python --version
Python3.6.8ベースであることがわかる
aptで入っているものを調べる
$ dpkg -l
足りないものをDockerfileに書いていく
pipで入っているものを調べる
$ pip list
足りないものをDockerfileに書いていく
Dockerfileを作成
Dockerfileを新規作成
$ vim Dockerfile
調べた内容を考慮しつつ、Dockerfileを記述する(今回はmodelsも使えるように書いた)
Dockerfileは1.15.0、2.0.0ともにこちらで公開 イメージ作成
Dockerfileがあるディレクトリへ移動
$ cd ~/Dockerfiles/tensorflow-2.0.0-cv-models
Dockerfileからイメージをビルド
$ sudo docker build -t tf-2.0.0:gpu-py3-jupyter-models-cv-0.1 .
tf-2.0.0がimage名、gpu-py3-jupyter-models-cv-0.1がtag名になる
最後の"."はDockerfileがカレントディレクトリにあるという意味
build successfullyと出ればOK
確認
$ docker images
tf-2.0.0が出てきたらOK
homeに移動
$ cd ~
以下、参照
作成したイメージを起動
$ docker run --gpus all -it --rm -v $(pwd)/work:/tf/work -p 8888:8888 tf-2.0.0:gpu-py3-jupyter-models-cv-0.1
jupyter notebookへアクセス
あとはお好きに...
Tips:imageの消し方
全imageを調べる
$ docker image ls
こんな感じで出る
code:console
REPOSITORY TAG IMAGE ID CREATED SIZE
nvidia/cuda 9.0-runtime 741f48edc60d 4 weeks ago 902MB
nvidia/cuda 10.0-base-ubuntu18.04 a55b7fc6f6a0 5 weeks ago 135MB
hello-world latest fce289e99eb9 4 months ago 1.84kB
tensorflow/tensorflow 1.10.0-gpu-py3 0b4ceed1758b 9 months ago 3.08GB
imageを消す
コンテナが稼働していない場合
下記で消せる
$ docker image rm <IMAGE ID>
コンテナが稼働している
稼働しているコンテナのCONTAINER IDを調べる
$ docker ps -a
消したいImageがコンテナとして稼働していれば、コンテナを落とす
$ docker rm <CONTAINER ID>
image削除
$ docker image rm <IMAGE ID>