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:
- Descarga la nueva versión de la imagen:
docker-compose pull
- 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:
- Accede al contenedor:
docker exec -it <container_name> bash
- 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
- 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.).
- 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