Ir al contenido

Conceptos 03 - Buenas prácticas iniciales con Docker Compose

Recomendaciones fundamentales para estructurar proyectos de Compose de forma mantenible y reproducible. Recorra cada práctica para ver un ejemplo concreto.

  • 8 prácticas
  • 3 elementos interactivos
  • Autoevaluación final

Concepto 1 de 8

Un servicio, una responsabilidad

Cada servicio debe encapsular una función claramente definida dentro de la aplicación. No resulta recomendable agrupar, por ejemplo, la base de datos y la aplicación web en un mismo contenedor.

# Un solo contenedor con todo
services:
app:
build: .
# Dentro: nginx + node + postgres

services:
web:
image: nginx:alpine
api:
build: ./api
db:
image: postgres:16

Concepto 2 de 8

Nombres de servicio descriptivos

Utilice nombres que reflejen la función del componente, como db, web, cache o worker. Evite nombres genéricos que no aporten significado técnico.

services:
service1:
image: postgres:16
app1:
build: .

services:
db:
image: postgres:16
web:
build: .

Concepto 3 de 8

Externalice la configuración

Mantenga parámetros de configuración, credenciales y valores dependientes del entorno fuera del código fuente y fuera de los valores fijados directamente en compose.yml.

services:
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: s3cret_password

compose.yml
services:
db:
image: postgres:16
env_file:
- .env
# .env
POSTGRES_PASSWORD=${DB_PASSWORD}

Concepto 4 de 8

No incorpore credenciales al repositorio

El archivo .env y cualquier otro archivo que contenga información sensible deben excluirse del control de versiones mediante .gitignore.

.gitignore
.env
.env.*
secrets/
# .env.example (sí se versiona, como plantilla)
POSTGRES_USER=your_user
POSTGRES_PASSWORD=your_password
POSTGRES_DB=your_database

Active o desactive las líneas del .gitignore y observe qué archivos quedan en el repositorio. Fíjese en .env.example: el patrón .env.* también lo ignora, así que hace falta la excepción !.env.example para versionar la plantilla.

.gitignore

Active o desactive cada línea. Si varias coinciden, gana la última.

Archivos del proyecto

  • compose.yml
  • Dockerfile
  • .env
  • .env.example
  • .env.production
  • secrets/db_password.txt
  • README.md

Concepto 5 de 8

Utilice volúmenes para servicios con estado

Todo servicio que requiera persistencia, como bases de datos o almacenamiento de archivos, debe apoyarse en volúmenes para desacoplar los datos del ciclo de vida del contenedor.

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

Compare qué ocurre con los datos al eliminar y volver a crear el contenedor, con y sin volumen nombrado.

Contenedor proyecto-app-1

Capa escribible:

Volumen proyecto_datos

Contenido:

Guarde algunos registros y luego elimine y vuelva a crear el contenedor.

Concepto 6 de 8

No confunda Compose con una plataforma de orquestación

Docker Compose es útil en desarrollo, pruebas locales y escenarios controlados de despliegue. Para arquitecturas con requisitos de escalabilidad o alta disponibilidad, existen soluciones más adecuadas.

Marque los requisitos de un escenario para ver si Compose es suficiente o si conviene una plataforma de orquestación.

Requisitos del escenario

Marque uno o más requisitos.

Concepto 7 de 8

Documente la operación básica del proyecto

Incluya en el README los comandos mínimos para construir, iniciar, detener, inspeccionar y depurar la aplicación.

Ventana de terminal
# README.md — sección de operación
## Inicio rápido
1. Copie `.env.example` a `.env` y configure las variables
2. Construya e inicie los servicios:
docker compose up --build -d
3. Verifique el estado:
docker compose ps
4. Consulte los logs:
docker compose logs -f web
5. Detenga el proyecto:
docker compose down

Concepto 8 de 8

Mantenga compose.yml bajo control de versiones

El archivo de Compose forma parte de la definición operativa de la aplicación y debe tratarse con el mismo rigor que el código fuente.

# Estructura típica del repositorio
proyecto/
├── compose.yml # Versionado
├── Dockerfile # Versionado
├── .env.example # Versionado (plantilla)
├── .env # Ignorado (.gitignore)
├── .gitignore
├── README.md
└── src/

Autoevaluación

Comprueba lo que aprendiste

Cinco preguntas rápidas para verificar las ideas clave de la lectura. Cada respuesta incluye una explicación.

  1. 1¿Por qué no conviene ejecutar la aplicación web y la base de datos en un mismo contenedor?
  2. 2Un archivo .env con contraseñas se subió al repositorio y luego se eliminó en otro commit. ¿Qué ocurre?
  3. 3Con un .gitignore que contiene .env y .env.*, ¿qué pasa con .env.example?
  4. 4¿Qué ocurre con un volumen nombrado al ejecutar docker compose down sin -v?
  5. 5¿En cuál de estos escenarios conviene una plataforma de orquestación en lugar de Compose?

0/5 respuestas correctas