Docker smaller Images in diesem Blogbeitrag der J&J Ideenschmiede

von

Kleinere Docker Images erstellen, aber wie?


Das haben wir uns in den letzten Wochen auch immer mal wieder gefragt und eine ganze Weile verschiedenste Wege ausprobiert, bis wir für uns eine sehr gute Lösung gefunden haben.

Schauen wir uns dies einmal an einem einfachen Beispiel an. Hierbei handelt es sich um eine einfache Software die in Go geschrieben wurde. Diese soll nun über zum Docker Hub hochgeladen werden. Dabei nehmen wir uns nun einmal das Projekt echGo als Vorlage.

Schauen wir uns erst einmal das Dockerfile an:

FROM golang:latest
ADD VERSION .
COPY . /go/src/app
WORKDIR /go/src/app
RUN go get ./
RUN go build -o app
CMD ./app

Bauen wir nun das Docker Image für den Container und laden dieses auf Docker Hub hoch, dann werden wir merken, dass die komprimierte Größe bereits 343,18 MB erreicht hat. Dies sind ca 900 MB, wenn man das Image heruntergeladen hat.

Da die Software an sich schon nicht so groß ist, muss es an dem geladenen Docker Image liegen. Wir haben das golang:latest genutzt.

Nun schauen wir uns einmal das überarbeitete Dockerfile an:

FROM golang:alpine AS build
RUN apk --no-cache add git
COPY . /tmp/go/src/app
WORKDIR /tmp/go/src/app
RUN go get ./
RUN go build -o echgo
FROM alpine:latest AS scratch
COPY --from=build /tmp/go/src/app /go/src/app
WORKDIR /go/src/app
CMD ["./echgo"]

Hier sehen wir, dass wir nun das golang:alpine für das Bauen der Software nutzen und danach das ganze mit dem alpine:latest Image betreiben werden.

Die beiden Images sind relativ klein, da sie nur den „nötigsten Inhalt“ mitbringen. Da wir nun auch erst das Image mit einem größeren Image bauen und danach mit einem kleineren Image betreiben, ist das finale Image für den Docker Container nur noch 7,4 MB groß. Dies ist die komprimierte form im Docker Hub.

Da die hier genutzten Images nicht immer für alle Zwecke ausreichen, kann es sein, dass Sie einige Pakete für das bauen oder das betreiben des Containers nachinstallierten müssen.

Dies könnten Sie wie folgt machen:

FROM golang:alpine AS build
RUN apk --no-cache add git build-base
...

Nun können Sie deutlich kleinere Docker Images für Ihre Container erstellen!

Wir hoffen, dass wir Ihnen mit diesem kleinen Tutorial weiterhelfen konnten. Bei Fragen schreiben Sie und gerne an info@jj-ideenschmiede.de.

Pfeil links

zur vorherigen Seite zurückkehren