Tutorial Básico de Docker Compose

Tabla de contenidos
Introducción
Docker Compose es una herramienta que permite ejecutar múltiples contenedores de Docker definidos en un archivo YAML (docker-compose.yml
). En este tutorial, aprenderás a configurar un servidor web (Nginx) y una base de datos (MySQL) conectados en la misma red usando Docker Compose en Debian 12.
1. Configuración inicial
Instalar Docker y Docker Compose
- Verifica que Docker y Docker Compose están instalados:
docker --version docker-compose --version
- Si no puedes usar Docker sin
sudo
, añade tu usuario al grupodocker
:sudo usermod -aG docker $(whoami)
- Cierra sesión y vuelve a iniciarla para aplicar los cambios.
- Verifica que puedes ejecutar comandos Docker sin
sudo
:docker ps
2. Crear el proyecto
Crea un directorio para el proyecto:
mkdir proyecto-docker
cd proyecto-docker
Crea el archivo docker-compose.yml: Este archivo definirá los servicios que usarás. Abre el directorio con visual studio code y te podrás beneficiar de instalar las extensiones de docker
crea el fichero docker-compose.yml
Escribe el siguiente contenido:
version: '3.8'
services:
web:
image: nginx:latest
container_name: servidor_web
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- red_local
db:
image: mysql:5.7
container_name: base_datos
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: prueba
MYSQL_USER: usuario
MYSQL_PASSWORD: usuario123
ports:
- "3306:3306"
networks:
- red_local
networks:
red_local:
driver: bridge
Explicación:
web
: Configura un servidor Nginx que servirá los archivos HTML desde el directoriohtml
.db
: Configura un contenedor MySQL con credenciales y una base de datos inicial.networks
: Ambos servicios comparten una red interna llamadared_local
.
Crea el directorio para los archivos HTML:
mkdir html
Crea un archivo index.html:
nano html/index.html
Escribe lo siguiente:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Docker Compose</title>
</head>
<body>
<h1>¡Hola, Docker Compose!</h1>
</body>
</html>
3. Ejecutar los servicios
- Levanta los servicios definidos en
docker-compose.yml
:docker-compose up -d
up
: Inicia los contenedores.-d
: Los ejecuta en segundo plano.
- Verifica que los contenedores están en ejecución:
docker ps
- Prueba el servidor web:
- Abre tu navegador y accede a
http://localhost:8080
. - Deberías ver el mensaje «¡Hola, Docker Compose!».
- Abre tu navegador y accede a
- Prueba la base de datos:
- Usa un cliente MySQL o phpMyAdmin (si lo instalas) para conectarte:
mysql -h 127.0.0.1 -u usuario -p
- Usa un cliente MySQL o phpMyAdmin (si lo instalas) para conectarte:
4. Detener y limpiar los servicios
- Para detener los contenedores sin eliminarlos:
docker-compose stop
- Para eliminar los contenedores y la red:
docker-compose down
- Opcional: Limpia las imágenes y volúmenes si quieres liberar espacio:
docker system prune -f docker volume prune -f
5. Ejercicios para practicar
- Personaliza el contenido web:
- Modifica el archivo
html/index.html
y recarga el navegador para ver los cambios.
- Modifica el archivo
- Añade un nuevo servicio:
- Añade phpMyAdmin al archivo
docker-compose.yml
para gestionar la base de datos desde el navegador
- Añade phpMyAdmin al archivo
- Añade un volumen persistente:
- Modifica el servicio
db
para guardar los datos de MySQL en un volumen local
- Modifica el servicio
- Crea una red personalizada:
- Intenta configurar una red personalizada con diferentes subredes para separar servicios.
así quedaría el nuevo docker-compose
version: '3.8'
services:
web:
image: nginx:latest
container_name: servidor_web
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- red_local
db:
image: mysql:5.7
container_name: base_datos
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: prueba
MYSQL_USER: usuario
MYSQL_PASSWORD: usuario123
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
networks:
- red_local
phpmyadmin:
image: phpmyadmin:latest
container_name: gestor_phpmyadmin
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: root123
ports:
- "8081:80"
networks:
- red_local
networks:
red_local:
driver: bridge
volumes:
db_data:
Conclusión
Docker Compose simplifica la gestión de aplicaciones con múltiples contenedores. Este tutorial te brinda una base sólida para empezar a trabajar con esta herramienta en entornos reales. Practica modificando los servicios y explorando configuraciones adicionales. ¡Es el momento de experimentar!