54014
最近 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
の環境を作ればいいので、楽かなと思っています。

上記方法が可能かご教授頂ければ幸いです。  
初質問ですので、言葉足らずかもしれませんが  
よろしくお願いします。
CC BY-SA 4.0
2019-04-08T05:30:46.917
54011
2019-04-09T07:17:57.317
32833
question
python python3 docker jupyter-notebook python2
docker コンテナと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 にアップロードする、というのを繰り返す必要があります。
CC BY-SA 4.0
2019-04-08T06:14:46.780
54014
2019-04-08T06:40:15.827
2019-04-08T06:40:15.827
19110
19110
54011
answer