Как установить пакет python со всеми зависимостями в образ Docker?

Я работаю в Ubuntu 15.10 с контейнером Docker для Pyspark jupyter / pyspark-ноутбук. Мне нужно установить Фолиум со всеми его зависимостями и запустить скрипт 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)

Я искал среду conda в /opt/conda (как сказано в документация) но в моем . Затем я установил miniconda3 и folium со всеми зависимостями как обычный пакет Python (без Docker).

это не работает. Когда я запускаю изображение и пытаюсь импортировать пакет с import folium он не находит пакет Фолиум:

ImportErrorTraceback (most recent call last)
<ipython-input-1-af6e4f19ef00> in <module>()
----> 1 import folium

ImportError: No module named 'folium'

так что проблема может быть сведена к двум вопросам:

  1. где контейнер стадион conda?
  2. как я могу установить пакет Python, который мне нужен, в контейнер?

1 ответов


чтобы ответить на первый вопрос где находится среда 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

  • мы можем изменить файл Dockerfile образа Docker или создать новый расширяет предыдущий. Чтобы создать новый Dockerfile и добавить строки

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

    и построить наш новый образ. Если мы хотим изменить исходный файл Dockerfile, мы должны пропустить первую строку.

Я создаю свою Dockerfile, порождая оригинальный проект.

спасибо warmoverflow и Шаньшань для ваших комментариев