[PYTHON] Pip installe un référentiel privé lors de la construction de Docker

Exigences

Lors de la construction de Docker, Je veux pip installer une bibliothèque d'un référentiel privé tel que github ou BitBucket

conditions

La clé pour accéder au référentiel privé se trouve sous $ HOME / .ssh

Proposition 1

Créez une roue localement et copiez-la avec Dockerfile

pip wheel djando (Bien que django ne soit pas privé)

bon point

problème

Exemple 1: Mettre Django sur une roue -> Django-1.8.1-py2.py3-none-any.whl compatible python2-3, indépendant du système d'exploitation (tous) Il n'y a pas de problème dans ce cas,

Exemple 2: Obtenir MysqlClient sur la roue -> mysqlclient-1.3.10-cp27-cp27m-macosx_10_10_intel.whl CPython2.7 limite l'environnement de construction et d'exécution pour macosx10.10. Puisque Docker Container s'exécute sur le noyau Linux, il peut interférer avec son fonctionnement.

Ce serait bien de l'obtenir sous Linux et de le convertir en roue, mais cela a pris trop de temps et il est tombé.

Proposition 2

Incorporez la clé dans l'image. Le livre Docker d'O'REILLY dit "Ne le fais pas". Rejeté parce que c'est trop hostile pour la sécurité.

Proposition 2-2

Je ne veux pas que la clé reste dans l'image de façon permanente, je devrais donc copier la clé et la supprimer après l'installation de pip.

Dockerfile.


COPY id_rsa /root/.ssh/
COPY id_rsa.pub /root/.ssh/
RUN chmod 600 /root/.ssh/id_rsa && \
    chmod 600 /root/.ssh/id_rsa.pub && \
    echo "Host github.com\n\tStrictHostKeyChecking no\n" >> /root/.ssh/config
RUN pip install -r requirements.txt
RUN rm /root/.ssh/*

Comme ça. Le droit d'accès du fichier de clé doit être 600 (.ssh vaut 700). De plus, si HostKeyChecking n'est pas désactivé, une erreur se produira dans la construction. Une fois l'installation de pip terminée, supprimez toutes les informations d'identification de l'image.

Vous pouvez l'installer avec ceci

Les fichiers clés sont généralement situés sous $ HOME / .ssh localement, et les builds Docker ne peuvent accéder qu'au répertoire contenant le Dockerfile et les fichiers qu'il contient en tant que répertoire supérieur. Par conséquent, vous devez copier le fichier de clé et l'amener dans une zone accessible par la version Docker. Ce n'est pas très cool de le garder en permanence, donc je pense que c'est une bonne idée d'écrire un script de construction qui le copie et le supprime temporairement après la construction. Ce n'est pas complet avec les commandes Docker, mais cela ne peut pas être aidé ...

Proposition 3

Faites de votre mieux uniquement pour la bibliothèque du référentiel privé, transformez-la en une roue adaptée à l'environnement d'exécution de Docker et installez normalement le reste depuis Internet dans la construction.

Cela dépend du nombre de bibliothèques dans le référentiel privé, mais je me sens bien. Mais avons-nous également besoin d'un contrôle de version de roue ...

Résumé

Proposition 2-2 pour la distribution comme environnement de développement personnel, Proposition 3 pour l'opération de production ... (Non)

Recommended Posts

Pip installe un référentiel privé lors de la construction de Docker
Lorsque l'installation de pip échoue
J'ai un UnicodeDecodeError lorsque je pip installé sur ubuntu
Un mémorandum lorsqu'une erreur se produit avec pip install
Lorsque la mousse avec pip installer
Installez le référentiel github avec pip
Pip installe le référentiel GitHub
Erreur de proxy lors de l'exécution de "pip install"
Comment installer un package à l'aide d'un référentiel
Une solution de contournement lors de l'installation de pyAudio avec pip.
Créer un référentiel privé avec AWS CodeArtifact
Erreur lors de l'installation d'un module avec Python pip
Modifier le référentiel de référence par défaut pour l'installation de pip
Installation de Pipenv avec ssh à partir du référentiel Bitbucket privé
pip install Spécifiez le référentiel github comme source
Élimine l'erreur SSL lors de l'installation PIP sur Windows.
installation sudo pip
pip> link> Est-ce que `sudo pip install` est toujours une pratique non conforme? <Pourquoi ne pas ajouter sudo lors de la tuyauterie?
Création d'un environnement de travail Docker R et Python
Un mémo sur la création d'une application Django (Python) avec Docker