自分用のPython環境メモです
- Windows 10 pro
- Hyper-V
- ubuntu 19
- Docker
- jupyter
Windows上で共有ディレクトリ作成
Hyper-vの有効化
Hyper-vでubuntu19立ち上げ
接続確認用
apt install curl
このままではsshで入れないので
apt install openssh-server
ubuntu上でwindowsの共有ディレクトリをマウント
sambaでwindowsのファイルシステム読み書き用
apt install cifs-utils
mkdir /home/username/share/
mount -t cifs -o "username=username,vers=2.0" //host-ip/share /home/username/share/
Docker入れる
apt install docker.io
jupyterイメージ入れる
docker pull jupyter/datascience-notebook
コンテナ立ち上げ
docker run -d -it
--name jupyter
-p 8888:8888
-v /home/share:/opt/notebooks
jupyter/datascience-notebook
/bin/bash
コンテナに入ってjupyter起動
docker attach jupyter
/opt/conda/bin/jupyter notebook --notebook-dir=/opt/notebooks/jupyter/ --ip=0.0.0.0 --allow-root
[ctrl + p,q]でコンテナ立ち上げたまま抜ける
後で見れるようにjupyterのトークンをテキスト出力
docker logs jupyter | grep token= > /home/username/share/token.txt
VMのIP確認
hostname -I
windowsからVMのIP:8888で、vm上のjupyterを開き
共有ディレクトリ内のtoken.txtにtokenが入ってるのでそれを使って認証
jupyter上でpip installするのも可
!pip install openpyxl
コンテナに入ってapt install やmakeするも可
docker exec -it jupyter /bin/bash
jupyterの保存形式だとgit使いづらいとか作ったものをpyで保存しなおしとかめんどいので
下記参考でpy保存するようにする
https://qiita.com/cfiken/items/8455383f32ee19dfbba3
経緯
ちょっと作るくらいなら直接windowsにanaconda入れてやれば十分でもあるんだけど
シェルやlinux用モジュールが絡むものが使いづらかったりするのでubuntuに。
じゃあVM上のubuntuでやればとなると環境違いで動作しなかったりがあるときにめんどい
で、pyenvで環境切り替えとなるとそれをいちいち切り替えたりがめんどい
なのでdocker上で閉じてしまいコンテナを切り替えで対応
これならmecab辞書データやopencv、ffmpegのバージョン等の違いがあってもいける
容量は増えるけど。
VMを複数作るのもありだけど容量増えたりメモリ足らなくなったりとか厄介そう
メリット
pandasでいじったファイルをexcel保存したりしてすぐにexcelで確認できる
dockerコンテナのファイル出力も共有ディレクトリ経由で簡単
クラウドと違って金がかからない、ほどほどのPCと電気代はかかる
まだやってないけどできるんじゃないかなメリット
windows側でポートフォワードすれば外からdocker内のjupyterにアクセスで出先で回線あれば自宅の続きできる、気がする
デメリット
CUDAが使えない、Hyper-VでGPU使えないっぽいので。
容量増える
コンテナ入れるほどに増える、VMでも増えるし。
VM起動時にIP固定化できてない、やる方法あると思うんだけど知識足らず、起動しっぱなしだから特に困ることもないのでそのまま。
今後やりたいこと
CUDA使える環境にしたい
・ubuntuのデュアルブートにするか別PCに分離するか
ケチって一つの環境に入れてるのと、ゲーム兼用なのでコーディングのためにGPU買うのもなんか高い
しかしデュアルブートだとwindowsでの作業引き続きしつつというのも面倒になる
のでどうしようか悩み
nvidia-dockerがdocker for windowsに対応するか、WSLでGPU使えるようになれば解決するのだけれども
でもGPU目的ならVMとかコンテナにこだわらずこの記事の通りにやれば正解な気がする
https://qiita.com/kekekekenta/items/a46a899956b1c756ddce