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
- version: Define la versión de la sintaxis de Docker Compose que se está utilizando. En este caso, es la versión 3.
- services: Es la clave principal bajo la cual se definen todos los servicios.
- 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.
- 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
.
Volúmenes
Los volúmenes se utilizan para persistir datos entre reinicios de contenedores.
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
.
Ejercicio Práctico
Ejercicio
Crea un archivo docker-compose.yml
que defina los siguientes servicios:
- Un servicio
web
que utilice la imagennginx:latest
y exponga el puerto 8080. - Un servicio
app
que utilice la imagennode:14
y monte el directorio actual en/usr/src/app
. - Un servicio
db
que utilice la imagenpostgres:13
y defina una variable de entornoPOSTGRES_PASSWORD
con el valormypassword
.
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.
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