GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo optimizar el rendimiento de Docker

Introducción

Los contenedores Docker están diseñados para ejecutarse en cualquier lugar:en un centro de datos interno, en la nube o en un entorno híbrido y de múltiples nubes. Fuera de la caja, los contenedores Docker tienden a superar a otros métodos de virtualización, pero se pueden optimizar aún más para ofrecer un rendimiento aún mejor.

Este artículo analiza las razones detrás del rendimiento subóptimo de Docker en algunos escenarios y ofrece soluciones para aplicar a su sistema para optimizar las implementaciones de Docker.

¿Qué causa el rendimiento lento de Docker?

Docker es un sistema complejo que depende de múltiples factores, incluidas las configuraciones del host y la calidad de la red. Las siguientes son algunas de las razones más comunes por las que Docker es lento.

Recursos asignados inadecuadamente

Cuando los contenedores de Docker no tienen acceso a suficientes recursos, rápidamente experimentan problemas de rendimiento. Según el tamaño de imagen promedio de un proyecto y la cantidad de contenedores que esté ejecutando, los hosts y la red deben poder admitir la carga de trabajo.

Tamaño de la imagen acoplable

Docker usa imágenes para crear contenedores. Las imágenes consisten en el código fuente, las bibliotecas y las dependencias necesarias para que la aplicación funcione correctamente. Un contenedor Docker creado a partir de una imagen es un entorno estable para desarrollo y pruebas.

Sin embargo, las imágenes Docker difíciles de manejar consumen muchos recursos y acaparan todo el sistema. Dado que el tamaño de la imagen es un término relativo y depende de las necesidades de una aplicación en particular, esta declaración se refiere principalmente a cuán optimizada está la imagen o cuánto está llena de archivos innecesarios .

Tamaño del contexto del archivo Docker

La docker build El comando utiliza dos fuentes para crear una imagen:un Dockerfile y un contexto. Un contexto es el conjunto de archivos en una ubicación específica a la que puede hacer referencia el proceso de compilación. Si el tamaño del contexto es demasiado grande, el rendimiento del tiempo de compilación puede verse afectado.

Configuración predeterminada de Docker todavía en uso

Aunque la configuración predeterminada de Docker proporciona parámetros razonables para que Docker funcione de manera inmediata, cada sistema es específico. Opciones de inicio de daemon mal configuradas, redes y otros parámetros pueden degradar el rendimiento de Docker.

Latencia de red

A menos que cree su registro, Docker utilizará Dockerhub para obtener imágenes directamente. Mover una gran cantidad de datos a través de Internet hace que la latencia de la red se convierta en un factor en el rendimiento general de Docker.

Cómo optimizar el rendimiento de Docker

Hay varias formas de hacer que Docker funcione más rápido, desde mejoras de hardware hasta ajustes dentro de Docker.

Asignar los recursos correctamente

El rendimiento de la máquina host influye en el rendimiento de los contenedores. Una CPU lenta o una memoria RAM insuficiente pueden convertirse en un cuello de botella y ralentizar el rendimiento de Docker.

Cuando experimente un rendimiento lento de Docker, verifique su CPU, el uso de la memoria y el espacio disponible en el disco. Considere actualizar su sistema si un componente no funciona como se esperaba.

Cuando se trata de un contenedor específico que está funcionando peor de lo esperado, puede ser útil verificar las métricas específicas del contenedor.

Las docker stats El comando muestra los datos métricos importantes sobre los contenedores en ejecución. Úselo para diagnosticar posibles problemas.

docker stats

La salida del comando muestra:

  • Utilización de la CPU.
  • Uso de memoria y límite por contenedor.
  • Porcentaje de consumo de memoria.
  • NET I/O:tráfico de red de Docker.
  • BLOCK I/O:datos escritos en dispositivos de bloque host.
  • PIDS:la cantidad de subprocesos que creó un contenedor.

Optimizar imágenes de Docker

Primero, verifique el tamaño de la imagen construida usando el siguiente comando:

docker images

