Borrar registros de contenedores de Docker

David Mbochi Njonge 12 octubre 2023
  1. Crear un nuevo proyecto
  2. Definir una imagen
  3. Construir una imagen
  4. ejecutar un contenedor
  5. Verifique los registros del contenedor
  6. Verifique los registros del contenedor en el archivo de registro
  7. Borrar registros de contenedores de Docker con el comando echo
  8. Borrar registros de contenedores de Docker con el comando truncar
  9. Borrar registros de contenedores de Docker mediante la rotación de registros
  10. Conclusión
Borrar registros de contenedores de Docker

Los registros son información registrada por la aplicación cuando ocurre un evento o estado en particular, y nos ayudan a monitorear la aplicación y tomar las acciones necesarias.

Por ejemplo, los registros nos ayudan a saber si el estado de la aplicación es activo o inactivo cuando implementamos una aplicación en producción. Cuando ocurre un error, podemos identificar el tipo de error que ocurrió usando los registros.

Con esta información, podemos realizar los cambios necesarios para corregir los errores. En una aplicación grande que usan muchas personas, puede ser un desafío administrar los registros, pero cuando usamos la ventana acoplable, podemos administrarlos fácilmente, ya que proporciona funciones que ayudan a manipular los registros.

Docker proporciona comandos como --detalles, --since, --tail, --timestamps y --hasta que podemos aprovechar para manipular los registros. De forma predeterminada, Docker guarda los registros en formato JSON en la carpeta /var/lib/docker/containers/, pero tenga en cuenta que debemos crear imágenes y ejecutar sus contenedores como el usuario raíz para que se cree el archivo que contiene los registros. .

