Ich habe eine Dockerfile, die FROM golang:1.6-alpine
ist. Ich möchte den Docker-Bilder-Cache so oft wie möglich verwenden, während ich docker build
ausführe, um die Dinge zu beschleunigen.Beschleunigen Docker bauen für Golang Vendoring
Dafür dachte ich, ich würde ADD vendor /go/src/…/mypackage/vendor
als einer der ersten Schritte hinzufügen und schließlich go install -v …/mypackage
ausführen. Dies führt jedoch dazu, dass die vendored-Pakete (die den Großteil der Build-Zeit ausmachen) nur dann erstellt werden.
Gibt es trotzdem explizit zu bauen alle vendored Pakete (d. H. Quellen in einem Dir), aber nur sie?
würde ich meine Dockerfile mag so etwas wie folgt aussehen:
FROM golang:1.6-alpine
ADD vendor /go/src/github.com/myuser/package/vendor
# missing: magic command to build only the vendored packages above
ADD *.go /go/src/github.com/myuser/package
RUN go install -v "github.com/myuser/package
Sie könnten alles installieren und die Build-Artefakte für Ihr Paket entfernen. – JimB
AFAIK 'go install' kompiliert alle Pakete und speichert sie nach' $ GOPATH/pkg'. So können Sie 'go install' in einem sauberen' $ GOPATH' ausführen und diese Dateien kopieren. Leider habe ich jetzt keine Zeit, dies zu überprüfen. – svenwltr
Sie können auch Ihr eigenes Basisimage aus den Herstellerpaketen erstellen und die Benutzerimages von diesem erweitern. Wie bereits erwähnt, können Sie in Ihrem Basisbild eine Bereinigung usw. vornehmen. Dies würde es möglich machen, später, wenn nötig, ein sauberes Build zu erstellen und trotzdem das Vendor (Base) Image wiederzuverwenden. – ldg