Pide tu presupuesto ya!

Guía de inicio para el registro de Docker

Docker es una tecnología de contenedores fenomenal, pero si tiene dificultades para realizar un seguimiento de los contenedores Docker en ejecución, el registro de Docker es imprescindible. El registro de Docker lo ayuda a analizar los registros de su contenedor para determinar cómo se ejecutan sus contenedores.

El registro es una de las cosas cruciales para hacerlo bien al crear aplicaciones en contenedores. Y en este tutorial, aprenderá sobre el registro de Docker para ayudarlo a lidiar con el comportamiento de sus contenedores.

¡Sumérjase y comience a registrar su infraestructura de contenedores a nuevas alturas!

requisitos previos

Antes de sumergirse en el registro de Docker, asegúrese de contar con lo siguiente, ya que este tutorial incluye demostraciones prácticas:

Revisión de los registros de Docker a través del registro predeterminado

Los contenedores Docker son efímeros y sin estado; son creados y destruidos. Como resultado, su estado cambia más a menudo. Estos factores hacen que el enfoque de registro de Docker sea diferente del registro típico.

Por lo general, ejecuta el registro tradicional a nivel de host. Pero con Docker, cada contenedor es un entorno aislado y el registro se realiza a nivel del contenedor. El controlador de registro de Docker captura cualquier registro que genera un contenedor como flujos de salida stdout y stderr.

Para revisar los registros de Docker, primero creará un contenedor básico de Docker de la siguiente manera:

1. Abra PowerShell como administrador y ejecute lo siguiente docker container comando para crear un contenedor básico.

Este comando extrae una imagen NGINX y crea un contenedor que emite los mensajes de registro virtuales dentro de Docker, como lo haría un contenedor típico.

docker container run -d --name nginx-container nginx /bin/bash -c "while [ true ]; do date; sleep 1; done"
Creación de un contenedor Docker

2. A continuación, ejecute lo siguiente docker ps Comando para verificar la ID asignada a su contenedor.

A cada contenedor se le asigna una ID de contenedor única. El docker logs Los comandos usan la ID única de un contenedor para acceder a los registros específicos de ese contenedor.

Copie la ID DEL CONTENEDOR de la salida, como se muestra a continuación, para su uso posterior.

Comprobación y copia del ID del contenedor Docker recién creado
Comprobación y copia del ID del contenedor Docker recién creado

3. Ejecute el docker logs Comando a continuación para acceder a su contenedor y enumerar todos los registros reemplazando CONTAINER_ID con el ID del contenedor que anotó en el paso dos.

Listado de registros de contenedores de Docker
Listado de registros de contenedores de Docker

Docker utiliza un controlador de registro de archivos JSON predeterminado para registrar registros, da formato a todos los mensajes como JSON y los escribe en un archivo de texto por contenedor.

Puede consultar los registros de su contenedor, que normalmente se encuentran en las siguientes rutas:

# Windows (Hyper-V)
%ProgramData%\Docker\containers\CONTAINER_ID\CONTAINER_ID-json.log

# Windows (WSL2)
\\wsl$\docker-desktop-data\data\docker\containers\CONTAINER_ID\CONTAINER_ID-json.log

# Linux
/var/lib/docker/containers/CONTAINER_ID/CONTAINER_ID-json.log

# macOS 
/usr/local/var/lib/docker/containers/CONTAINER_ID/CONTAINER_ID-json.log

Como alternativa, ejecute el docker inspect siguiente comando para recuperar la ubicación real del archivo de registro del contenedor en función de la CONTAINER_ID.

docker inspect --format="{{.LogPath}}" CONTAINER_ID
Acceso a la ubicación de registros de Docker
Acceso a la ubicación de registros de Docker

4. Ahora, ejecute el siguiente comando para ver más --details proporcionado a los registros.

docker logs CONTAINER_ID --details
Visualización de registros de Docker con detalles adicionales
Visualización de registros de Docker con detalles adicionales

