LoginSignup
22
38

More than 5 years have passed since last update.

Anaconda の JupyterLab を Docker で使う

Last updated at Posted at 2018-02-10

追記(2018/11/14)

この記事の内容は古く冗長なため、新たに記事を起こしました。
Docker で JupyterLab を起動し、token 入力なしでアクセスする

  • この記事は macOS を前提としていますが、記事中の Docker Toolbox は、Legacy desktop solution となっています。Docker for Mac の利用を推奨します。 https://docs.docker.com/toolbox/
  • 新しい記事では、冒頭に結論として docker の起動コマンドを書きました。

下記の内容は古いですが、一応残しておきます。


私は、Anaconda の JupyterLab を Docker で使っています。この記事では、その理由と、環境構築方法を示します。

Docker で使う理由

パス問題の解消

Anaconda は便利なソフトなのですが、デメリットもあります。その一つが、OS 主要コマンドの一部パスを Anaconda 内蔵のコマンドに通してしまう問題。[Anaconda インストールディレクトリ]/bin に PATH が通されるのですが、この中に curl, openssl などのコマンドもあります。

Anaconda を Docker コンテナとして動作させることで、パスの問題を解消できます。

Docker を使うデメリット

普通に OS に Anaconda をインストールするのとは使用感が変わってきます。

  • Python コマンドは docker コマンド経由での実行になる。
  • Spyder などの GUI ツールを使うのは一手間かかる(この記事では、これらを使えるようにする方法は書きません)

また、Docker 環境構築が必要な分だけ、環境構築に一手間かかります。

環境構築手順

macOS での手順を示します。他の OS でも同じような考え方でできると思いますが、この記事では扱いません。

Docker 環境の構築

まず DockerTools をインストールします。これは、Docker 環境構築に便利なソフトを寄せ集めたものです。
Docker Toolbox を使って macOS上に Docker 環境を構築する

DockerTools はインストーラの指示に従うだけでインストールできます。インストール後に、ランチャーパッドから「Docker QuickStart shell」のアイコンをクリックします。すると自動的に Docker を稼動させるための Linux VM が構築されます。また、VM 上の Docker 環境を利用するための環境変数をセットした状態で、ターミナルを起動してくれます。以降はこのターミナル上で、コンテナ構築を行っていきます。

Anaconda 用コンテナの作成

今回は、Docker Compose を使って構築します。ファイル構成は次の通りにします。

|- docker-compose.yaml
|- Dockerfile
|- workspace/  (Pythonソースやノートブックを置くディレクトリ。コンテナの /workspace にマッピングします)

docker-compose.yaml, Dockerfile は次の内容にします。

docker-compose.yml
version: '3'
services:
    anaconda:
        build: .
        volumes:
            - ./workspace:/workspace
        ports:
            - "8888:8888"
Dockerfile
FROM continuumio/anaconda3
WORKDIR /workspace
CMD jupyter-lab --no-browser \
  --port=8888 --ip=0.0.0.0 --allow-root

上記の準備ができたらコンテナイメージをビルドします。

$ docker-compose build

ビルドが終わったらコンテナを起動します。

$ docker-compose up

// ターミナルに token が出力されます。これを JupyterLab へのログインに使います。
http://0.0.0.0:8888/?token=...

ブラウザで、 http://192.168.99.100:8888 にアクセスすると、JupyterLab の画面にアクセスできます。コンテナ起動時に出力された token 文字列を入力するとログインでき、使えるようになります。

スクリーンショット 2018-02-10 18.28.15.png

どのように運用するか

複数の仮想環境を作りたい場合

普通の Anaconda の使い方だと、conda create で仮想環境を作り、activate して仮想環境に入って作業、という流れになるかと思います。Docker の場合は、環境ごとに Docker イメージを作るのが一つの手と考えています。それぞれで JupyterLab が必要な場合は、ポート番号を変更して対応します。

PJ-A/
  |- docker-compose.yaml
  |- Dockerfile
  |- workspace/

PJ-B/
  |- docker-compose.yaml
  |- Dockerfile
  |- workspace/

Anaconda のパッケージを揃えたい場合

現在、作業している Anaconda のパッケージ情報は次のようにして yaml で出力できます。

# export
$ docker-compose run --rm anaconda conda env export -n root > workspace/env.yaml

この yaml を読み込むことで Anaconda のパッケージを揃えます。

まず、workspace ディレクトリに env.yaml を配置します。
次に Dockerfile を編集します。

Dockerfile
FROM continuumio/anaconda3
WORKDIR /workspace
COPY workspace/env.yaml /workspace
RUN conda env update --file /workspace/env.yaml
CMD jupyter-lab --no-browser \
  --port=8888 --ip=0.0.0.0 --allow-root

次のコマンドを実行することで、イメージをビルドし直します。

$ docker-compose build

Python スクリプトを実行する場合

workspace/test.py を実行するには次のコマンドを実行します。

$ docker-compose run --rm anaconda python test.py

コマンドが長いので、エイリアスを使うのが楽です。

$ alias dpython="docker-compose run --rm anaconda python"
$ dpython test.py
22
38
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
38