Skill – Docker Compose

Skill do tworzenia konfiguracji Docker i Docker Compose.

Treść pliku SKILL.md

---
name: docker-compose
description: "Tworzenie docker-compose.yml dla self-hosted aplikacji  sieci, volumes, zmienne środowiskowe, healthchecks"
---

# Docker Compose Skill

## Wzorzec – dobry docker-compose.yml

```yaml
version: '3.8'

services:
  app:
    image: app/image:latest
    container_name: app-name
    restart: unless-stopped
    
    # Porty: tylko gdy potrzebny zewnętrzny dostęp
    # Jeśli używasz reverse proxy – usuń ports!
    ports:
      - "8080:80"
    
    # Volumes – zawsze nazwane lub bind mount z ścieżką
    volumes:
      - app-data:/data
      - ./config:/config:ro  # :ro = read only
    
    # Zmienne środowiskowe – z pliku .env
    env_file:
      - .env
    environment:
      - TZ=Europe/Warsaw
    
    # Sieć – izolacja
    networks:
      - app-network
    
    # Healthcheck
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost/health"]
      interval: 30s
      timeout: 10s
      retries: 3

volumes:
  app-data:
    driver: local

networks:
  app-network:
    driver: bridge
```

## Zasady bezpieczeństwa
- Nigdy nie umieszczaj haseł w docker-compose.yml – używaj .env
- Zawsze dodaj .env do .gitignore
- Używaj restart: unless-stopped (nie always)
- Ogranicz dostęp do portów: "127.0.0.1:8080:80" zamiast "8080:80"
- Używaj named volumes zamiast bind mountów dla danych

## Struktura projektu z Dockerem
```
projekt/
├── docker-compose.yml
├── docker-compose.prod.yml   ← nadpisania produkcyjne
├── .env                      ← zmienne (gitignore!)
├── .env.example              ← szablon (commit do repo)
└── data/                     ← persystentne dane (gitignore!)
```