お前 is 誰?
こんにちは、初めてのqiitaです。15年ぐらい「はてな」にいた底辺派遣ITの老人がqiitaに来ました。
どんな話?
ソフトウェアエンジニアが遊びで自宅サーバーにDokcerでJupyter Notebook環境を作る話。
環境
Ubuntu 18
なぜDocker?
- 環境汚したくない
- コマンド一発で楽
これに尽きます。理由はこれだけで十分です。
- Dockerって別に難しくない
というのもわかりました。
Ubuntu12ぐらいからずっとアップデートし続けたサーバーが最近死んでUbuntu18で再構築したのですが、好き勝手やってたので本当に環境が汚れて意味がわからなくなっていました。Docker使えば環境が閉じれるので非常に気持ちよいです。
Docker導入
はい。下記の通り流すだけ
https://linuxconfig.org/how-to-install-docker-on-ubuntu-18-04-bionic-beaver
Jupyter NotebookをDockerで
ここに実はもうまとまっている
https://qiita.com/kshigeru/items/ea174d6bcacc474f2a51
方針
- ホスト的にはポート18888でjupyter NotebookをLISTEN
- tensorflow付きのものを入れることにしました
-
/var/www/python/jupyter
にあるホストのディレクトリをdocker内部に繋げる
実際に流したコマンド
dockerで動かすまで
sudo su
docker pull jupyter/tensorflow-notebook
docker run -d --name tfnb -p 18888:8888 -v /var/www/python/jupyter:/home/jovyan/work jupyter/tensorflow-notebook
h2o経由でサーブする
h2oを設定する
私はhttps://jn.lovesaemi.daemon.asia/
に繋げます。
websocket(WSS://)も使うのでproxy.websocket: ON
が必要
"jn.lovesaemi.daemon.asia:443":
listen:
port: 443
ssl:
certificate-file: /etc/letsencrypt/live/lovesaemi.daemon.asia-0001/fullchain.pem
key-file: /etc/letsencrypt/live/lovesaemi.daemon.asia-0001/privkey.pem
paths:
"/":
proxy.websocket: ON
proxy.reverse.url: http://127.0.0.1:18888/
service storp h2o
service start h2o
「h2oはさいつよ」なのでみんなもっと使うとよい。
設定簡単だと思いませんか!?
しかもApacheよりNginxより高速なHTTP/2サーバーなんですよ!まじ最高。
https://h2o.examp1e.net/
tokenをメモする
# jupyterのlistを調べる
docker exec tfnb jupyter notebook list
Currently running servers:
http://localhost:8888/?token=トークン :: /home/jovyan
トークンとかパスワードとか固定できるらしいのでやりたいならやれば良いと思います。
https://jn.lovesaemi.daemon.asia/?token=トークン
でアクセス可能
proxy経由なのでallow_originを弄ってdocker stop / startする
proxy経由なのでjupyter notebookを設定する必要がある。
ここがちょっとめんどくさかった。。
https://github.com/jupyter/jupyter/issues/79
に従って作業する
viぐらいは入っていると思ったけどエディタがnanoしかなくて。
# 設定ファイルを作る
docker exec tfnb jupyter notebook --generate-config
# dockerに入る
docker exec -it tfnb bash
# 設定ファイルを編集する(nano)
nano ./.jupyter/jupyter_notebook_config.py
nanoをよくわかってないのだけどctrl + wで検索らしい。
allow_origin
で検索
# c.NotebookApp.allow_origin = ''
となっているので
c.NotebookApp.allow_origin = '*'
とする。
ctrl + s
で保存、ctrl + x
でnano抜ける
exit
でdockerの中から抜けて
docker stop tfnb
docker start tfnb
でdockerを再起動。トークンを再度確認しておけば良いですね。変わっているかも?
docker exec tfnb jupyter notebook list
Dockerでなんか変だなーと思ったら
ログ見る
sudo su
docker logs -f
評価
- 基本的にコマンド一発で立ち上がるのが良い
- 環境を汚さないのが良い
- Docker Hubの仕組みがとても良い
Docker最高だ!