Buscar

Actualizar un contenedor Docker sin perder los datos

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):

Actualizar un contenedor Docker sin perder los datos

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.

Actualizar un contenedor Docker sin perder los datos

O está en modo “volume”:

docker inspect linux2

Actualizar un contenedor Docker sin perder los datos

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

 

Actualizar un contenedor Docker sin perder los datos

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