見出し画像

Docker_仮想環境上でjupyter labを使ってみる # 131日目

本日もDockerに関してです。
前回のDocker関連の記事はこちら↓。


本日も以下の動画に沿って進めさせていただきました。最後まで拝聴したのですが、かなり勉強になりました。


jupyter labはウェブブラウザ上でアクセスできるPythonのインタープリターです。このサーバーを仮想環境上で立ち上げて、自分の環境からアクセスしてみたいと思います。

ただ自分の環境と仮想環境はそれぞれ隔離されているため、普通には自分の環境から仮想環境で立ち上げたブラウザにはアクセスできません。

前回の記事ではvolumesオプションでフォルダだけ同期することができましたが、ブラウザ(アドレス)で同期するにはまた別の処理が必要になります。

今回は「ポートマッピング」でそれを実現します。仮想環境のポート番号と、自分の環境のポート番号を同期させることで、自分の環境から仮想環境のブラウザにアクセスできるようにしています。

以下のコマンドを実行します。
※docker runを使うときは、作業フォルダが目的のフォルダになっているちゃんと確認してください(ちゃんとcdしたか。volumeの同期を行うときは特に。)

docker run -v $PWD/opt:/root/opt -w /root/opt -it --rm -p 7777:8888 docker-python_python3 jupyter-lab --ip 0.0.0.0 --allow-root -b localhost

コマンドの細かい解説は以下です。

  • docker run

    • 一時的にコンテナを作る、という意味

    • 一時的であるためシャットダウンと同時にコンテナが消える

    • オプションも全て自分で記載する

  • $PWD/opt:/root/opt

    • volumeの同期

    • localなoptフォルダとコンテナのoptフォルダを同期している。ポートマッピングとは別軸だが同時にやっている形

  • --rm

    • コンテナの接続が切れた時に同時にコンテナを削除する、というオプション

  • -p

    • ポートマッピングを設定する

  • 7777

    • 自分のコンピュータ上で使うポートの番号

    • 7777は自由に変えて大丈夫。他とバッティングしないポート番号

  • 8888

    • 仮想環境で使われるポートの番号

    • 8888はjupyter labが使うデフォルトの番号

  • docker-python_python3

    • イメージの名前

  • jupyter-lab以降

    • jupyter labを立ち上げるためのオプション設定

    • ip 0.0.0.0でlocalhostで立ち上げる

うまくいけば以下のようなメッセージが出ます。

[W 2022-03-23 09:22:13.620 ServerApp] Unrecognized alias: 'b', it will have no effect.
[I 2022-03-23 09:22:13.639 ServerApp] jupyterlab | extension was successfully linked.
[I 2022-03-23 09:22:13.648 ServerApp] nbclassic | extension was successfully linked.
[I 2022-03-23 09:22:13.649 ServerApp] Writing Jupyter server cookie secret to /root/.local/share/jupyter/runtime/jupyter_cookie_secret
[I 2022-03-23 09:22:13.812 ServerApp] notebook_shim | extension was successfully linked.
[I 2022-03-23 09:22:13.824 ServerApp] notebook_shim | extension was successfully loaded.
[I 2022-03-23 09:22:13.825 LabApp] JupyterLab extension loaded from /usr/local/lib/python3.10/site-packages/jupyterlab
[I 2022-03-23 09:22:13.825 LabApp] JupyterLab application directory is /usr/local/share/jupyter/lab
[I 2022-03-23 09:22:13.828 ServerApp] jupyterlab | extension was successfully loaded.
[I 2022-03-23 09:22:13.830 ServerApp] nbclassic | extension was successfully loaded.
[I 2022-03-23 09:22:13.831 ServerApp] ローカルディレクトリからノートブックをサーブ: /root/opt
[I 2022-03-23 09:22:13.831 ServerApp] Jupyter Server 1.15.6 is running at:
[I 2022-03-23 09:22:13.831 ServerApp] http://97ad884d2095:8888/lab?token=76feb383877fbec40ed83b010fd2cc72bc4a002a7ffce075
[I 2022-03-23 09:22:13.831 ServerApp]  or http://127.0.0.1:8888/lab?token=76feb383877fbec40ed83b010fd2cc72bc4a002a7ffce075
[I 2022-03-23 09:22:13.831 ServerApp] サーバを停止し全てのカーネルをシャットダウンするには Control-C を使って下さい(確認をスキップするには2回)。
[W 2022-03-23 09:22:13.833 ServerApp] ウェブブラウザが見つかりません: could not locate runnable browser
[C 2022-03-23 09:22:13.833 ServerApp]

    To access the server, open this file in a browser:
        file:///root/.local/share/jupyter/runtime/jpserver-1-open.html
    Or copy and paste one of these URLs:
        http://97ad884d2095:8888/lab?token=76feb383877fbec40ed83b010fd2cc72bc4a002a7ffce075
     or http://127.0.0.1:8888/lab?token=76feb383877fbec40ed83b010fd2cc72bc4a002a7ffce075

ここまでできればコンテナが立ち上がり、仮想環境上でウェブサーバーが立ち上がったことになります。Docker Desktopで見てみると以下のように「modest_fermat(控えめな農場?)」という名前が付いて立ち上がっています。

ターミナルに表示されたメッセージの一番下にはURLがあり、ここにアクセスすればjupyter labが使えます。ただ、これは仮想環境で立ち上がっているため、自分の環境のブラウザからアクセスしようとしてもできません。

http://127.0.0.1:8888/lab?token=76feb383877fbec40ed83b010fd2cc72bc4a002a7ffce075

ここでポートマッピングが役に立ちます。以下のようなコマンドでした。

-p 7777:8888

つまりURLの8888の部分を7777に変更してアクセスすればOKです。
ログインを求められたら、URLの?以降にあるtokenを入力してください(これは毎回変わるらしいです)。

少し見にくいですが、optファイルにあるsample.pyが表示されています。これはポートマッピングと同時にvolumesの同期を行ったことにより、仮想環境のoptファイルと自分の環境のoptファイルが同期されたためです。


蛇足ですが、コンテナの確認方法をメモしておきます。
コンテナは以下のコマンドで確認可能です。

docker container ls

ただしこのコマンドでは「今動いているコンテナの一覧」しか分からず、動いていないコンテナは隠されてしまっています。隠されたコンテナまで確認するときは「-a」を付ければOKです(aはall)

docker container ls -a



ここまでお読みいただきありがとうございました!!


参考


この記事が気に入ったらサポートをしてみませんか?