Zarządzanie kontenerami Docker
Dokumentacja dla deweloperów ReadyNextOS
Ostatnia aktualizacja: 2025-12-28
Spis treści
Dział zatytułowany „Spis treści”- Architektura
- Lista kontenerów
- Podstawowe operacje
- Zarządzanie poszczególnymi serwisami
- Logi i diagnostyka
- Watchtower - automatyczne aktualizacje
- Troubleshooting
Architektura
Dział zatytułowany „Architektura”┌─────────────────────────────────────────────────────────────────────────┐│ ReadyNextOS - Docker Stack │├─────────────────────────────────────────────────────────────────────────┤│ ││ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────────┐ ││ │ Nginx │────▶│ PHP-FPM │────▶│ Docker Containers │ ││ │ (host) │ │ (host) │ │ │ ││ │ :80/:443 │ │ 8.4 │ │ ┌────────────────────┐ │ ││ └──────────────┘ └──────────────┘ │ │ PostgreSQL 18 │ │ ││ │ │ ready4docs-db:5433 │ │ ││ │ └────────────────────┘ │ ││ │ │ ││ │ ┌────────────────────┐ │ ││ │ │ Redis 7 │ │ ││ │ │ :6379 │ │ ││ │ └────────────────────┘ │ ││ │ │ ││ │ ┌────────────────────┐ │ ││ │ │ MinIO (S3) │ │ ││ │ │ :9000/:9001 │ │ ││ │ └────────────────────┘ │ ││ │ │ ││ │ ┌────────────────────┐ │ ││ │ │ Keycloak 24 │ │ ││ │ │ :8081 │ │ ││ │ └────────────────────┘ │ ││ │ │ ││ │ ┌────────────────────┐ │ ││ │ │ Reverb (WebSocket) │ │ ││ │ │ :6001 │ │ ││ │ └────────────────────┘ │ ││ │ │ ││ │ ┌────────────────────┐ │ ││ │ │ Queue Worker │ │ ││ │ └────────────────────┘ │ ││ └──────────────────────────┘ │└─────────────────────────────────────────────────────────────────────────┘Lista kontenerów
Dział zatytułowany „Lista kontenerów”| Kontener | Obraz | Port | Opis |
|---|---|---|---|
ready4docs-db | pgvector/pgvector:pg18 | 5433 | Baza danych PostgreSQL z pgvector |
readynextos-redis | redis:7-alpine | 6379 | Cache, sesje, kolejki |
ready4docs-minio | minio/minio:latest | 9000, 9001 | S3-compatible storage |
ready4docs-keycloak | keycloak:24.0 | 8081 | OIDC Identity Provider |
readynextos-reverb | ghcr.io/milocha/ready4docs-php | 6001 | WebSocket (Laravel Reverb) |
readynextos-queue | ghcr.io/milocha/ready4docs-php | - | Background jobs |
ready4docs-livekit | livekit/livekit-server | 7880, 7882/udp | WebRTC video/audio |
readynextos-donut-ocr | ghcr.io/milocha/ready4docs-donut-ocr | 8885 | AI OCR dla faktur |
ready4docs-tesseract | hertzg/tesseract-server | 8884 | OCR ogólnego przeznaczenia |
readynextos-watchtower | containrrr/watchtower | - | Auto-update kontenerów |
Podstawowe operacje
Dział zatytułowany „Podstawowe operacje”Lokalizacja docker-compose
Dział zatytułowany „Lokalizacja docker-compose”cd /home/ready4docsStatus wszystkich kontenerów
Dział zatytułowany „Status wszystkich kontenerów”# Szybki podgląddocker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
# Szczegółowy status z healthcheckdocker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"Uruchamianie i zatrzymywanie
Dział zatytułowany „Uruchamianie i zatrzymywanie”# Uruchom wszystkie serwisydocker compose up -d
# Uruchom konkretny serwisdocker compose up -d reverb
# Zatrzymaj wszystkiedocker compose down
# Zatrzymaj konkretny kontenerdocker stop readynextos-reverb
# Restart konteneradocker restart ready4docs-dbPrzebudowa kontenerów
Dział zatytułowany „Przebudowa kontenerów”# Po zmianie docker-compose.ymldocker compose up -d --force-recreate
# Z przebudową obrazudocker compose build --no-cache reverbdocker compose up -d reverbZarządzanie poszczególnymi serwisami
Dział zatytułowany „Zarządzanie poszczególnymi serwisami”PostgreSQL (ready4docs-db)
Dział zatytułowany „PostgreSQL (ready4docs-db)”# Połączenie z baządocker exec -it ready4docs-db psql -U ready4docs
# Backup bazy (alternatywnie do systemd)docker exec ready4docs-db pg_dump -U ready4docs ready4docs | gzip > backup.sql.gz
# Sprawdź logidocker logs ready4docs-db --tail 100
# Sprawdź healthcheckdocker exec ready4docs-db pg_isready -U ready4docs# Połączenie z Redis CLIdocker exec -it readynextos-redis redis-cli
# Sprawdź pamięćdocker exec readynextos-redis redis-cli info memory
# Wyczyść cachedocker exec readynextos-redis redis-cli FLUSHALL
# Monitor w czasie rzeczywistymdocker exec readynextos-redis redis-cli MONITORMinIO (S3 Storage)
Dział zatytułowany „MinIO (S3 Storage)”# Konsola webowa: http://localhost:9001# Login: minio / minio123 (z .env)
# Sprawdź bucketydocker exec ready4docs-minio mc ls local
# Logidocker logs ready4docs-minio --tail 50Keycloak (OIDC)
Dział zatytułowany „Keycloak (OIDC)”# Konsola admin: http://localhost:8081# Login: admin / admin (z .env)
# Logidocker logs ready4docs-keycloak --tail 100
# Restart po zmianie konfiguracjidocker restart ready4docs-keycloakReverb (WebSocket)
Dział zatytułowany „Reverb (WebSocket)”# Statusdocker logs readynextos-reverb --tail 50
# Restartdocker restart readynextos-reverb
# Test połączenia WebSocketcurl -v http://localhost:6001Queue Worker
Dział zatytułowany „Queue Worker”# Status kolejekdocker exec readynextos-queue php artisan queue:monitor
# Logidocker logs readynextos-queue --tail 100 -f
# Restart po zmianie kodudocker restart readynextos-queue
# Wyczyść nieudane jobydocker exec readynextos-queue php artisan queue:flushDonut OCR (AI Invoice Extraction)
Dział zatytułowany „Donut OCR (AI Invoice Extraction)”# Statusdocker logs readynextos-donut-ocr --tail 50
# Test healthcurl http://localhost:8885/.well-known/health/ready
# Uwaga: Pierwsze uruchomienie pobiera model (~1.5GB)# Może to potrwać kilka minutLogi i diagnostyka
Dział zatytułowany „Logi i diagnostyka”Podgląd logów
Dział zatytułowany „Podgląd logów”# Wszystkie kontenerydocker compose logs -f
# Konkretny serwisdocker compose logs -f reverb
# Ostatnie N liniidocker logs ready4docs-db --tail 100
# Z timestampamidocker logs ready4docs-db --tail 100 -tSprawdzanie healthcheck
Dział zatytułowany „Sprawdzanie healthcheck”# Status wszystkich healthcheckówdocker ps --format "table {{.Names}}\t{{.Status}}"
# Szczegóły healthcheck konteneradocker inspect --format='{{json .State.Health}}' ready4docs-db | jqZasoby (CPU/RAM)
Dział zatytułowany „Zasoby (CPU/RAM)”# Zużycie zasobów przez kontenerydocker stats --no-stream
# Ciągły monitoringdocker statsInspekcja kontenera
Dział zatytułowany „Inspekcja kontenera”# Pełna konfiguracjadocker inspect ready4docs-db
# Tylko zmienne środowiskowedocker inspect ready4docs-db --format='{{range .Config.Env}}{{println .}}{{end}}'
# Wolumenydocker inspect ready4docs-db --format='{{json .Mounts}}' | jqWatchtower - automatyczne aktualizacje
Dział zatytułowany „Watchtower - automatyczne aktualizacje”Watchtower automatycznie aktualizuje kontenery gdy pojawi się nowa wersja obrazu na GitHub Container Registry.
Konfiguracja
Dział zatytułowany „Konfiguracja”# Tryb tylko monitorowanie (domyślnie wyłączony)WATCHTOWER_MONITOR_ONLY=false
# Interwał sprawdzania (co 6 godzin)WATCHTOWER_POLL_INTERVAL=21600# Logi Watchtowerdocker logs readynextos-watchtower --tail 50
# Sprawdź ostatnią aktualizacjędocker logs readynextos-watchtower 2>&1 | grep -i updateRęczne wymuszenie aktualizacji
Dział zatytułowany „Ręczne wymuszenie aktualizacji”# Zaktualizuj konkretny kontenerdocker pull ghcr.io/milocha/ready4docs-php:latestdocker compose up -d reverb queue-worker
# Zaktualizuj wszystkiedocker compose pulldocker compose up -dWyłączenie auto-update dla kontenera
Dział zatytułowany „Wyłączenie auto-update dla kontenera”Dodaj label w docker-compose.yml:
services: db: labels: - "com.centurylinklabs.watchtower.enable=false"Troubleshooting
Dział zatytułowany „Troubleshooting”Kontener nie startuje
Dział zatytułowany „Kontener nie startuje”# 1. Sprawdź logidocker logs ready4docs-db --tail 100
# 2. Sprawdź czy port jest zajętysudo lsof -i :5433
# 3. Sprawdź konfiguracjędocker compose config
# 4. Usuń i utwórz ponowniedocker compose downdocker compose up -dKontener “unhealthy”
Dział zatytułowany „Kontener “unhealthy””# Sprawdź szczegóły healthcheckdocker inspect --format='{{json .State.Health}}' ready4docs-db | jq
# Ręcznie uruchom komendę healthcheckdocker exec ready4docs-db pg_isready -U ready4docsBrak miejsca na dysku
Dział zatytułowany „Brak miejsca na dysku”# Sprawdź wolumenydocker system df
# Usuń nieużywane obrazy i wolumenydocker system prune -a --volumes
# Usuń tylko nieużywane obrazydocker image prune -aReset kontenera do stanu początkowego
Dział zatytułowany „Reset kontenera do stanu początkowego”# UWAGA: To usuwa wszystkie dane!
# Zatrzymaj i usuń kontener z wolumenemdocker compose down -v db
# Usuń katalog danychsudo rm -rf /home/ready4docs/postgres-data
# Uruchom ponownie (utworzy nową bazę)docker compose up -d dbProblemy z siecią Docker
Dział zatytułowany „Problemy z siecią Docker”# Sprawdź siecidocker network ls
# Usuń i utwórz sieć ponowniedocker network rm readynextos-networkdocker compose up -dZmienne środowiskowe
Dział zatytułowany „Zmienne środowiskowe”Wszystkie zmienne są zdefiniowane w /home/ready4docs/.env:
| Zmienna | Domyślna wartość | Opis |
|---|---|---|
DB_USERNAME | readynextos | Użytkownik PostgreSQL |
DB_PASSWORD | (z .env) | Hasło PostgreSQL |
DB_DATABASE | readynextos | Nazwa bazy |
DB_HOST_PORT | 5433 | Port PostgreSQL na hoście |
REDIS_PORT | 6379 | Port Redis |
MINIO_ROOT_USER | minio | Użytkownik MinIO |
MINIO_ROOT_PASSWORD | (z .env) | Hasło MinIO |
KEYCLOAK_ADMIN | admin | Admin Keycloak |
KEYCLOAK_ADMIN_PASSWORD | (z .env) | Hasło admin Keycloak |
REVERB_PORT | 6001 | Port WebSocket |
GHCR_OWNER | milocha | Owner obrazów na GHCR |
Przydatne aliasy
Dział zatytułowany „Przydatne aliasy”Dodaj do ~/.bashrc:
# Docker shortcutsalias dps='docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"'alias dlogs='docker compose logs -f'alias dstats='docker stats --no-stream'alias dexec='docker exec -it'
# ReadyNextOS specificalias r4d-db='docker exec -it ready4docs-db psql -U ready4docs'alias r4d-redis='docker exec -it readynextos-redis redis-cli'alias r4d-logs='cd /home/ready4docs && docker compose logs -f'