如何安装一个具有所有依赖的Python包到Docker镜像中?

我正在Ubuntu 15.10中使用Pyspark jupyter / pyspark-notebook的Docker容器。 我需要安装folium所有的依赖关系,并在容器中运行一个Pyspark脚本。 我成功安装了Docker,拉下了镜像,然后用命令运行

docker run -d -p 8888:8888 -p 4040:4040 -v /home/$MYUSER/$MYPROJECT:/home/jovyan/work jupyter/pyspark-notebook 

然后,我执行代码示例没有任何问题

 import pyspark sc = pyspark.SparkContext('local[*]') # do something to prove it works rdd = sc.parallelize(range(1000)) rdd.takeSample(False, 5) 

我在/opt/conda查找了conda环境(正如它在文档中所述),但在我的/opt文件夹中没有conda环境。 然后,我把miniconda3和folium作为一个普通的Python软件包安装(没有涉及到Docker)。

它不起作用。 当我运行该图像,并尝试导入与import folium的包它没有findfolium包:

 ImportErrorTraceback (most recent call last) <ipython-input-1-af6e4f19ef00> in <module>() ----> 1 import folium ImportError: No module named 'folium' 

所以这个问题可以归结为两个问题:

  1. 集装箱的conda在哪里?
  2. 我如何将我需要的Python包安装到容器中?

在此先感谢您的帮助!

回答第一个问题conda环境在哪里? 我们只需要在控制台$ docker my_containers_name ls /opt/conda执行。

第二个问题有两个select:

  • 我们可以通过执行命令来打开容器控制台

    $ docker exec -it my_containers_name /bin/bash

    并像普通的conda软件包一样安装软件包

    conda install --channel https://conda.anaconda.org/conda-forge folium

  • 我们可以修改Docker镜像的Dockerfile或创build一个扩展前一个镜像的新镜像。 创build一个新的Dockerfile并添加行

     FROM jupyter/minimal-notebook USER jovyan RUN conda install --quiet --yes --channel https://conda.anaconda.org/conda-forge folium && conda clean -tipsy 

    并build立我们的新形象。 如果我们想修改原来的Dockerfile,我们必须跳过第一行。

我创build我自己的Dockerfile分叉原始项目 。

感谢温暖的stream量和山珊的评论