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.
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 todoservices: app: build: . # Dentro: nginx + node + postgresservices: web: image: nginx:alpine api: build: ./api db: image: postgres:16Concepto 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_passwordservices: db: image: postgres:16 env_file: - .env
# .envPOSTGRES_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.
.env.env.*secrets/# .env.example (sí se versiona, como plantilla)POSTGRES_USER=your_userPOSTGRES_PASSWORD=your_passwordPOSTGRES_DB=your_databaseActive 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.ymlDockerfile.env.env.example.env.productionsecrets/db_password.txtREADME.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.
# README.md — sección de operación
## Inicio rápido
1. Copie `.env.example` a `.env` y configure las variables2. 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 downConcepto 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 repositorioproyecto/├── 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.
0/5 respuestas correctas