Docker Compose
Category: devops October 19, 2025
Agent instructions for Docker Compose multi-container applications
dockerdocker-composecontainersdevops
# Docker Compose Development
## Setup Commands
- Start all services: `docker-compose up -d`
- View logs: `docker-compose logs -f`
- Stop all services: `docker-compose down`
- Rebuild containers: `docker-compose up -d --build`
- View running containers: `docker-compose ps`
## Project Structure
project/ ├── docker-compose.yml # Service definitions ├── Dockerfile # App container image ├── .dockerignore # Files to exclude from build └── services/ ├── api/ ├── web/ └── db/
## Best Practices
- Use environment variables in `.env` file
- Never commit secrets to version control
- Use named volumes for persistent data
- Implement health checks for all services
- Use specific image versions (not `latest`)
## Service Definition
- Define services with clear names
- Set resource limits (memory, CPU)
- Configure restart policies
- Map ports explicitly
- Use networks for service isolation
## Development Workflow
- Hot reload: Mount source code as volumes
- Watch logs: `docker-compose logs -f <service-name>`
- Execute commands: `docker-compose exec <service> <command>`
- Shell access: `docker-compose exec <service> sh`
- Database access: `docker-compose exec db psql -U user`
## Common Issues
- Port conflicts: Check if ports are already in use
- Volume permissions: Use appropriate user IDs
- Network issues: Ensure service names match in connection strings
- Build cache: Use `--no-cache` flag if needed
## Testing & CI
- Run tests in containers: `docker-compose run --rm <service> npm test`
- Clean up test containers: `docker-compose down -v`
- Use separate compose file for CI: `docker-compose -f docker-compose.test.yml`
## Data Management
- Backup volumes before major changes
- Use named volumes for databases
- Clean unused volumes: `docker volume prune`
- Export data: `docker-compose exec db pg_dump > backup.sql`
## PR Instructions
- Test full stack locally with `docker-compose up`
- Ensure all services start without errors
- Document any new environment variables
- Update README if docker-compose.yml changed
- Verify database migrations run correctly