質問: 最近 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 日にサポートが終了します。積極的に Python 2 を使いたい理由が無いのであれば、Python 3 のみにして良いでしょう。IPython kernel もバージョン 6 から Python 2 のサポートを切っています。 Python 3 のみにする場合 `jupyter/scipy-notebook` など公式配布されているイメージが使いまわせます。 や に説明があります。 補足2 Docker を使ったとしても「各種ライブラリのアップデートに対応する」という部分の複雑さは変わらないので注意してください。公式イメージを使わずに自前イメージを使うのであれば、何かしら更新がある度に自前イメージをビルドし直して Docker Hub にアップロードする、というのを繰り返す必要があります。