Ich arbeite an das Verschieben des Builds für ein C++ - Projekt in ein Docker-Image. Das Bild wird von einem Jenkins-Job erstellt und verschoben. Vor dem Docker habe ich ccache intensiv genutzt, um meine Builds auf Jenkins zu beschleunigen, besonders bei Builds, bei denen sich nur wenig geändert hat. Das Problem mit docker ist, dass der Build jetzt in einer isolierten Umgebung läuft, so dass ich nicht mehr von ccache profitieren kann. Gibt es eine Möglichkeit, innerhalb eines ephemeren Containers zu bauen, während man immer noch Ccache nutzt?Verwenden von Ccache beim Erstellen von Docker
Antwort
Sie können ccache immer noch in Verbindung mit Ihrem Build verwenden.
erstellen Data Volume Daten zu ermöglichen, zwischen Compilations zu beharren/Builds mit dem folgenden Befehl:
$ docker create -v /mnt/ccache:/ccache --name ccache debian
Dann wird Ihren Container erstellen, dass „Mounts“ der Datencontainer oben mit der Option --volumes-from
Befehlszeilen erstellt.
$ docker run -e CCACHE_DIR=/ccache --volumes-from ccache -it debian
Sie werden nun in der Schale des debian Container sein und können die erforderlichen Anwendungen und Test ccache installieren:
[email protected]:/# apt-get update && apt-get install -y gcc ccache
An diesem Punkt können Sie den Cache überprüfen, und es wird leer wie erwartet:
Das Datenvolumen bleibt erhalten, so dass der Cache auch nach dem Beenden des Containers noch vorhanden ist. Zukünftige Builds, die das Volume bereitstellen (und die Variable -e ENV angeben), verwenden den Cache.
Dann eine einfache Anwendung erstellen, ausführen und überprüfen Sie den Cache wieder:
[email protected]:/# cat > foo.c << __EOF__
int main(int argc, char **argv)
{
return 0;
}
__EOF__
[email protected]:/# PATH=/usr/lib/ccache:$PATH gcc -o foo.o -c foo.c
[email protected]:/# ccache -s
cache directory /ccache
cache hit (direct) 1
cache hit (preprocessed) 0
cache miss 1
files in cache 2
cache size 8 Kbytes
max cache size 1.0 Gbytes
Sie können den Cache sehen ist jetzt bevölkert, und baut weiter wird es wegen der Leistungsverbesserungen.
Das Datenvolumen bleibt bestehen, so dass der Cache auch nach dem Beenden des Containers noch vorhanden ist. Zukünftige Builds, die das Volume bereitstellen (und die Variable -e ENV
angeben), verwenden den Cache.
Dieser Blog-Eintrag macht einen guten Job es zu erklären:
- 1. "org.springframework.beans.factory.UnsatisfiedDependencyException: Fehler beim Erstellen von Bean" Verwenden von Docker
- 2. Verwenden von ccache mit XCode 4
- 3. Verwenden von ccache mit Android Studio 2.3
- 4. Dateibesitz beim Erstellen von Docker-Images
- 5. Docker Problem beim Erstellen von Cassandra-Cluster
- 6. Fehler beim Erstellen von Jenkins Docker Image
- 7. Wann ist ccache zu verwenden?
- 8. Fehler beim Verwenden von docker-compose down
- 9. Verwenden von Compiler-Präfix-Befehlen mit CMake (distcc, ccache)
- 10. Verwenden von Docker auf Android
- 11. Mehrere Dockerfiles Fehler beim Erstellen von Bildern in Docker-komponieren
- 12. Can not npm installieren Abhängigkeiten beim Erstellen von Docker Bild
- 13. Fehler beim Erstellen von Container mit Golack Docker Engine
- 14. npm: nicht gefunden beim Erstellen von Docker Container
- 15. IBM Bluemix Fehler beim Erstellen von Volumes über Docker-komponieren
- 16. Problem beim Erstellen von Docker-Bild mit Habitus
- 17. Docker zeigt inkonsistentes Verhalten beim Erstellen von Container aus Bild
- 18. Erstellen von Docker-Images quciker
- 19. Fehler beim Erstellen von Docker-Image beim Importieren von SQL-Dump in Postgre-Container
- 20. Fehler beim Einrichten von Docker unter Windows
- 21. docker rein von der Befehlszeile erstellen
- 22. Fehler beim Erstellen von Syntaxnet mit Dockerfile
- 23. Fehler beim Erstellen eines Docker-Image für die Ruby On Rails-Umgebung (von einer Docker-Datei)
- 24. Vermeiden Sie überflüssige Warnungen beim Kompilieren von Qt-Code mit ccache/clang
- 25. Erstellen von abhängigen Projekten mithilfe von jenkinsm maven3 und docker
- 26. Fehler beim Einrichten von docker dev env
- 27. Fehler beim Ausführen von Docker auf kubernetes
- 28. Docker Erlaubnisprobleme beim Ausführen von Volume Mapping
- 29. Verwenden von Composer mit WordPress in Docker
- 30. Verwenden von docker-compose mit GELF-Protokolltreiber
Das Problem ist, ein Bild als Ergebnis meiner Build (und ich könnte nur sein Mißverständnis), die ich will mich erstellen. Dieser Ansatz scheint ccache in einem Container zu verwenden, aber nicht mit einem Docker-Build-Befehl. –
Sie können 'ccache' in Ihre Dockerfile mit dem' RUN 'Befehl einfügen, oder verwenden Sie Docker Compose, um das Volume während' docker-compose build' einzubinden und zu benutzen. Sie können einen Container auch mithilfe von 'docker commit' in einem Image speichern. –
Ja, ich denke, die Kombination mit "docker commit" ist wahrscheinlich der beste Weg. Vielen Dank. –