Contents
Dockerコンテナ環境で作ったJupyter LabにApacheのリバースプロキシ経由で接続して使ってみた備忘録です。
目的
Apache2.4を使ったリバースプロキシでJupyter Labコンテナ(同ホスト)へアクセスします。
Apache2.4からWeb Socketのリバースプロキシができるモジュール(mod_proxy_wstunnel.so
)が追加されています。
そのためApache2.2ではできません。
環境
項目 | バージョン |
---|---|
OS | CentoS7.5 |
Apache | 2.4 |
Docker | 1.13.1 |
Python | 3.6 |
事前条件
Dockerは既にインストール済みとします。
環境準備
Jupyterコンテナ
コンテナにJupyter Labを構築
Pythonコンテナをpullします。
1 2 |
[root@localhost ~]# docker image pull python:3.6 |
Jupyter Labインストール
PythonコンテナにJupyter Labをインストールします。
1 2 3 4 |
[root@localhost ~]# docker container run -it -d --name jupyterlab python:3.6 [root@localhost ~]# docker container exec -it jupyterlab bash root@b52d7f6e09d2:/# pip install jupyter jupyterlab |
Jupyter Labの設定
Jupyter Labの設定をするため設定ファイルを作成します。
1 2 3 |
root@b52d7f6e09d2:/# jupyter lab --generate-config Writing default config to: /root/.jupyter/jupyter_notebook_config.py |
Jupyter Labへログインするためのパスワードを生成します。
sha1:...
の部分はメモっておいてください。
1 2 3 4 5 |
root@b52d7f6e09d2:~# python -c 'from notebook.auth import passwd; p=passwd(); print(p)' Enter password: Verify password: sha1:27da61f2f5b7:3a7fcba(snip) |
Jupyter Labの設定をします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
root@b52d7f6e09d2:~# exit [root@localhost ~]# docker container cp jupyterlab:/root/.jupyter/jupyter_notebook_config.py jupyter_notebook_config.py [root@localhost ~]# vi jupyter_notebook_config.py (snip) #c.NotebookApp.ip = 'localhost' c.NotebookApp.ip = '0.0.0.0' (snip) #c.NotebookApp.open_browser = True c.NotebookApp.open_browser = False # Jupyter Lab起動時にブラウザを自動起動しないようにします (snip) #c.NotebookApp.password = '' c.NotebookApp.password = 'sha1:ea8a9415985f:1(snip)' # 生成したパスワードをコピーします (snip) |
設定したJupyter Labのファイルをコンテナにコピーします。
1 2 |
[root@localhost ~]# docker container cp jupyter_notebook_config.py jupyterlab:/root/.jupyter/jupyter_notebook_config.py |
コンテナIP確認
リバースプロキシに設定するためのコンテナのIPを確認しておきます。
1 2 3 |
[root@localhost ~]# docker container inspect -f '{{ .NetworkSettings.Networks.bridge.IPAddress }}' jupyterlab 172.17.0.2 |
Jupyter Lab起動
Jupyter Labを起動します。
ここでは例のためrootで起動します。
1 2 |
[root@localhost ~]# docker exec -d jupyterlab sh -c 'cd /root && jupyter lab --allow-root' |
Apache
Apacheのインストール
リバースプロキシとして使うApacheをインストールします。
1 2 |
[root@localhost ~]# yum -y install httpd |
Apacheの設定
リバースプロキシの設定をします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[root@localhost ~]# cd /etc/httpd/conf [root@localhost conf]# vi httpd.conf (snip) # 一番最終行にでも追記 # Reverse Proxy Config. ProxyRequests Off ProxyPreserveHost On <Location /> ProxyPass http://172.17.0.2:8888/ ProxyPassReverse http://172.17.0.2:8888/ </Location> <Location /api/kernels/> ProxyPass ws://172.17.0.2:8888/api/kernels/ ProxyPassReverse ws://172.17.0.2:8888/api/kernels/ </Location> <Location /terminals/> ProxyPass ws://172.17.0.2:8888/terminals/ ProxyPassReverse ws://172.17.0.2:8888/terminals/ </Location> |
Apacheの起動
Apacheを起動します。
1 2 3 |
[root@localhost conf]# systemctl start httpd [root@localhost conf]# systemctl enable httpd |
動作確認
ブラウザでリバースプロキシへアクセスしてJupyter Labが使えれば問題ありません。
最後に
このやり方であれば、パス(ルート)を個別に設定すれば他のJupyter Labコンテナにもアクセスできますね! 🙂
Jupyterにはマルチユーザーもできる仕組みがありますが、あえてコンテナにしたのは独立性をもたせたかったからです。
このやり方であれば、各自好きにコンテナの中身もterminalでいじれますしね 🙂
ブラウザだけでほぼ完結できそうです。