自分の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にもアクセスが可能です。