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
- Volúmenes Anónimos: Se crean automáticamente y no tienen un nombre específico.
- Volúmenes Nombrados: Se crean con un nombre específico y pueden ser reutilizados por diferentes contenedores.
- 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
:
Listar Volúmenes
Para listar todos los volúmenes disponibles, usamos:
Inspeccionar un Volumen
Para obtener detalles sobre un volumen específico, usamos:
Usando un Volumen en un Contenedor
Podemos montar un volumen en un contenedor utilizando la opción -v
o --mount
al ejecutar un contenedor:
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.
-
Crear el Volumen:
docker volume create nginx_data
-
Ejecutar el Contenedor con el Volumen:
docker run -d --name nginx_container -v nginx_data:/usr/share/nginx/html nginx
-
Agregar un Archivo al Volumen:
echo "Hola, Docker!" > /var/lib/docker/volumes/nginx_data/_data/index.html
-
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.
-
Crear un Volumen Nombrado:
docker volume create mysql_data
-
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
-
Conectar al Contenedor y Crear una Base de Datos:
docker exec -it mysql_container mysql -uroot -proot -e "CREATE DATABASE test_db;"
-
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
-
Crear el Volumen:
docker volume create mysql_data
-
Ejecutar el Contenedor de MySQL:
docker run -d --name mysql_container -e MYSQL_ROOT_PASSWORD=root -v mysql_data:/var/lib/mysql mysql:latest
-
Crear la Base de Datos:
docker exec -it mysql_container mysql -uroot -proot -e "CREATE DATABASE test_db;"
-
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.
Docker: De Principiante a Avanzado
Módulo 1: Introducción a Docker
- ¿Qué es Docker?
- Instalando Docker
- Arquitectura de Docker
- Comandos Básicos de Docker
- Entendiendo las Imágenes de Docker
- Creando tu Primer Contenedor Docker
Módulo 2: Trabajando con Imágenes Docker
- Docker Hub y Repositorios
- Construyendo Imágenes Docker
- Conceptos Básicos de Dockerfile
- Gestionando Imágenes Docker
- Etiquetado y Publicación de Imágenes
Módulo 3: Contenedores Docker
- Ejecutando Contenedores
- Ciclo de Vida del Contenedor
- Gestionando Contenedores
- Redes en Docker
- Persistencia de Datos con Volúmenes
Módulo 4: Docker Compose
- Introducción a Docker Compose
- Definiendo Servicios en Docker Compose
- Comandos de Docker Compose
- Aplicaciones Multi-Contenedor
- Variables de Entorno en Docker Compose
Módulo 5: Conceptos Avanzados de Docker
- Profundización en Redes Docker
- Opciones de Almacenamiento Docker
- Mejores Prácticas de Seguridad en Docker
- Optimizando Imágenes Docker
- Registro y Monitoreo en Docker
Módulo 6: Docker en Producción
- CI/CD con Docker
- Orquestando Contenedores con Docker Swarm
- Introducción a Kubernetes
- Desplegando Contenedores Docker en Kubernetes
- Escalado y Balanceo de Carga