Wir haben einen Jenkins CI-Server, der unseren Code von Git abruft, erstellt, ein Docker-Image erstellt und ihn dann an einige Produktionsserver versendet.
Unser Projekt ist hauptsächlich in Python geschrieben, daher beinhaltet "Erstellen" das Ausführen
pip install -r requirements.txt
Das funktioniert gut, außer es ist etwas langsam. Es muss Pakete über das Netzwerk abrufen und für einige von ihnen C-Bibliotheken erstellen (und 'lxml' ist nicht klein!).
In der Entwicklung hatte ich Erfolg pip-accel
damit, diesen Prozess zu beschleunigen. Es hat die gleiche Oberfläche wie pip
, speichert jedoch sowohl die Python-Downloads als auch den erstellten C-Code zwischen
pip-accel install -r requirements.txt
ist schnell.
Ich möchte dies für unsere Produktions-Builds tun, aber ich stoße auf einige Hindernisse.
Benötigt natürlich pip-accel
ein Verzeichnis, in dem der Cache gespeichert wird. Da unser CI-Server die Builds ausführt, ist dies der logische Ort, um ihn zu platzieren. Der pip install
Befehl wird jedoch in einem neuen Docker-Container ausgeführt, sodass nicht nur auf ein gemeinsames Verzeichnis auf diesem Server zugegriffen werden kann.
Docker- "Volumes" scheinen für die gemeinsame Nutzung von Verzeichnissen mit Containern konzipiert zu sein, aber unser Build findet (überraschend überraschend) im Inneren statt docker build
und ermöglicht nur docker run
das Anhängen von Volumes. Sie können keine Volumes mit anhängen docker build
.
Fehlt mir etwas? Wie kann ich docker build
einen Cache-Ordner außerhalb des Containers, in dem ich mich befinde, ausführen und für meinen Host freigeben?