5. Ejecute el siguiente comando para profundizar y filtrar sus registros. El --follow flag le permite verificar continuamente los registros a medida que se generan.

docker logs CONTAINER_ID --follow
Ver registros continuamente a medida que se generan
Ver registros continuamente a medida que se generan

6. A continuación, ejecute el siguiente comando para ver varias líneas (10) desde que se generó el último registro (--tail).

docker logs CONTAINER_ID --tail 10
Listado de los últimos 10 registros de contenedores de Docker
Listado de los últimos 10 registros de contenedores de Docker

7. Por último, ejecute el siguiente comando para ver los registros con sus --timestamps incluido.

docker logs CONTAINER_ID --timestamps
Listado de registros de Docker, incluidas marcas de tiempo
Listado de registros de Docker, incluidas marcas de tiempo

Configuración de controladores de registro de Docker

Hasta ahora, ha utilizado el registro predeterminado a través de la docker logs dominio. Pero dado que si el contenedor se termina o se apaga, sus registros se borrarán y no podrá acceder a ellos. En situaciones de producción, este comportamiento no es ideal.

Docker tampoco tiene restricciones de tamaño para los archivos de registro, que pueden acumularse con el tiempo y ocupar espacio de almacenamiento. La buena noticia es que, además del archivo JSON predeterminado, Docker admite controladores de registro que envían registros de contenedores a servicios de registro remotos.

Para configurar los controladores de registro de Docker, siga estos pasos:

1. Elija un controlador de registro de los más comunes a continuación:

Controlador de registroDetalles
registro del sistemaUtiliza un demonio syslog que se ejecuta en la máquina host para registrar registros.
splunkRecopila registros y los escribe en Fluentd.
awslogsUtiliza Amazon CloudWatch para registrar mensajes de registro.
fluidoEnvía mensajes de registro a Splunk.
diarioUtiliza un daemon journald que se ejecuta en la máquina host para registrar registros.

La implementación de controladores de registro varía entre las diferentes plataformas en las que desea distribuir sus registros. Pero para este tutorial, utilizará el controlador de registro de syslog.

2. A continuación, configure el controlador de registro y agregue las claves log-opt al daemon.json archivo ubicado en /etc/docker/ en Linux o C:\ProgramData\DockerDesktop\config en el servidor de Windows.

{
    "log-driver": "syslog",
    "log-opts": {
        "syslog-address": "udp://127.0.0.1:514"
    }
}

3. Por último, ejecute el docker run Comando a continuación para iniciar su contenedor Docker (nginx-container) con syslog especificado como el --log-driver.

Cuando un contenedor genera registros, el controlador de registro los captura. Luego, los registros se envían a una base de datos o servidor de registro centralizado, lo que le brinda acceso a sus registros en cualquier momento.

docker run --log-driver=syslog nginx
Inicio del contenedor Docker con syslog especificado como controlador de registro
Inicio del contenedor Docker con syslog especificado como controlador de registro

Envío de registros de Docker a AWS CloudWatch a través del controlador de registro de awslogs

Ahora comprende cómo funcionan el registro de Docker y los controladores de registro, específicamente el controlador syslog. Ahora es el momento de profundizar más y ver cómo enviar sus registros de Docker a una ubicación centralizada para almacenar registros: AWS CloudWatch.

Para enviar registros de Docker a AWS CloudWatch, debe adjuntar una política a su usuario de AWS IAM:

1. Adjunte lo siguiente JSON política a su usuario de AWS para crear una política que permita las siguientes acciones:

  • logs: CreateLogStream – Crear un nuevo flujo de registro.
  • logs:PutLogEvents – Escriba eventos de registro en un flujo de registros dentro de un grupo de registros en AWS CloudWatch.
{
"Version": "2012-10-17",
"Statement": [
    {

"Action": [

"logs:CreateLogStream",

"logs:PutLogEvents"
    ],
    "Effect": "Allow",

"Resource": "*"
    }
]
}

