Ja, du kan använda en annan basbild för ditt Go-program i Docker. Här är några alternativ och överväganden:
1. Officiell Golang-bild:
- Den officiella `golang`-bilden är en bra utgångspunkt och rekommenderas av Docker-teamet.
- Det ger den nödvändiga Go-verktygskedjan och beroenden för att bygga och köra din Go-applikation.
- Exempel: `FROM golang:1.19-alpine`
2. Alpin-baserad bild:
- `golang:alpine`-bilden är en mindre variant av den officiella `golang`-bilden, baserad på Alpine Linux-distributionen.
- Det resulterar i mindre slutliga Docker-bilder, vilket är fördelaktigt för distribution.
- Den alpina-baserade bilden kan dock ha kompatibilitetsproblem med vissa bibliotek som är beroende av glibc.
- Exempel: `FROM golang:1.19-alpine`
3. Distroless bild:
- Distroless bilder är minimala, icke-rotbaserade Docker-bilder som bara innehåller din applikation och dess körtidsberoenden.
– De är designade för att vara så små och säkra som möjligt, utan att inkludera en pakethanterare, skal eller andra onödiga komponenter.
- Exempel: `FRÅN gcr.io/distroless/base-debian11`
4. Scratch Image:
- `Scratch`-bilden är en tom basbild, vilket betyder att den inte innehåller några operativsystem, bibliotek eller andra beroenden.
– Detta resulterar i minsta möjliga Docker-bild, men det kräver att din applikation är statiskt kompilerad och inkluderar alla nödvändiga beroenden.
- Exempel: `FROM scratch`
Tänk på följande faktorer när du väljer en basbild:
- Bildstorlek: Mindre bilder är i allmänhet att föredra för snabbare distribution och minskade lagringskrav.
- Kompatibilitet: Se till att din applikation och dess beroenden är kompatibla med basbilden du väljer.
- Säkerhet: Distroless och repade bilder är säkrare eftersom de har en mindre attackyta.
- Felsökning: Bilder med ett fullständigt operativsystem (t.ex. "golang") kan vara lättare att felsöka, eftersom du kan komma åt behållarens skal och verktyg.
Valet av basbild beror i slutändan på dina specifika krav, såsom bildstorlek, säkerhet och komplexiteten i din Go-applikation. Det är vanligt att använda den officiella `golang`-bilden för utveckling och testning, och sedan byta till en mer minimal bild som `distroless` eller `scratch` för produktionsinstallationer.
Citat:[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