docker コンテナとjupyter について


最近 Docker の勉強を初めました。  
初心者です。  
以下のような運用方法を考えているのですが、可能でしょうか。  
可能であれば、参考になるサイトなど教えていただきたく思います。

私は普段Jupyterを使用しています。  
自分で新しいPCを購入する度、会社から新しいPCが支給されるたびに  
Python、Jupyter の環境を構築することがとてもめんどくさく感じています。  
とくに、extension 周りのエラーなどは毎回悩まされます。

そこで、Docker を使ってこの辺の運用を楽にしたいと考えています。  
以下のような方法をするにはどのようにすればいいのでしょうか。

  1. jupyter 用のcontainer を作る
  2. python(環境) 用のcontainer を作る(例：python2, python3)
  3. 用途に応じて jupyter container + python2 container または、jupyter containter + python3 container と使い分ける

この方法であれば、python2, python3 のそれぞれのコンテナにjupyter を入れる必要もなく、一度jupyter
の環境を作ればいいので、楽かなと思っています。

上記方法が可能かご教授頂ければ幸いです。  
初質問ですので、言葉足らずかもしれませんが  
よろしくお願いします。




Docker は「ふたつのコンテナイメージを足す」ことはできません。「あるコンテナイメージを元に追記していく」という直感の方が合っています。

Jupyter Notebook は前提として Python がインストールされていないと動きません。このため、設計としては：

  * Python 2 イメージの上に Jupyter Notebook をインストールしたイメージ
  * Python 3 イメージの上に Jupyter Notebook をインストールしたイメージ

のふたつを用意して使い分ける形が素朴に思いつきます。

また、Jupyter Notebook は Python 2 kernel と Python 3 kernel
を同居させることもできるので、用意したい環境がさほど複雑でないなら、

  * Python 2 と 3 がインストールされたイメージの上に Jupyter Notebook をインストールしたイメージ

を使う方が便利そうです。

Jupyter Notebook をブラウザで動かしたりする場合、コンテナを稼働させるときに権限を与える必要があります。典型的には `-p`
オプションでネットワークのポートを繋げることが必要でしょう。

## 補足1

ところで Python 2 は [2020 年 1 月 1 日にサポートが終了します](https://pythonclock.org/)。積極的に
Python 2 を使いたい理由が無いのであれば、Python 3 のみにして良いでしょう。IPython kernel もバージョン 6 から
[Python 2
のサポートを切っています](https://ipython.readthedocs.io/en/latest/whatsnew/version6.html#ipython-6-0)。

Python 3 のみにする場合 `jupyter/scipy-notebook`
など公式配布されているイメージが使いまわせます。<https://github.com/jupyter/docker-stacks> や
<https://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html>
に説明があります。

## 補足2

Docker
を使ったとしても「各種ライブラリのアップデートに対応する」という部分の複雑さは変わらないので注意してください。公式イメージを使わずに自前イメージを使うのであれば、何かしら更新がある度に自前イメージをビルドし直して
Docker Hub にアップロードする、というのを繰り返す必要があります。




Docker は「ふたつのコンテナイメージを足す」ことはできません。「あるコンテナイメージを元に追記していく」という直感の方が合っています。

Jupyter Notebook は前提として Python がインストールされていないと動きません。このため、設計としては：

  * Python 2 イメージの上に Jupyter Notebook をインストールしたイメージ
  * Python 3 イメージの上に Jupyter Notebook をインストールしたイメージ

のふたつを用意して使い分ける形が素朴に思いつきます。

また、Jupyter Notebook は Python 2 kernel と Python 3 kernel
を同居させることもできるので、用意したい環境がさほど複雑でないなら、

  * Python 2 と 3 がインストールされたイメージの上に Jupyter Notebook をインストールしたイメージ

を使う方が便利そうです。

Jupyter Notebook をブラウザで動かしたりする場合、コンテナを稼働させるときに権限を与える必要があります。典型的には `-p`
オプションでネットワークのポートを繋げることが必要でしょう。

## 補足1

ところで Python 2 は [2020 年 1 月 1 日にサポートが終了します](https://pythonclock.org/)。積極的に
Python 2 を使いたい理由が無いのであれば、Python 3 のみにして良いでしょう。IPython kernel もバージョン 6 から
[Python 2
のサポートを切っています](https://ipython.readthedocs.io/en/latest/whatsnew/version6.html#ipython-6-0)。

Python 3 のみにする場合 `jupyter/scipy-notebook`
など公式配布されているイメージが使いまわせます。<https://github.com/jupyter/docker-stacks> や
<https://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html>
に説明があります。

## 補足2

Docker
を使ったとしても「各種ライブラリのアップデートに対応する」という部分の複雑さは変わらないので注意してください。公式イメージを使わずに自前イメージを使うのであれば、何かしら更新がある度に自前イメージをビルドし直して
Docker Hub にアップロードする、というのを繰り返す必要があります。

