Uno de los grandes miedos al usar Docker es la pérdida de los datos que están dentro del contenedor, si no gestionamos correctamente los datos, podríamos perder información importante. En este post veremos cómo actualizar un contenedor sin perder datos.
NOTA: Lo ideal es trabajar con archivos .yml que documenten la configuración de los contenedores (como los generados por Docker Compose), explicaremos este procedimiento manual para poder realizar una actualización de forma segura en las situaciones que no dispongamos de .yml.
¿Qué ocurre al actualizar un contenedor?
Docker está diseñado para que los contenedores sean efímeros. Esto significa que:
- Si eliminas un contenedor, todos los datos almacenados en su sistema de archivos interno se pierden.
- Sin embargo, si los datos se almacenan en volúmenes
o bind mounts, permanecen intactos fuera del ciclo de vida del
contenedor. (Ver post: Persistencia de datos en contenedores Docker)
La clave para actualizar contenedores sin perder datos está en usar estas estrategias de persistencia.
Pasos para actualizar un contenedor sin perder datos
1. Verifica si los datos están persistentes
Antes de proceder, verifica si el contenedor utiliza volúmenes o bind mounts. Esto nos asegurará que los datos están almacenados fuera del contenedor:
docker inspect <container_name>
docker inspect linux1
Si “Mounts” aparece [] (vacío):
Si “Mounts” aparece vacío significa que perderemos todos los datos al eliminar el contenedor.
NO ACTUALICES O
PERDERÁS DATOS.
Por ejemplo si està en modo “bind”:
docker inspect linux3
Busca la sección Mounts en el resultado.
O está en modo “volume”:
docker inspect linux2
Significa que los datos están persistentes y no se perderán al eliminar el contenedor.
Se es así continúa con los siguientes pasos.
2. Detén y elimina el contenedor antiguo
Detén y elimina el contenedor existente. Esto no afectará a los datos si están configurados en un volumen o bind mount.
Detén el contenedor:
docker stop <container_name>
Ejemplo:
docker stop linux3
Elimina el contenedor:
docker rm <container_name>
Ejemplo:
docker rm linux3
3. Descarga la nueva versión de la imagen
Actualiza la imagen que utilizará el contenedor. Por ejemplo, para actualizar a la última versión de AlmaLinux:
docker pull almalinux:latest
Este comando descarga la versión más reciente de la imagen desde el repositorio.
4. Crea un nuevo contenedor reutilizando los datos
Crea un nuevo contenedor basado en la imagen actualizada. No te olvides de montar el volumen o bind mount que contiene los datos persistentes.
- Si usas un volumen:
docker run -d --name linux3U1 -v mydata:/data almalinux:latest
- Si usas un bind mount:
docker run -d --name linux3U1 -v C:\Linux3-Data:/data almalinux:latest
Usando nuestro laboratorio de los últimos posts:
docker run -d --name linux3 -v C:\\Linux3-Data:/data --net labnet --ip 192.168.100.103 -h linux3 -it almalinux
Este paso conecta el nuevo contenedor con los datos del volumen o bind mount, asegurando que los datos estén disponibles.
5. Verifica que los datos persisten
Para confirmar que los datos están intactos, accede al nuevo contenedor y revisa el directorio donde se montaron los datos:
docker exec -it linux3 ls /data
Deberías ver los datos que estaban disponibles en el contenedor anterior.
Casos especiales: Configuraciones y puertos
Si el contenedor anterior tenía configuraciones específicas (como variables de entorno o puertos expuestos), asegúrate de incluirlas al crear el nuevo contenedor. Puedes inspeccionar la configuración del contenedor anterior con:
docker inspect <old_container_name>
Y replicar las mismas opciones al crear el nuevo contenedor.
El autor de este post es Pol Padrisa
No hay comentarios:
Publicar un comentario