Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon ¿Puedo usar una imagen base diferente para mi aplicación Go en Docker?


¿Puedo usar una imagen base diferente para mi aplicación Go en Docker?


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