LoginSignup
6
15

More than 5 years have passed since last update.

Docker for Mac で Jupyter 環境を整える

Last updated at Posted at 2018-05-08

概要

Python に加えて Julia もよく使うようになってきたので、まとめてインストールできる手順を確立しておきたい。
今回はホストに Mac を使ったが、Docker をインストールしたあとのコマンドは、どの OS でもだいたい同じ。

Docker で datascience-notebook イメージを使う。
Jupyter Notebook Data Science Stack
docker-stacks

利点

  • Julia, Python, R をまとめて入れられる
  • どれも Jupyter のカーネルとして一元的にアクセスできる
  • 動画作成に使う ffmpeg が標準で入っている
  • 他のツールも入れやすい
  • いつでも環境をリセットできる

Docker for Mac インストール

Get started with Docker for Mac

$ docker --version
Docker version 18.03.1-ce, build 9ee9f40

パフォーマンス関係の設定

doc-sett-adv.png

とりあえずコンテナを起動

  • パスワードなし(非推奨だが)
  • コンテナ名を dsnote にする
  • 数 GB のダウンロードあり
$ docker run -d -p 8888:8888 --name dsnote \
      jupyter/datascience-notebook start-notebook.sh \
      --NotebookApp.token=''

コンテナが起動すると、ブラウザからアクセスできる。
http://localhost:8888

Docker の基本操作

$ docker ps # 起動中のコンテナを表示
$ docker stop dsnote # コンテナを停止
$ docker ps -a # 停止中も含む全コンテナを表示

$ docker start dsnote # コンテナを再開
$ docker exec -it dsnote bash # コンテナ内の bash
% exit # bash を閉じる
$ docker stop dsnote

$ docker rm dsnote # コンテナを削除

本環境を整える

コピペ用コマンド

$ ホストのシェル
% コンテナ内のシェル

$ docker run -d -p 8888:8888 --name dsnote \
      -v $(pwd):/home/jovyan/work:cached \
      --user root -e GRANT_SUDO=yes \
      jupyter/datascience-notebook start-notebook.sh

$ docker exec -it --user jovyan dsnote bash

% conda update -n base conda
% jupyter notebook list # token を確認

% sudo apt-get update
% sudo apt-get install zsh # 好きなものをインストールできる

julia-notebook
Pkg.update()
Pkg.add("Plots")

using Plots
gr(size=(400, 300), fmt=:png)
ENV["PLOTS_TEST"] = "true"

x = linspace(0, 2, 100)
y = sin.(pi*x)
plot(x, y)

オプションの説明

デフォルトユーザが jovyan という名前になる

-p 8888:8888
ホスト port:8888 をコンテナ port:8888 に転送

--name dsnote
コンテナ名を指定

-v $(pwd):/home/jovyan/work:cached
ホストの現在ディレクトリをコンテナ内 /home/jovyan/work にマウント
cached は consistency を犠牲にしてパフォーマンス向上(Mac のみ?)
Performance tuning for volume mounts (shared filesystems)

--user root -e GRANT_SUDO=yes
jovyan で sudo できるようになる

最初に token を確認してブラウザからアクセスしたら、クッキーに保存されて、二回目以降は認証が要らないので楽。

マルチプロセスのカーネルを導入

Jupyter Notebook へのカーネルの追加方法
Installing additional Julia kernels
Getting Started, Julia Manual
Parallel Map and Loops, Parallel Computing

julia-notebook
using IJulia

# -p, --procs {N|auto}
#    Integer value N launches N additional local worker processes
#    "auto" launches as many workers as the number of local cores
IJulia.installkernel("Julia procs", "-p", "auto")

# カーネル変更後
procs() # プロセスのリスト

# コイントス
nheads = @parallel (+) for i = 1:200000000
    Int(rand(Bool))
end

下記のファイルが自動的に生成される
/home/jovyan/.local/share/jupyter/kernels/julia-procs-0.6/kernel.json

kernel.json
{
  "display_name": "Julia procs 0.6.2",
  "argv": [
    "/opt/julia-0.6.2/bin/julia",
    "-i",
    "--startup-file=yes",
    "--color=yes",
    "-p",
    "auto",
    "/opt/julia/v0.6/IJulia/src/../src/kernel.jl",
    "{connection_file}"
  ],
  "language": "julia"
}

自動的に再起動(5/9 追記)

PC 起動時に自動的に起動してほしい
[Docker] 起動中のコンテナに --restart=always オプションを後から適用する
Restart policies (--restart)

$ docker update --restart=unless-stopped dsnote

iTerm で自動ログイン(5/9 追記)

iterm-dsnote.png

Julia 0.6.3 対応

自分で Dockerfile をつくった。
Plots 系 (PyPlot も含めて) ビルド済み。

6
15
0

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
6
15