Ja, du kan bruke et annet basisbilde for Go-applikasjonen din i Docker. Her er noen alternativer og hensyn:
1. Offisielt Golang-bilde:
- Det offisielle `golang`-bildet er et godt utgangspunkt og anbefales av Docker-teamet.
- Det gir den nødvendige Go-verktøykjeden og avhengigheter for å bygge og kjøre Go-applikasjonen din.
- Eksempel: `FROM golang:1.19-alpine`
2. Alpine-basert bilde:
- `golang:alpine`-bildet er en mindre variant av det offisielle `golang`-bildet, basert på Alpine Linux-distribusjonen.
– Det resulterer i mindre endelige Docker-bilder, noe som er fordelaktig for distribusjon.
- Det alpinbaserte bildet kan imidlertid ha kompatibilitetsproblemer med enkelte biblioteker som er avhengige av glibc.
- Eksempel: `FROM golang:1.19-alpine`
3. Distroløst bilde:
- Distroless-bilder er minimale, ikke-rotbaserte Docker-bilder som kun inneholder applikasjonen din og dens kjøretidsavhengigheter.
- De er designet for å være så små og sikre som mulig, uten å inkludere en pakkebehandler, skall eller andre unødvendige komponenter.
- Eksempel: `FRA gcr.io/distroless/base-debian11`
4. Scratch Image:
- Scratch-bildet er et tomt grunnbilde, noe som betyr at det ikke inneholder operativsystem, biblioteker eller andre avhengigheter.
– Dette resulterer i det minste mulige Docker-bildet, men det krever at applikasjonen din er statisk kompilert og inkluderer alle nødvendige avhengigheter.
- Eksempel: `FRA bunnen av`
Når du velger et basisbilde, bør du vurdere følgende faktorer:
- Bildestørrelse: Mindre bilder er generelt foretrukket for raskere distribusjon og reduserte lagringskrav.
- Kompatibilitet: Sørg for at applikasjonen din og dens avhengigheter er kompatible med basisbildet du velger.
- Sikkerhet: Distroless og ripebilder er sikrere ettersom de har en mindre angrepsoverflate.
- Feilsøking: Bilder med et fullstendig operativsystem (f.eks. "golang") kan være lettere å feilsøke, siden du får tilgang til beholderens skall og verktøy.
Valget av basisbilde avhenger til syvende og sist av dine spesifikke krav, som bildestørrelse, sikkerhet og kompleksiteten til Go-applikasjonen. Det er vanlig å bruke det offisielle `golang`-bildet for utvikling og testing, og deretter bytte til et mer minimalistisk bilde som `distroless` eller `scratch` for produksjonsdistribusjoner.
Sitater:[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