スポンサーリンク

【Docker】ローカル環境に Jupyter Lab(notebook)を 構築する

サーバー
スポンサーリンク
たろ
たろ

自分のPCにJupyterの環境を構築したいけどやり方がわからない。

こんな悩みを解決します。

本記事の内容
  • 自分のPCにJupyter Labの環境を構築
  • 仮想ホスト機能を持ったDockerにJupyter環境を構築

PC上の Python 環境を汚したくないときは Dockerを使うと便利です。

この記事では Docker上 に Jupyter Lab(notebook) 環境を構築する手順をまとめたいと思います。

スポンサーリンク

環境

  • MacOS
  • Docker
$ docker --version
Docker version 20.10.2, build 2291f61

なお、この記事ではすでにDockerは使える環境であることを前提とします。

構築手順

  • STEP01

    Dockerをインストール
    ローカル環境のDockerを準備する
  • STEP02

    Dockerイメージをつくる
    Dockerfileを準備しBuildをする
  • STEP03

    Dockerコンテナを起動
    Docker run コマンドでコンテナを起動する

Dockerをインストールする

Docker はインストール済みとして話を進めます。

Dockerイメージをつくる

Dockerfile を準備する

まずは Dockerfile にベースとするイメージやポート、起動時のコマンドなどを定義します。

ベースイメージは Anaconda 公式とします。

# ベースイメージ名:タグ名
FROM continuumio/anaconda3:2020.07

# コンテナ側のルート直下にworkdir/(任意)という名前の作業ディレクトリを作り移動する
WORKDIR /workdir

# コンテナ側のリッスンポート番号
# 明示しているだけで、なくても動く
EXPOSE 8888

# ENTRYPOINT命令はコンテナ起動時に実行するコマンドを指定(基本docker runの時に上書きしないもの)
# "jupyter-lab" => jupyter-lab立ち上げコマンド
# "--ip=0.0.0.0" => ip制限なし
# "--port=8888" => EXPOSE命令で書いたポート番号と合わせる
# ”--no-browser” => ブラウザを立ち上げない。コンテナ側にはブラウザがないので 。
# "--allow-root" => rootユーザーの許可。セキュリティ的には良くないので、自分で使うときだけ。
# "--NotebookApp.token=''" => トークンなしで起動許可。これもセキュリティ的には良くない。
ENTRYPOINT ["jupyter-lab", "--no-browser", "--port=8888", "--ip=0.0.0.0", "--allow-root", "--NotebookApp.token=''"]

# CMD命令はコンテナ起動時に実行するコマンドを指定(docker runの時に上書きする可能性のあるもの)
# "--notebook-dir=/workdir" => Jupyter Labのルートとなるディレクトリを指定
CMD ["--notebook-dir=/workdir"]

イメージをビルドする

Dockerfile があるディレクトリで以下のコマンドを実行します。

docker build -t jupyter/env .

-t
ビルドしたイメージに名前(タグ)を指定するオプション。
上の例では、jupyter/env を記載

.
Dockerfileのあるディレクトリを指定します。

イメージを確認する

コマンド実行後はイメージがビルドされたことを確認します。

$ docker images
REPOSITORY              TAG       IMAGE ID       CREATED        SIZE
jupyter/env             latest    f6e272f4fdf7   3 days ago     2.73GB

Dockerコンテナを起動

下記のコマンドで Docker コンテナを起動します。

docker run -it -p 8080:8888 --rm --mount type=bind,src=`pwd`,dst=/workdir  -d jupyter/env

コマンド実行後、コンテナが起動していることを確認します。

$ docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED         STATUS        PORTS                    NAMES
54b722b9232a   jupyter/env   "jupyter-lab --no-br…"   2 seconds ago   Up 1 second   0.0.0.0:8080->8888/tcp   tender_antonelli

コンテナが立ち上がっていれば成功です。

オプションの説明

-it
-i-t をまとめて書いたもの。

-i: ホスト側のシェルからコンテナ内を操作できるようにする。
-t: Dockerコンテナ内の標準出力とホスト側の出力をつなげる。

-p 8080:8888
ホスト側のポート番号:コンテナ側のポート番号 をひも付ける。

–rm
コンテナ停止時、自動でコンテナを削除する。このオプションを付与しないと docker ps -a で停止したコンテナ一覧に表示される。

–mount type=bind,src=`pwd`,dst=/workdir
ホストのディレクトリをコンテナにマウントする。
・type=bind:マウントタイプにbindを指定
・src=`pwd`:ホスト側のカレントディレクトリを指定
・dst=/workdir:コンテナ側の/workdirをマウント先として指定

-d
コンテナをバックグラウンドで実行し、コンテナ ID を表示

Jupyter Lab (Notebook)へアクセスする

コンテナ起動後は以下のURLにアクセスします。

localhost:8080

Jupyter Labの画面が開いたら成功です。

ちなみに、http://localhost:8080/tree とするとJupyter Notebookにもアクセスが可能です。

参考

コメント

  1. […] 【Docker】ローカル環境に Jupyter Lab(notebook)を 構築するPC上の Python 環境を… […]

タイトルとURLをコピーしました