Si esto se hace sin privilegios de usuario root, obtendremos el error File or directory not found . En este tutorial, aprenderemos los diferentes enfoques que podemos aprovechar para borrar los registros del archivo */*-json.log.

Crear un nuevo proyecto

Abra WebStorm IDEA y seleccione Archivo > Nuevo > Proyecto. En la ventana abierta, seleccione Node.js y cambie el nombre del proyecto de “sin título” a docker-logs-clear o use el nombre que prefiera.

Finalmente, presione el botón etiquetado como Crear para generar el proyecto.

Cree un archivo index.js en la carpeta docker-logs-clear y copie y pegue el siguiente código en el archivo.

console.log('This is an express application')
console.error('An error occurred')
throw new Error('An exception occurred')

Este archivo crea un mensaje STDOUT y dos mensajes STDERR que se agregarán al archivo de registro cuando ejecutemos la aplicación. Podemos cambiar este código para que sea una aplicación web, pero tenga en cuenta que solo los mensajes STDOUT y STDERR se agregarán al archivo de registro.

Definir una imagen

Cree un archivo Dockerfile en la carpeta docker-logs-clear y copie y pegue las siguientes instrucciones en el archivo.

FROM node:18-alpine
WORKDIR /com/app
ADD package*.json ./
RUN npm install
ADD . .
CMD node index.js

Aquí, FROM establece la imagen base sobre la que crear nuestra imagen personalizada siguiendo las instrucciones posteriores. En este caso, usamos alpine para usar una imagen ligera de Node como imagen base.

La documentación de Docker proporciona una referencia de Dockerfile detallada donde podemos obtener más información sobre las otras instrucciones.

Construir una imagen

Tenga en cuenta que esta etapa debe ejecutarse como usuario root. Para lograr esto, abra una nueva ventana de terminal usando el atajo de teclado en su computadora y ejecute el siguiente comando para cambiar el usuario actual al usuario raíz.

david@david-HP-ProBook-6470b:~/WebstormProjects/docker-logs-clear$ sudo su

Producción :

root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear#

Asegúrese de cambiar el directorio cd a la ubicación de su proyecto, como se muestra arriba, para poder construir la imagen. Una vez que tengamos acceso al usuario root, ejecute el siguiente comando para construir una imagen con la etiqueta docker-logs:latest.

root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear# docker build --tag docker-logs:latest .

Este comando ejecuta nuestro Dockerfile, y podemos ver las instrucciones que se ejecutan en la ventana del terminal como se muestra a continuación.

Step 1/6 : FROM node:18-alpine
18-alpine: Pulling from library/node
213ec9aee27d: Already exists
f379b689aea3: Pull complete
fe299d5780c0: Pull complete
c34a027bbf26: Pull complete
Digest: sha256:f829c27f4f7059609e650023586726a126db25aded0c401e836cb81ab63475ff
Status: Downloaded newer image for node:18-alpine
 ---> 867dce98a500
Step 2/6 : WORKDIR /com/app
 ---> Running in 3b215b9ad992
Removing intermediate container 3b215b9ad992
 ---> aba9cfa2472b
Step 3/6 : ADD package*.json ./
 ---> 6243ccacf178
Step 4/6 : RUN npm install
 ---> Running in 9b90745b171e

added 57 packages, and audited 58 packages in 9s

7 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
Removing intermediate container 9b90745b171e
 ---> e73c696d9743
Step 5/6 : ADD . .
 ---> e5235f761af0
Step 6/6 : CMD node index.js
 ---> Running in 7a857eea0a06
Removing intermediate container 7a857eea0a06
 ---> 29a367a3be2d
Successfully built 29a367a3be2d
Successfully tagged docker-logs:latest

ejecutar un contenedor

Para ejecutar un contenedor usando la imagen docker-logs, ejecute el siguiente comando que ejecuta un contenedor llamado docker-logs-prod. Tenga en cuenta que no hay puertos expuestos ya que no es una aplicación web.

root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear# docker run -d --name docker-logs-prod docker-logs:latest

Verifique los registros del contenedor

Ejecutar el contenedor ejecuta el código en nuestra aplicación. Ejecute el siguiente comando para ver los registros generados por el contenedor como resultado de los mensajes STDOUT y STDERR.

root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear# docker logs -f docker-logs-prod

Producción :

This is an express application
An error occurred
/com/app/index.js:3
throw new Error("An exception occurred")
^

Error: An exception occurred
    at Object.<anonymous> (/com/app/index.js:3:7)
    at Module._compile (node:internal/modules/cjs/loader:1149:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1203:10)
    at Module.load (node:internal/modules/cjs/loader:1027:32)
    at Module._load (node:internal/modules/cjs/loader:868:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:23:47

Node.js v18.10.0

Verifique los registros del contenedor en el archivo de registro

Para verificar que los registros anteriores se agregaron a nuestro archivo de registro, use el siguiente comando para verificar la ubicación del archivo de registro donde el contenedor guarda los registros generados.

root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear# docker inspect --format='{{.LogPath}}' docker-logs-prod

Producción :

/var/lib/docker/containers/1eb27be7b062346872869eaedfb250c526dc77437123dd18adf3dbb5e8b6b7da/1eb27be7b062346872869eaedfb250c526dc77437123dd18adf3dbb5e8b6b7da-json.log

Ahora que tenemos la ubicación donde se crea el archivo de registro, ejecute el siguiente comando para imprimir el contenido JSON del archivo de registro.

root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear# cat /var/lib/docker/containers/1eb27be7b062346872869eaedfb250c526dc77437123dd18adf3dbb5e8b6b7da/1eb27be7b062346872869eaedfb250c526dc77437123dd18adf3dbb5e8b6b7da-json.log

Producción :

{"log":"This is an express application\n","stream":"stdout","time":"2022-10-07T10:47:16.594937015Z"}
{"log":"An error occurred\n","stream":"stderr","time":"2022-10-07T10:47:16.596273395Z"}
{"log":"/com/app/index.js:3\n","stream":"stderr","time":"2022-10-07T10:47:16.617728515Z"}
{"log":"throw new Error(\"An exception occurred\")\n","stream":"stderr","time":"2022-10-07T10:47:16.61780931Z"}
{"log":"^\n","stream":"stderr","time":"2022-10-07T10:47:16.617822419Z"}
{"log":"\n","stream":"stderr","time":"2022-10-07T10:47:16.617832094Z"}
{"log":"Error: An exception occurred\n","stream":"stderr","time":"2022-10-07T10:47:16.617846368Z"}
{"log":"    at Object.\u003canonymous\u003e (/com/app/index.js:3:7)\n","stream":"stderr","time":"2022-10-07T10:47:16.617855581Z"}
{"log":"    at Module._compile (node:internal/modules/cjs/loader:1149:14)\n","stream":"stderr","time":"2022-10-07T10:47:16.617864838Z"}
{"log":"    at Module._extensions..js (node:internal/modules/cjs/loader:1203:10)\n","stream":"stderr","time":"2022-10-07T10:47:16.617882182Z"}
{"log":"    at Module.load (node:internal/modules/cjs/loader:1027:32)\n","stream":"stderr","time":"2022-10-07T10:47:16.617890043Z"}
{"log":"    at Module._load (node:internal/modules/cjs/loader:868:12)\n","stream":"stderr","time":"2022-10-07T10:47:16.617898124Z"}
{"log":"    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)\n","stream":"stderr","time":"2022-10-07T10:47:16.617906808Z"}
{"log":"    at node:internal/main/run_main_module:23:47\n","stream":"stderr","time":"2022-10-07T10:47:16.617914665Z"}
{"log":"\n","stream":"stderr","time":"2022-10-07T10:47:16.61792284Z"}
{"log":"Node.js v18.10.0\n","stream":"stderr","time":"2022-10-07T10:47:16.617930182Z"}

A partir del contenido JSON devuelto por el archivo, podemos ver todos los registros generados desde el contenedor, incluidos el flujo y la hora cuando ocurrió el evento. En la siguiente sección, aprenderemos cómo borrar los registros de este archivo.

Borrar registros de contenedores de Docker con el comando echo

Para borrar el contenido JSON del archivo de registro, ejecute el siguiente comando que usa el comando echo para sobrescribir el archivo con una cadena vacía.

root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear# echo "" > $(docker inspect --format='{{.LogPath}}' docker-logs-prod)

Para verificar que nuestro archivo de registro se haya borrado, ejecute el comando docker logs -f docker-logs-prod y tenga en cuenta que no devolverá ningún registro del archivo.

Borrar registros de contenedores de Docker con el comando truncar

Vuelva a ejecutar el contenedor anterior para generar los registros nuevamente y ejecute el siguiente comando para borrar los registros agregados al archivo de registro. Esto usa el comando truncar para reducir el tamaño del archivo a 0.

root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear# truncate -s 0 $(docker inspect --format='{{.LogPath}}' docker-logs-prod)

Para verificar que nuestro archivo de registro se haya borrado, ejecute el comando docker logs -f docker-logs-prod y tenga en cuenta que no devolverá ningún registro del archivo.

Borrar registros de contenedores de Docker mediante la rotación de registros

En los dos ejemplos anteriores, hemos utilizado los comandos echo y truncate para borrar manualmente el contenido del archivo de registro. No se recomiendan estos enfoques, ya que pueden afectar el sistema de registro de Docker y provocar un comportamiento inesperado.

La forma recomendada de borrar registros de los contenedores es utilizar la rotación de registros. Para usar la rotación de registros con el controlador de registro predeterminado archivo json, podemos configurar el tamaño máximo y el archivo máximo del archivo de registro en el archivo llamado daemon.json ubicado en /etc/docker/ carpeta, como se muestra a continuación.

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

Esto debe hacerse con privilegios de usuario root. Para que los cambios surtan efecto, debemos recargar docker usando el comando systemctl reload docker.

Si queremos especificar la rotación de registros para contenedores individuales, podemos especificar --log-driver json-file, --log-opt max-size=10m y --log-opt max-file=3 opciones al ejecutar el contenedor.

Conclusión

En este tutorial, aprendimos diferentes enfoques que podemos usar para borrar los registros de los contenedores acoplables al borrar el contenido JSON agregado a los archivos de registro. Los enfoques que hemos cubierto en este tutorial incluyen el uso del comando echo, el comando truncar y la rotación de registro.

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub