Aprende Inteligencia Artificial y Acelera tu Futuro

Descubre cómo la IA puede multiplicar tu productividad y cambiar tu forma de trabajar.

Acceder al Curso Ahora

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!

Tutoriales Más Vistos

Posts Más Vistos