web-dev-qa-db-fra.com

Comment installer un package python avec toutes les dépendances dans une image Docker?

Je travaille dans Ubuntu 15.10 avec le conteneur Docker pour Pyspark jupyter/pyspark-notebook . J'ai besoin d'installer folium avec toutes ses dépendances et d'exécuter un script Pyspark dans le conteneur. J'ai réussi à installer Docker, à extraire l'image et à l'exécuter avec la commande

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

Ensuite, j'exécute l'exemple de code sans aucun problème

import pyspark
sc = pyspark.SparkContext('local[*]')

# do something to prove it works
rdd = sc.parallelize(range(1000))
rdd.takeSample(False, 5)

J'ai cherché l'environnement conda dans /opt/conda (comme il est dit dans le documentation ) mais il n'y a pas de conda dans mon /opt dossier. Ensuite, j'ai installé miniconda3 et folium avec toutes les dépendances comme un Python normal (pas Docker impliqué).

Ça ne marche pas. Lorsque j'exécute l'image et essaie d'importer le package avec import folium il ne trouve pas le paquet folium:

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

ImportError: No module named 'folium'

Le problème peut donc être réduit à deux questions:

  1. Où est le conteneur conda?
  2. Comment puis-je installer le package Python dont j'ai besoin dans le conteneur?
13
jocerfranquiz

Pour répondre à la première question Où est l'environnement conda? il suffit d'exécuter dans la console $ docker my_containers_name ls /opt/conda.

La deuxième question a deux options:

  • Nous pouvons ouvrir la console des conteneurs en exécutant la commande

    $ docker exec -it my_containers_name /bin/bash

    et installez le package comme un package conda normal

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

  • Nous pouvons modifier le Dockerfile de l'image Docker ou en créer un nouveau en prolongeant la précédente. Pour créer un nouveau Dockerfile et ajouter les lignes

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

    Et construisons notre nouvelle image. Si nous voulons modifier le Dockerfile d'origine, nous devons sauter la première ligne.

Je crée mon propre Dockerfile en forçant le projet d'origine .

Merci warmoverflow et ShanShan pour vos commentaires

9
jocerfranquiz