Actualizar contenedores Docker: ¿Usar docker-compose pull o dnf update?

Actualizar un contenedor Docker puede parecer una tarea simple, pero la forma en que lo hagas puede tener un gran impacto en la consistencia, reproducibilidad y estabilidad de tus entornos. Una pregunta común es: ¿Es mejor actualizar la imagen del contenedor con docker-compose pull o actualizar los paquetes internos usando dnf update?

En este post, exploraremos ambas opciones, sus ventajas, desventajas, y cuál es la mejor práctica en función de tus necesidades.

Opción 1: Actualizar con docker-compose pull

La actualización con docker-compose pull consiste en descargar la última versión de la imagen del contenedor y recrearlo. Esto hace que el contenedor comience desde una imagen base limpia y actualizada.

Procedimiento:

Ejemplo: Archivo docker-compose.yml:

services:

  linux:

    image: almalinux:latest

    container_name: linux3

    volumes:

      - mydata:/data

    ports:

      - "8080:80"

volumes:

  mydata:

  1. Descarga la nueva versión de la imagen:

docker-compose pull

 

  1. Recrea el contenedor con la imagen actualizada:

docker-compose up -d

 

Ventajas:

  • Entorno reproducible: Cada vez que levantas un contenedor, parte de la misma imagen base, garantizando que los cambios son consistentes entre diferentes máquinas.
  • Mejor mantenimiento: La imagen incluye no solo actualizaciones del sistema operativo, sino también ajustes de configuración y paquetes aplicados por los mantenedores de la imagen.
  • Control de versiones: Puedes especificar qué versión de la imagen utilizar (por ejemplo, almalinux:8.8) para mantener estabilidad.
  • Reversibilidad: Si algo falla, puedes volver a una versión anterior modificando el archivo docker-compose.yml.

Uso recomendado:

  • Entornos de producción, donde la estabilidad y la reproducibilidad son críticas.
  • Laboratorios educativos, para garantizar que los alumnos trabajan con el mismo entorno.

Opción 2: Actualizar con dnf update

Actualizar un contenedor con dnf update significa realizar cambios directamente dentro del contenedor, como si fuera un sistema operativo tradicional.

Procedimiento:

  1. Accede al contenedor:

docker exec -it <container_name> bash

 

  1. Actualiza el sistema operativo y los paquetes:

dnf update -y

 

Ventajas:

  • Rápido y directo: Ideal para aplicar actualizaciones puntuales sin necesidad de recrear el contenedor.
  • Flexibilidad: Permite realizar pruebas rápidas o configuraciones específicas que no están incluidas en la imagen base.

Desventajas:

  • No reproducible: Los cambios realizados dentro del contenedor no se reflejan en la imagen. Si eliminas o recreas el contenedor, perderás las actualizaciones.
  • Inconsistencia: Si otros usuarios utilizan la misma imagen, no tendrán las actualizaciones realizadas manualmente.
  • Mantenimiento complicado: Puede ser difícil rastrear o documentar los cambios realizados en el contenedor.

Uso recomendado:

  • Pruebas temporales: Si necesitas aplicar un parche o actualización rápida para validar un cambio.
  • Entornos efímeros: Si no planeas eliminar o reproducir el contenedor.

Cuándo usar cada opción

Escenario

docker-compose pull

dnf update

Actualizar el sistema completo

Mantener un entorno reproducible

Aplicar un parche temporal

Entornos de producción

Pruebas rápidas o personalizadas

Mejor práctica recomendada

  1. Para entornos de producción o persistentes:
    • Usa siempre docker-compose pull para actualizar la imagen base y recrear el contenedor.
    • Usa siempre Docker-compose.yml para documentar todos los parámetros de configuración (volúmenes, puertos, variables de entorno, etc.).
  2. Para pruebas rápidas o temporales:
    • Usa dnf update para realizar cambios inmediatos dentro del contenedor.
    • Si necesitas preservar esos cambios, crea una nueva imagen personalizada:

docker commit <container_name> <custom_image_name>

 

Ejemplo práctico para un parche temporal

Si surge un bug en OpenSSL que afecta a tu contenedor basado en AlmaLinux y aún no hay una nueva imagen publicada, puedes actualizar manualmente:

docker exec -it linux3 bash

dnf update -y openssl

exit

 

Luego, para guardar los cambios, crea una nueva imagen personalizada:

docker commit linux3 almalinux:custom-openssl-fix

 

El autor de este post es Pol Padrisa

No hay comentarios:

Publicar un comentario