Ja, du kan bruge et andet basisbillede til din Go-applikation i Docker. Her er nogle muligheder og overvejelser:
1. Officielt Golang-billede:
- Det officielle `golang`-billede er et godt udgangspunkt og anbefales af Docker-teamet.
- Det giver den nødvendige Go-værktøjskæde og afhængigheder til at bygge og køre din Go-applikation.
- Eksempel: `FROM golang:1.19-alpine`
2. Alpine-baseret billede:
- `golang:alpine`-billedet er en mindre variant af det officielle `golang`-billede, baseret på Alpine Linux-distributionen.
- Det resulterer i mindre endelige Docker-billeder, hvilket er gavnligt for implementeringen.
- Det alpine-baserede billede kan dog have kompatibilitetsproblemer med nogle biblioteker, der er afhængige af glibc.
- Eksempel: `FROM golang:1.19-alpine`
3. Distroløst billede:
- Distroless billeder er minimale, ikke-rodbaserede Docker-billeder, der kun indeholder din applikation og dens runtime-afhængigheder.
- De er designet til at være så små og sikre som muligt, uden at inkludere en pakkehåndtering, shell eller andre unødvendige komponenter.
- Eksempel: `FRA gcr.io/distroless/base-debian11`
4. Krat billede:
- `Scratch`-billedet er et tomt basisbillede, hvilket betyder, at det ikke indeholder noget operativsystem, biblioteker eller andre afhængigheder.
- Dette resulterer i det mindst mulige Docker-billede, men det kræver, at din applikation er statisk kompileret og inkluderer alle nødvendige afhængigheder.
- Eksempel: `FRA bunden`
Når du vælger et basisbillede, skal du overveje følgende faktorer:
- Billedstørrelse: Mindre billeder foretrækkes generelt for hurtigere implementering og reducerede lagerkrav.
- Kompatibilitet: Sørg for, at din applikation og dens afhængigheder er kompatible med det basisbillede, du vælger.
- Sikkerhed: Distroless og ridsebilleder er mere sikre, da de har en mindre angrebsoverflade.
- Fejlretning: Billeder med et fuldt operativsystem (f.eks. "golang") kan være lettere at fejlfinde, da du kan få adgang til containerens shell og hjælpeprogrammer.
Valget af basisbillede afhænger i sidste ende af dine specifikke krav, såsom billedstørrelse, sikkerhed og kompleksiteten af din Go-applikation. Det er almindeligt at bruge det officielle `golang`-billede til udvikling og test, og derefter skifte til et mere minimalt billede som `distroless` eller `scratch` til produktionsinstallationer.
Citater:[1] https://stackoverflow.com/questions/47028597/choosing-golang-docker-base-image
[2] https://hub.docker.com/_/golang
[3] https://snyk.io/blog/containerizing-go-applications-with-docker/
[4] https://docs.docker.com/language/golang/build-images/
[5] https://dev.to/chseki/build-a-super-minimalistic-docker-image-to-run-your-golang-app-33j0