Pide tu presupuesto ya!
5th August 2023
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!
Antes de sumergirse en el registro de Docker, asegúrese de contar con lo siguiente, ya que este tutorial incluye demostraciones prácticas:
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"
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.

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.

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

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

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

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

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

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 registro | Detalles |
|---|---|
| registro del sistema | Utiliza un demonio syslog que se ejecuta en la máquina host para registrar registros. |
| splunk | Recopila registros y los escribe en Fluentd. |
| awslogs | Utiliza Amazon CloudWatch para registrar mensajes de registro. |
| fluido | Envía mensajes de registro a Splunk. |
| diario | Utiliza 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

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.

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.

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

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.

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

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.

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!
Leave a comment