En esta sección, aprenderemos cómo definir y configurar servicios en Docker Compose. Docker Compose es una herramienta poderosa que permite definir y ejecutar aplicaciones multi-contenedor. Utiliza un archivo YAML para configurar los servicios de la aplicación, las redes y los volúmenes.

¿Qué es un Servicio en Docker Compose?

Un servicio en Docker Compose es una definición de un contenedor que se ejecutará como parte de una aplicación. Cada servicio puede tener su propia configuración, como la imagen de Docker a utilizar, los puertos a exponer, las variables de entorno, los volúmenes, entre otros.

Estructura Básica de un Archivo docker-compose.yml

El archivo docker-compose.yml es donde se definen los servicios. Aquí hay un ejemplo básico de un archivo docker-compose.yml:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example

Explicación del Ejemplo

  1. version: Define la versión de la sintaxis de Docker Compose que se está utilizando. En este caso, es la versión 3.
  2. services: Es la clave principal bajo la cual se definen todos los servicios.
  3. web: Es el nombre del primer servicio. En este caso, es un servidor web utilizando la imagen nginx:latest.
    • image: Especifica la imagen de Docker a utilizar.
    • ports: Mapea el puerto 80 del contenedor al puerto 80 del host.
  4. db: Es el nombre del segundo servicio. En este caso, es una base de datos MySQL utilizando la imagen mysql:5.7.
    • environment: Define variables de entorno para el contenedor. Aquí se establece la contraseña de root de MySQL.

Definiendo Servicios con Más Detalle

Vamos a profundizar en algunas configuraciones adicionales que se pueden utilizar al definir servicios en Docker Compose.

Variables de Entorno

Las variables de entorno se pueden definir directamente en el archivo docker-compose.yml o en un archivo separado .env.

services:
  app:
    image: myapp:latest
    environment:
      - APP_ENV=production
      - APP_DEBUG=false

Volúmenes

Los volúmenes se utilizan para persistir datos entre reinicios de contenedores.

services:
  db:
    image: postgres:latest
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  db-data:

Redes

Docker Compose permite definir redes personalizadas para que los servicios puedan comunicarse entre sí.

services:
  web:
    image: nginx:latest
    networks:
      - frontend
  db:
    image: mysql:5.7
    networks:
      - backend

networks:
  frontend:
  backend:

Dependencias entre Servicios

Puedes definir dependencias entre servicios utilizando la clave depends_on.

services:
  web:
    image: nginx:latest
    depends_on:
      - db
  db:
    image: mysql:5.7

Ejercicio Práctico

Ejercicio

Crea un archivo docker-compose.yml que defina los siguientes servicios:

  1. Un servicio web que utilice la imagen nginx:latest y exponga el puerto 8080.
  2. Un servicio app que utilice la imagen node:14 y monte el directorio actual en /usr/src/app.
  3. Un servicio db que utilice la imagen postgres:13 y defina una variable de entorno POSTGRES_PASSWORD con el valor mypassword.

Solución

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
  app:
    image: node:14
    volumes:
      - .:/usr/src/app
  db:
    image: postgres:13
    environment:
      - POSTGRES_PASSWORD=mypassword

Resumen

En esta sección, hemos aprendido cómo definir servicios en Docker Compose utilizando el archivo docker-compose.yml. Hemos cubierto la estructura básica del archivo, cómo definir variables de entorno, volúmenes, redes y dependencias entre servicios. Con esta base, puedes comenzar a crear configuraciones más complejas y adaptadas a tus necesidades.

En la próxima sección, exploraremos los comandos de Docker Compose y cómo utilizarlos para gestionar tus aplicaciones multi-contenedor.

© Copyright 2024. Todos los derechos reservados