Buscar

Docker Compose para documentar y facilitar actualizaciones

Docker Compose es una herramienta que permite definir contenedores, volúmenes, redes y otros parámetros en un archivo YAML, lo que documenta de forma clara cómo están configurados tus servicios y facilita su mantenimiento y actualización.

¿Por qué usar Docker Compose?

Documentación clara: Todas las configuraciones (puertos, volúmenes, variables de entorno, etc.) están en un solo archivo.

Reproducibilidad: Puedes recrear (exportar) tus contenedores en cualquier sistema con el mismo archivo. Ideal para laboratorios y cursos.

Simplicidad: Actualizar un contenedor es tan sencillo como editar un archivo de texto YAML.

Ejemplo: Configuración con Docker Compose

Imaginemos que tienes un contenedor de AlmaLinux con un volumen persistente para los datos. El equivalente en Docker Compose sería:

Archivo docker-compose.yml:

services:

  linux:

    image: almalinux:latest

    container_name: linux3

    volumes:

      - mydata:/data

    ports:

      - "8080:80"

volumes:

  mydata:

 

Todo está documentado: El archivo YAML incluye:

·         La imagen utilizada.

·         Los volúmenes montados para persistencia.

*Es MUY IMPORTANTE que exista VOLUMES BindMount antes de actualizar o perderemos datos. Ver más adelante.

·         Los puertos abiertos o mapeados.

Portabilidad: Si quieres compartir el entorno con otros compañeros, usuarios o alumnos, simplemente puedes darles el archivo docker-compose.yml y se replicará tu mismo laboratorio.

Paso0: Verificación

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

Usa Docker Compose para documentar y facilitar actualizaciones

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.  

Usa Docker Compose para documentar y facilitar actualizaciones

O está en modo “volume”:

docker inspect linux2

Usa Docker Compose para documentar y facilitar actualizaciones

Significa que los datos están persistentes y no se perderán al eliminar el contenedor.

Ejemplo: Configuración con Docker Compose

Imaginemos que tienes un contenedor de AlmaLinux con un volumen persistente para los datos. El equivalente en Docker Compose sería:

Archivo docker-compose.yml (configuración correcta):

version: '3.9'

services:

  linux:

    image: almalinux:latest

    container_name: linux3

    volumes:

      - mydata:/data

    ports:

      - "8080:80"

volumes:

  mydata:

 

Ejemplos de configuraciones que podrían perder datos

Si no configuras correctamente los volúmenes, los datos generados dentro del contenedor estarán vinculados únicamente al sistema de archivos del contenedor. Esto significa que al actualizar o eliminar el contenedor, los datos se perderán.

Ejemplo1: Configuración sin volúmenes ni bind mounts

En este caso, no se ha definido un volumen o bind mount para persistir los datos:

version: '3.9'

services:

  linux:

    image: almalinux:latest

    container_name: linux3

    ports:

      - "8080:80"

 

Consecuencia: Cualquier dato almacenado dentro del contenedor (en /data o cualquier otro directorio) se perderá al eliminar o actualizar el contenedor, ya que no hay persistencia configurada.

Ejemplo2: Configuración incorrecta del volumen

Un error común es definir un volumen incorrectamente o no mapearlo al directorio donde se generan los datos.

version: '3.9'

services:

  linux:

    image: almalinux:latest

    container_name: linux3

    volumes:

      - /ruta/invalida/en/el/host:/data

    ports:

      - "8080:80"

 

  • Problema: La carpeta ruta/invalida/en/el/host en el host puede no existir o estar mal configurada.
  • Consecuencia: Docker crea una carpeta vacía temporalmente, pero los datos pueden no persistir correctamente al eliminar el contenedor.

Ejemplo3: Uso exclusivo del sistema de archivos interno

A veces, se omiten volúmenes para mantener configuraciones mínimas, confiando únicamente en el sistema de archivos interno del contenedor:

version: '3.9'

services:

  linux:

    image: almalinux:latest

    container_name: linux3

    ports:

      - "8080:80"

 

  • Consecuencia: Aunque la configuración parece funcionar, los datos generados dentro del contenedor no serán accesibles ni persistirán si este se elimina o actualiza.

Cómo evitar perder datos

  1. Siempre usa volúmenes o bind mounts: Configura correctamente los volúmenes para que los datos estén almacenados fuera del ciclo de vida del contenedor.
  2. Prueba tu configuración: Antes de realizar tareas críticas, verifica que los datos están mapeados correctamente. Puedes comprobarlo con:

docker inspect <container_name>

 

  1. Ejemplo con bind mounts:

version: '3.9'

services:

  linux:

    image: almalinux:latest

    container_name: linux3

    volumes:

      - C:\Linux3-Data:/data

    ports:

      - "8080:80"

 

Paso 1 Actualización:

Una vez asegurado que los datos son persistentes (si seguimos con dudas: Ver Persistencia de datos en contenedores Docker) podemos proceder a actualizar el contenedor, solo necesitas cambiar la versión de la imagen en el archivo:

Ejemplo de imagen de Linux forzada a Almalinux8.8:

version: '3.9'

services:

  linux:

    image: almalinux:8.8

    container_name: linux3

    volumes:

      - mydata:/data

    ports:

      - "8080:80"

volumes:

  mydata:

 

Usa Docker Compose para documentar y facilitar actualizaciones

Pasar a Almalinux 9.2

version: '3.9'

services:

  linux:

    image: almalinux:9.2

    container_name: linux3

    volumes:

      - mydata:/data

    ports:

      - "8080:80"

volumes:

  mydata:

O a la última disponible

version: '3.9'

services:

  linux:

    image: almalinux:latest

    container_name: linux3

    volumes:

      - mydata:/data

    ports:

      - "8080:80"

volumes:

  mydata:

Luego, aplicas los cambios con:

docker-compose pull

docker-compose up -d

 

Usa Docker Compose para documentar y facilitar actualizaciones

Y ya tendremos actualizado el contenedor sin perder datos.

El autor de este post es Pol Padrisa

No hay comentarios:

Publicar un comentario