2. A continuación, ejecute lo siguiente aws logs Comando para crear un grupo de registro de AWS CloudWatch (create-log-group) llamado nginx-test-logs (arbitrario) en su región preferida (<aws_region>).

Un grupo de registro almacena y administra los datos de registro generados por sus flujos de Docker y organiza sus registros desde la misma fuente. Este comando no proporciona resultados, pero su grupo de registro registrará los registros de su contenedor Docker.

aws logs create-log-group --log-group-name nginx-test-logs --region <aws_region>

3. Abra su navegador web preferido e inicie sesión en Consola de administración de AWS con su usuario de IAM.

4. Ahora, navegue hasta Grupos de registros en AWS CloudWatch, y debería ver su grupo de registro recién creado, como se muestra a continuación.

Verificación del grupo de registro de AWS CloudWatch recién creado
Verificación del grupo de registro de AWS CloudWatch recién creado

5. Regrese a su terminal y ejecute el siguiente comando. Asegúrese de reemplazar <aws_region> con la misma región que su grupo de registros.

Este comando no proporciona resultados, pero crea un flujo de registro (create-log-stream) llamado nginx-log-stream (arbitrario) para su grupo de registros (nginx-test-logs).

aws logs create-log-stream --log-group-name nginx-test-logs --log-stream-name nginx-log-stream --region <aws_region>

Una vez creado, su flujo de registro se incluirá en la flujos de registro pestaña, como se muestra a continuación.

Visualización de la transmisión de AWS CloudWatch recién creada
Visualización de la transmisión de AWS CloudWatch recién creada

6. Ejecute lo siguiente docker pull comando para tirar de un nginx imagen que utilizará para generar registros.

Tirando de una imagen NGINX Docker
Tirando de una imagen NGINX Docker

7. A continuación, ejecute el siguiente comando para enumerar todos los Docker images disponible para confirmar que ha extraído con éxito la imagen NGINX.

Confirmación de la imagen de Docker recién creada
Confirmación de la imagen de Docker recién creada

8. Ejecute el siguiente comando para ejecutar un contenedor Docker con awslogs especificado como el --log-driver para garantizar que el controlador se comunique con AWS CloudWatch.

Reemplace lo siguiente en consecuencia:

  • <aws_region> – Su código de región de AWS donde creó tanto el grupo de registro como la transmisión de AWS CloudWatch.
  • <log-group> – Su grupo de registros de AWS CloudWatch.
  • <log-stream> – Su flujo de registro de AWS CloudWatch.
docker run --log-driver=awslogs --log-opt awslogs-region=<aws_region> --log-opt awslogs-group=<log-group> --log-opt awslogs-stream=<log-stream> nginx -p 8080:80
Ejecución de un contenedor Docker con awslogs especificado como controlador de registro
Ejecución de un contenedor Docker con awslogs especificado como controlador de registro

Si tiene éxito, Docker cambia el buzo de registro a CloudWatch y sus registros se reflejarán, como se muestra en la siguiente captura de pantalla de AWS CloudWatch.

Visualización de registros grabados de AWS CloudWatch
Visualización de registros grabados de AWS CloudWatch

Conclusión

En este tutorial, aprendió los conceptos básicos del registro de Docker, los controladores de registro disponibles y cómo configurarlos. También mencionó el uso de controladores de registro, como awslogs, para acceder a sus registros de Docker. Pero recuerde elegir el controlador de registro correcto según su caso de uso y los requisitos de la aplicación.

Con este nuevo conocimiento, puede administrar con confianza los registros de sus contenedores Docker de manera eficiente y sin complejidades.

¿Por qué no maximizar su experiencia con Docker y aprender a optimizar las compilaciones de imágenes con Docker BuildKit? ¡Empiece a crear imágenes para aplicaciones de forma rápida y eficaz!

Written by

Leave a comment