Tutorial Básico de Docker Compose

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

  1. Verifica que Docker y Docker Compose están instalados: docker --version docker-compose --version
  2. Si no puedes usar Docker sin sudo, añade tu usuario al grupo docker: sudo usermod -aG docker $(whoami)
  3. Cierra sesión y vuelve a iniciarla para aplicar los cambios.
  4. 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 directorio html.
  • db: Configura un contenedor MySQL con credenciales y una base de datos inicial.
  • networks: Ambos servicios comparten una red interna llamada red_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

  1. Levanta los servicios definidos en docker-compose.yml: docker-compose up -d
    • up: Inicia los contenedores.
    • -d: Los ejecuta en segundo plano.
  2. Verifica que los contenedores están en ejecución: docker ps
  3. Prueba el servidor web:
    • Abre tu navegador y accede a http://localhost:8080.
    • Deberías ver el mensaje «¡Hola, Docker Compose!».
  4. 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

4. Detener y limpiar los servicios

  1. Para detener los contenedores sin eliminarlos: docker-compose stop
  2. Para eliminar los contenedores y la red: docker-compose down
  3. Opcional: Limpia las imágenes y volúmenes si quieres liberar espacio: docker system prune -f docker volume prune -f

5. Ejercicios para practicar

  1. Personaliza el contenido web:
    • Modifica el archivo html/index.html y recarga el navegador para ver los cambios.
  2. Añade un nuevo servicio:
    • Añade phpMyAdmin al archivo docker-compose.yml para gestionar la base de datos desde el navegador
  3. Añade un volumen persistente:
    • Modifica el servicio db para guardar los datos de MySQL en un volumen local
  4. 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!

Comentarios

No comments found.