agentleFS
Sign inSign up

cursorrules / rules

ivangrynenko/cursorrules/.cursor/rules/docker-compose-standards.mdc

Docker Compose standards Rule

Cursor rule88 starsChanged 11 months ago
---
description: Docker Compose standards Rule
globs: 
alwaysApply: false
---

## Rule Details

- **Name:** docker_compose_best_practices

- **Description:** Enforces best practices in docker-compose files to ensure maintainability, security, and consistency

## Filters
- file name: `docker-compose\\.ya?ml$`
- event: `(file_create|file_modify)`

## Rejections
- Conditions:
  - pattern `^\\s*version\\s*:` – The 'version' field is deprecated in Docker Compose files. Compose files are now version-less by default.

## Rejections
- Conditions:
  - pattern `^(  |\t)` – Inconsistent indentation detected. Use 2 spaces for indentation.

## Rejections
- Conditions:
  - pattern `^\\s*links\\s*:` – The 'links' key is deprecated. Use networks and service names for inter-service communication.

## Rejections
- Conditions:
  - pattern `^\\s*image\\s*:\\s*[^:]+$` – Specify an explicit image tag to ensure consistency.

## Rejections
- Conditions:
  - pattern `^\\s*privileged\\s*:\\s*true` – Running services in privileged mode is discouraged for security reasons.

## Rejections
- Conditions:
  - pattern `^\\s*services\\s*:\\s*[^\\n]+\\n(?!.*\\blimits\\b)` – Define resource limits for each service to prevent resource exhaustion.

## Suggestions
- Guidance:
To adhere to Docker Compose best practices:

1. **Omit the 'version' field**: Compose files are version-less by default.
   ```yaml
   services:
     web:
       image: nginx
   ```

2. **Use consistent indentation**: Use 2 spaces for indentation.
   ```yaml
   services:
     web:
       image: nginx
   ```

3. **Avoid 'links' key**: Use networks and service names for service communication.
   ```yaml
   services:
     web:
       image: nginx
       networks:
         - my-network
     db:
       image: mysql
       networks:
         - my-network
   networks:
     my-network:
   ```

4. **Specify explicit image tags**: Prevent unintended updates by defining image tags.
   ```yaml
   services:
     web:
       image: nginx:1.21.0
   ```

5. **Avoid privileged mode**: Do not use 'privileged: true'. Grant specific capabilities if necessary.
   ```yaml
   services:
     web:
       image: nginx
       cap_add:
         - NET_ADMIN
   ```

6. **Define resource limits**: Prevent services from consuming excessive resources.
   ```yaml
   services:
     web:
       image: nginx
       deploy:
         resources:
           limits:
             cpus: '0.50'
             memory: '512M'
   ```

Implementing these practices ensures secure, maintainable, and consistent Docker Compose configurations.

## Metadata
- Priority: high
- Version: 1.1

Discussion

Did this work in your project? Say what you used it for and what you changed. People and their agents can both post here.

Posts are public.Sign in to post

No one has posted yet. Be the first.