Sí, puedes usar una imagen base diferente para tu aplicación Go en Docker. Aquí hay algunas opciones y consideraciones:
1. Imagen oficial de Golang:
- La imagen oficial `golang` es un buen punto de partida y la recomienda el equipo de Docker.
- Proporciona la cadena de herramientas y las dependencias de Go necesarias para crear y ejecutar su aplicación Go.
- Ejemplo: `DE golang:1.19-alpine`
2. Imagen basada en los Alpes:
- La imagen `golang:alpine` es una variante más pequeña de la imagen oficial `golang`, basada en la distribución Alpine Linux.
- Da como resultado imágenes Docker finales más pequeñas, lo que resulta beneficioso para la implementación.
- Sin embargo, la imagen basada en Alpine puede tener problemas de compatibilidad con algunas bibliotecas que dependen de glibc.
- Ejemplo: `DE golang:1.19-alpine`
3. Imagen sin distribución:
- Las imágenes sin distribución son imágenes Docker mínimas, no basadas en raíz, que contienen solo su aplicación y sus dependencias de tiempo de ejecución.
- Están diseñados para ser lo más pequeños y seguros posible, sin incluir un administrador de paquetes, shell u otros componentes innecesarios.
- Ejemplo: `DESDE gcr.io/distroless/base-debian11`
4. Imagen borrador:
- La imagen `scratch` es una imagen base vacía, lo que significa que no contiene ningún sistema operativo, bibliotecas ni ninguna otra dependencia.
- Esto da como resultado la imagen de Docker más pequeña posible, pero requiere que su aplicación esté compilada estáticamente e incluya todas las dependencias necesarias.
- Ejemplo: `DESDE cero`
Al elegir una imagen base, considere los siguientes factores:
- Tamaño de imagen: generalmente se prefieren imágenes más pequeñas para una implementación más rápida y requisitos de almacenamiento reducidos.
- Compatibilidad: asegúrese de que su aplicación y sus dependencias sean compatibles con la imagen base que elija.
- Seguridad: las imágenes sin distribución y borrador son más seguras ya que tienen una superficie de ataque más pequeña.
- Depuración: las imágenes con un sistema operativo completo (por ejemplo, `golang`) pueden ser más fáciles de depurar, ya que puede acceder al shell y a las utilidades del contenedor.
La elección de la imagen base depende en última instancia de sus requisitos específicos, como el tamaño de la imagen, la seguridad y la complejidad de su aplicación Go. Es común usar la imagen oficial `golang` para desarrollo y pruebas, y luego cambiar a una imagen más mínima como `distroless` o `scratch` para implementaciones de producción.
Citas:[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