En esta sección, aprenderemos sobre la persistencia de datos en Docker utilizando volúmenes. La persistencia de datos es crucial para mantener la integridad de la información almacenada en los contenedores, especialmente cuando los contenedores se detienen o se eliminan.

¿Qué es un Volumen en Docker?

Un volumen en Docker es una forma de almacenar datos fuera del sistema de archivos del contenedor. Los volúmenes permiten que los datos persistan incluso si el contenedor se elimina. Los volúmenes son gestionados por Docker y pueden ser compartidos entre múltiples contenedores.

Tipos de Volúmenes

  1. Volúmenes Anónimos: Se crean automáticamente y no tienen un nombre específico.
  2. Volúmenes Nombrados: Se crean con un nombre específico y pueden ser reutilizados por diferentes contenedores.
  3. Bind Mounts: Montan un directorio específico del host en el contenedor.

Creando y Usando Volúmenes

Creación de un Volumen Nombrado

Para crear un volumen nombrado, utilizamos el comando docker volume create:

docker volume create mi_volumen

Listar Volúmenes

Para listar todos los volúmenes disponibles, usamos:

docker volume ls

Inspeccionar un Volumen

Para obtener detalles sobre un volumen específico, usamos:

docker volume inspect mi_volumen

Usando un Volumen en un Contenedor

Podemos montar un volumen en un contenedor utilizando la opción -v o --mount al ejecutar un contenedor:

docker run -d --name mi_contenedor -v mi_volumen:/app/data nginx

En este ejemplo, el volumen mi_volumen se monta en el directorio /app/data dentro del contenedor.

Ejemplo Práctico

Vamos a crear un contenedor de Nginx que utiliza un volumen para almacenar datos persistentes.

  1. Crear el Volumen:

    docker volume create nginx_data
    
  2. Ejecutar el Contenedor con el Volumen:

    docker run -d --name nginx_container -v nginx_data:/usr/share/nginx/html nginx
    
  3. Agregar un Archivo al Volumen:

    echo "Hola, Docker!" > /var/lib/docker/volumes/nginx_data/_data/index.html
    
  4. Verificar el Contenido en el Contenedor:

    docker exec -it nginx_container cat /usr/share/nginx/html/index.html
    

Ejercicio Práctico

Objetivo: Crear un contenedor de MySQL que utilice un volumen para almacenar datos persistentes.

  1. Crear un Volumen Nombrado:

    docker volume create mysql_data
    
  2. Ejecutar un Contenedor de MySQL con el Volumen:

    docker run -d --name mysql_container -e MYSQL_ROOT_PASSWORD=root -v mysql_data:/var/lib/mysql mysql:latest
    
  3. Conectar al Contenedor y Crear una Base de Datos:

    docker exec -it mysql_container mysql -uroot -proot -e "CREATE DATABASE test_db;"
    
  4. Eliminar el Contenedor y Verificar la Persistencia:

    docker rm -f mysql_container
    docker run -d --name mysql_container -e MYSQL_ROOT_PASSWORD=root -v mysql_data:/var/lib/mysql mysql:latest
    docker exec -it mysql_container mysql -uroot -proot -e "SHOW DATABASES;"
    

Solución del Ejercicio

  1. Crear el Volumen:

    docker volume create mysql_data
    
  2. Ejecutar el Contenedor de MySQL:

    docker run -d --name mysql_container -e MYSQL_ROOT_PASSWORD=root -v mysql_data:/var/lib/mysql mysql:latest
    
  3. Crear la Base de Datos:

    docker exec -it mysql_container mysql -uroot -proot -e "CREATE DATABASE test_db;"
    
  4. Eliminar y Reiniciar el Contenedor:

    docker rm -f mysql_container
    docker run -d --name mysql_container -e MYSQL_ROOT_PASSWORD=root -v mysql_data:/var/lib/mysql mysql:latest
    docker exec -it mysql_container mysql -uroot -proot -e "SHOW DATABASES;"
    

    La base de datos test_db debería aparecer en la lista de bases de datos, demostrando que los datos se han persistido correctamente.

Conclusión

En esta sección, hemos aprendido sobre la persistencia de datos en Docker utilizando volúmenes. Hemos visto cómo crear y gestionar volúmenes, y cómo utilizarlos en contenedores para asegurar que los datos persistan incluso si los contenedores se eliminan. La persistencia de datos es una habilidad esencial para cualquier desarrollador que trabaje con Docker, ya que garantiza la integridad y disponibilidad de los datos a lo largo del ciclo de vida de los contenedores.

En la próxima sección, exploraremos más sobre Docker Compose y cómo definir servicios en aplicaciones multi-contenedor.

© Copyright 2024. Todos los derechos reservados