El resultado enumera el repositorio, la etiqueta, el ID, el tiempo transcurrido desde la creación y el tamaño de la imagen:

Verifique el Dockerfile de la imagen y asegúrese de que el contexto del archivo no sea demasiado grande. El contexto enumera los archivos que Docker necesita para construir un contenedor.

El tamaño del contexto se muestra en la salida de docker build comando:

docker build -t [image-name] .

En el siguiente ejemplo, el tamaño del contexto es 4,641 MB:

Si el contexto de compilación de la imagen es demasiado grande, cree un .dockerignore archivo en el directorio raíz del contexto y agregue los archivos innecesarios. Docker ignorará los archivos enumerados allí cuando construya la imagen.

Este es un ejemplo de un .dockerignore archivo:


temp*
*/temp*

La primera línea le dice a Docker que excluya del contexto todos los archivos y directorios cuyos nombres comiencen con temp en el directorio raíz. El segundo hace lo mismo para cualquier subdirectorio de la raíz.

Comprueba las Dependencias

Al instalar dependencias, las imágenes de Docker basadas en Debian pueden generar binarios y archivos adicionales. Algunas de estas interdependencias no son necesarias para el funcionamiento normal del contenedor y pueden eliminarse.

Para eliminar manualmente las interdependencias innecesarias, use los comandos que se enumeran a continuación.

Eliminar paquetes en /var/cache :

apt clean

Eliminar paquetes obsoletos:

apt autoclean

Eliminar las interdependencias utilizadas por los paquetes eliminados:

apt autoremove

Considere cambiar a la arquitectura de microservicios

Las aplicaciones monolíticas tienden a ser más lentas que las aplicaciones creadas con arquitectura de microservicio. Si sus contenedores Docker tienen problemas para funcionar, puede deberse al tamaño de la aplicación dentro del contenedor. Migrar la aplicación a microservicios permite dividir la carga de trabajo entre más de un contenedor.

Usar recursos dedicados

En entornos de nube, las máquinas virtuales suelen compartir recursos de hardware con otras máquinas virtuales en el mismo servidor. Sin embargo, alojar contenedores en el hardware dedicado de Bare Metal Cloud elimina la sobrecarga de virtualización y mejora el rendimiento de los contenedores. Las aplicaciones en contenedores no comparten recursos del sistema como RAM y CPU, lo que no reduce la latencia y permite que las aplicaciones utilicen completamente el hardware.

Usar un sistema operativo ligero

Los sistemas operativos completos como Windows, macOS o las distribuciones comerciales de Linux consumen una gran parte de los recursos del sistema, dejando menos de lo necesario para un rendimiento óptimo de Docker. Las distribuciones ligeras como RancherOS, CoreOS Container Linux, Alpine Linux y VMware Photon OS se han optimizado para funcionar con contenedores Docker. La creación de imágenes en un sistema liviano puede ahorrar más de 100 MB del tamaño final de la imagen, lo que mejora significativamente la velocidad.

Caché de capas de Dockerfile

Utilice el almacenamiento en caché de capas para mejorar la velocidad de creación de imágenes. Cuando Docker comienza a crear una imagen, busca en la memoria caché capas que contengan firmas similares y las utiliza en el proceso. Esta característica acelera el proceso de construcción.

Si desea especificar la imagen preexistente como fuente de caché, use --cache-from opción:

docker build --cache-from [image-to-cache-from] -t [next-build] -f [path-to-dockerfile]

Docker
  1. Cómo instalar Docker en CentOS 7

  2. Cómo instalar Docker en Raspberry Pi

  3. Cómo instalar Docker en Ubuntu 18.04 / Ubuntu 18.10 / Ubuntu 19.04

  4. Cómo instalar Docker en CentOS

  5. Cómo instalar Jenkins con Docker

Cómo instalar Docker en Ubuntu 20.04, 18.04, 21.04

Cómo instalar Docker en CentOS 7

Cómo instalar Docker en Ubuntu 14.04

Cómo eliminar contenedores Docker

Cómo detener los contenedores de Docker

Cómo instalar Docker en Mac