如何将包含所有依赖项的 python 包安装到 Docker 映像中?
How to install a python package with all the dependencies into a Docker image?
我在 Ubuntu 15.10 使用 Pyspark Docker 容器 jupyter/pyspark-notebook.我需要将 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 环境(如 documentation 中所述),但我的 /opt
文件夹中没有 conda。然后,我安装了带有所有依赖项的 miniconda3 和 folium 作为普通 Python 包(不涉及 Docker)。
没用。当我 运行 图像并尝试使用 import folium
导入包时,它没有找到 folium 包:
ImportErrorTraceback (most recent call last)
<ipython-input-1-af6e4f19ef00> in <module>()
----> 1 import folium
ImportError: No module named 'folium'
所以问题可以简化为两个问题:
- 容器的conda在哪里?
- 如何将我需要的 Python 包安装到容器中?
回答第一个问题conda环境在哪里?我们只需要在控制台执行即可$ docker my_containers_name ls /opt/conda
.
第二题有两个选项:
我们可以通过执行命令
打开容器控制台
$ docker exec -it my_containers_name /bin/bash
并像普通的 conda 包一样安装包
conda install --channel https://conda.anaconda.org/conda-forge folium
我们可以修改Docker图像的Docker文件,或者创建一个扩展前一个图像的新文件。创建一个新的 Docker 文件并添加行
FROM jupyter/minimal-notebook
USER jovyan
RUN conda install --quiet --yes --channel https://conda.anaconda.org/conda-forge folium && conda clean -tipsy
并建立我们的新形象。如果我们想修改原始 Docker 文件,我们必须跳过第一行。
我自己创建 Dockerfile by forking the original project。
感谢warmoverflow and ShanShan的评论
我在 Ubuntu 15.10 使用 Pyspark Docker 容器 jupyter/pyspark-notebook.我需要将 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 环境(如 documentation 中所述),但我的 /opt
文件夹中没有 conda。然后,我安装了带有所有依赖项的 miniconda3 和 folium 作为普通 Python 包(不涉及 Docker)。
没用。当我 运行 图像并尝试使用 import folium
导入包时,它没有找到 folium 包:
ImportErrorTraceback (most recent call last)
<ipython-input-1-af6e4f19ef00> in <module>()
----> 1 import folium
ImportError: No module named 'folium'
所以问题可以简化为两个问题:
- 容器的conda在哪里?
- 如何将我需要的 Python 包安装到容器中?
回答第一个问题conda环境在哪里?我们只需要在控制台执行即可$ docker my_containers_name ls /opt/conda
.
第二题有两个选项:
我们可以通过执行命令
打开容器控制台$ docker exec -it my_containers_name /bin/bash
并像普通的 conda 包一样安装包
conda install --channel https://conda.anaconda.org/conda-forge folium
我们可以修改Docker图像的Docker文件,或者创建一个扩展前一个图像的新文件。创建一个新的 Docker 文件并添加行
FROM jupyter/minimal-notebook USER jovyan RUN conda install --quiet --yes --channel https://conda.anaconda.org/conda-forge folium && conda clean -tipsy
并建立我们的新形象。如果我们想修改原始 Docker 文件,我们必须跳过第一行。
我自己创建 Dockerfile by forking the original project。
感谢warmoverflow and ShanShan的评论