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