J'ai un package python que j'ai écrit et je veux l'utiliser dans plusieurs versions de docker.
Cependant, je ne peux pas simplement installer mon package local situé en dehors du dossier Dockerfile. Et je ne veux pas copier le package dans plusieurs projets.
Alors, comment garder mon architecture SÈCHE ?
Je ne sais pas pourquoi les gens vous ont déçu, à part qu'il existe un moyen bien documenté et facile de procéder à ce sujet.
Les images Docker sont en couches, et vous pouvez créer tous vos packages d'images essentielles pour toutes dans une nouvelle image Docker de notre propre fabrication, puis étendre à partir de cela.
Par exemple, lorsque vous écrivez votre fichier Docker, votre première ligne sera
FROM someothercontainer
Ce que vous pouvez faire est ensuite de créer une nouvelle image à utiliser dans votre "FROM" dans tous les futurs conteneurs que vous écrivez, qui auront ceci intégré. L'exemple trivial est de construire un conteneur quelque chose comme
FROM ubuntu
apt-get install python
Et puis créez cette image comme my-image-with-python-installed
ou tout ce qui fonctionne.
Ensuite, dans le dernier conteneur où vous souhaitez installer votre propre contenu unique pour chaque conteneur, vous écrivez votre Dockerfile en tant que tel:
FROM my-image-with-python-installed
ADD my-local-package
...
La documentation sur la page de Docker est un peu bas car ils veulent que vous construisiez les plus petites images de base possible, mais vous pouvez les trouver ici: https://docs.docker.com/develop/develop-images/ images de base /
Votre documentation pour la commande FROM vient ici https://docs.docker.com/engine/reference/builder/#from mais vous devrez d'abord construire votre image de base, mais il y a des charges d'articles là-bas sur la façon de le faire.
Éditer:
Il est très courant d'avoir une image de base stockée dans un référentiel, surtout si le contenu ne change pas. De cette façon, vous pouvez y accéder à partir de différentes machines de génération et vous n'avez pas besoin de le reconstruire souvent, du tout, la configuration de petits référentiels locaux est très facile, et de nombreux outils de gestion d'artefacts ont également cette fonctionnalité intégrée. Si, cependant, vous créez des images à la volée mais qu'elles ont toujours une base commune, il n'est pas nécessaire de la stocker dans un référentiel - vous créez d'abord l'image de base, puis en tant que son local sur cette machine de construction, toutes les autres les images construites sur cette machine pourront y accéder.
Un joli modèle pour un Dockerfile est quelque chose comme ceci:
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y python3 python3-pip
COPY requirements.txt /tmp/base_requirements.txt
RUN python3 -m pip install -r /tmp/base_requirements.txt
COPY my_package_name/ /usr/lib/python3.6/my_package_name/
De cette façon, le package est accessible dans le chemin d'accès et peut être importé.