2017-10-31 5 views
1

Größe der Bilder golang und alpine variieren von rund 300Mb.Wahl Golang Docker Basisbild

Was sind die Vorteile der Verwendung von golang Bild anstelle von einfachen alpine?

+2

Wenn Sie eine [static go binary] erstellen (https://developer.atlassian.com/blog/2015/07/osx-static-golang-binaries-with-docker/?hn), können Sie [' scratch '] (https://stackoverflow.com/a/38711044/1318694) – Matt

+1

Dort gibt es auch 'golang: alpin'. –

+0

@ Зелёный Ja, es gibt 'Golang: Alpin', aber es ist ~ 200Mb mehr als Base' Alpin'. will nur wissen, was ist der Vorteil von Golang Bild – Shettyh

Antwort

2

Kurze Antwort: Es wäre fairer, die Unterschiede zwischen golang:alpine und alpine zu vergleichen.

Zum Zeitpunkt des Schreibens, das golang Bild weg von Debian, einer anderen Verteilung als Alpine gebaut. I'll quote the documentation from Docker Hub:

golang:<version>

Dies ist das De-facto-Bild. Wenn Sie sich über nicht sicher sind, was Ihre Bedürfnisse sind, möchten Sie wahrscheinlich diesen verwenden. Es ist entworfen, sowohl als Einweg-Container verwendet werden (montieren Sie Ihren Quellcode und starten Sie den Container, um Ihre App zu starten), sowie die Basis zu bauen andere Bilder aus.

und

golang:alpine

Dieses Bild basiert auf dem beliebten Alpine Linux-Projekt, im alpinen offiziellen Bild zur Verfügung. Alpine Linux ist viel kleiner als die meisten Distributions-Base-Images (~ 5MB), und führt daher zu vielen schlanker Bilder im Allgemeinen.

Diese Variante ist sehr zu empfehlen, wenn die abschließende Wesen Bildgröße als klein wie möglich gewünscht wird. Der wichtigste Vorbehalt ist, dass es Musl libc anstelle von glibc und Freunden verwendet, so dass bestimmte Software in Probleme abhängig von der Tiefe ihrer libc Anforderungen führen kann. Allerdings haben die meisten Software kein Problem damit, so dass diese Variante in der Regel eine sehr sichere Wahl ist. Sehen Sie diesen Hacker News-Kommentar Thread für weitere Diskussion der Probleme, die auftreten können und einige Pro/Contr Vergleiche mit Alpine-basierte Bilder.

Zusammengefasst sind Bilder, die aus Alpine erstellt wurden, tendenziell kleiner als die Debian-Bilder. Sie enthalten jedoch nicht verschiedene Systemtools, die Sie für die Entwicklung und das Debuggen nützlich finden könnten. Ein gemeinsamer Kompromiss ist Ihre Binärdateien mit dem golang Geschmack zu bauen und mit entweder golang:alpine, alpine, oder wie oben in einem Kommentar erwähnt, scratch die Produktion bereitstellen.

+0

Also zusammenfassend ist es besser, nur 'alpine' Image in der Produktion und' golang; alpine' für die Entwicklung und den Aufbau des Bildes zu verwenden? – Shettyh

+1

Ja, für einige Anwendungsfälle. Das wäre eine gute Faustregel, wenn es Ihnen nichts ausmacht, eine minimale Distro zu verwenden (Alpine benötigt in der Regel zusätzliche Konfiguration, damit Ihre App richtig funktioniert). – bosgood

0

Warum nicht scratch oder centurylink?

Sie können eine statische Go-Binärdatei erstellen und in das Docker-Image kopieren.

Die Größe des Docker-Images entspricht der Größe der Binärdatei.

Angenommen, Ihre Go Binärdatei Haupt genannt wird, ist dies der Dockerfile, die Sie benötigen:

FROM centurylink/ca-certs 
ADD nina/
CMD ["/main"] 

Bitte denken Sie daran, dass und Qwest sind leer Bilder kratzen deshalb müssen Sie statisch Kompilieren Sie Ihre App mit allen integrierten Bibliotheken.

Beispiel:

Here Sie können einige zusätzliche Informationen über Docker finden, gehen und scratchen und here können Sie einige Informationen über den GOOS-Wert finden.

Verwandte Themen