Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

291
Vistas
Reducción ficticia después de la compilación de Docker

Usando compilaciones de varias etapas, quiero reducir el tamaño de una imagen al final de Dockerfile, algo como esto:

 FROM ubuntu AS ubuntu_build RUN # do a lot of build things FROM alpine COPY --from=ubuntu_build /app /app ENTRYPOINT whatever

la imagen alpina es pequeña y, en teoría, solo se copiarán las cosas de /app de la imagen de ubuntu, ¿es este el mejor truco del libro o hay alguna otra forma de minimizar el tamaño de la imagen final?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

sin distribución

Google proporciona instrucciones y herramientas para ayudar a crear imágenes sin distribución .

Las imágenes "Distroless" contienen solo su aplicación y sus dependencias de tiempo de ejecución. No contienen administradores de paquetes, shells ni ningún otro programa que esperaría encontrar en una distribución estándar de Linux.

¿Por qué debo usar imágenes sin distribución?

Restringir lo que hay en su contenedor de tiempo de ejecución a exactamente lo que es necesario para su aplicación es una práctica recomendada empleada por Google y otros gigantes tecnológicos que han usado contenedores en producción durante muchos años. Mejora la relación señal-ruido de los escáneres (por ejemplo, CVE) y reduce la carga de establecer la procedencia de lo que necesita.

Si su aplicación es un binario compilado, entonces podría salirse con la suya con un solo binario más las bibliotecas compartidas con las que se vincula. Si limita las bibliotecas con las que se vincula, es posible que solo necesite un par. Aquí, por ejemplo, está contra lo que un programa C mínimo compilado con enlaces gcc en mi máquina:

 $ ldd basic-program linux-vdso.so.1 (0x00007fffd3fa2000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2e4611b000) /lib64/ld-linux-x86-64.so.2 (0x00007f2e4670e000)

Diablos, incluso podría vincular estáticamente todo el programa y no tener dependencias en absoluto.

Google proporciona un conjunto de imágenes base dirigidas a diferentes idiomas:

  • gcr.io/distroless/static (Ir, Rust, D)
  • gcr.io/distroless/base (C, C++)
  • gcr.io/distroless/java (Java)
  • gcr.io/distroless/cc (Rust, D)

Solo tienen algunos archivos esenciales, mucho menos de lo que incluso una distribución mínima como alpine obtiene, ya que todavía tiene el administrador de paquetes apk , las utilidades del espacio de usuario, etc. Los usa de la misma manera que describe en su pregunta: como el último etapa en una construcción de varias etapas.

 FROM gcr.io/distroless/base COPY --from=build /go/bin/app / CMD ["/app"]

DESDE cero

También puede seguir la ruta completa de los alimentos crudos que viven en el bosque y construir su imagen final FROM scratch . No hay nada más puro que eso. No hay absolutamente nada que no hayas puesto tú mismo. Esta es la ruta que eligió traefik , por ejemplo.

 FROM scratch COPY certs/ca-certificates.crt /etc/ssl/certs/ COPY traefik / EXPOSE 80 VOLUME ["/tmp"] ENTRYPOINT ["/traefik"]
over 4 years ago · Santiago Trujillo Denunciar

0

Además de usar multi-stage , otra forma típica es usar docker-slim para reducir el tamaño de la imagen final construida, como a continuación:

 docker-slim build --http-probe your-name/your-app

El detalle se refiere a esta guía

Agregue otros extractos de pensamientos comunes de "Cinco formas de adelgazar sus imágenes de Docker" en caso de que lo necesite:

  • Piense cuidadosamente en las necesidades de su aplicación
    • Simplemente instale lo que realmente necesita en dockerfile.
  • Use una imagen base pequeña
    • Podría usar Alpine Linux o incluso directamente desde cero, vea cómo crear el contenedor acoplable más pequeño posible
  • Use la menor cantidad de capas posible
    • Combinar correr juntos, más correr más capas, más capas más tamaño
  • Usar archivos .dockerignore
    • Esto evita copiar todas las cosas a las imágenes si usa COPY . / , más, si no usa .gitignore , debe evitar usar COPY . / que puede copiar algunas cosas necesarias a la imagen.
  • Imágenes de Squash Docker
    • La idea aquí es que después de crear su imagen, la aplane tanto como sea posible, utilizando una herramienta como docker-squash .
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda