Przejdź do głównej zawartości

Zarządzanie kontenerami Docker

Dokumentacja dla deweloperów ReadyNextOS

Ostatnia aktualizacja: 2025-12-28

  1. Architektura
  2. Lista kontenerów
  3. Podstawowe operacje
  4. Zarządzanie poszczególnymi serwisami
  5. Logi i diagnostyka
  6. Watchtower - automatyczne aktualizacje
  7. Troubleshooting

┌─────────────────────────────────────────────────────────────────────────┐
│ 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 │ │ │
│ │ └────────────────────┘ │ │
│ └──────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘

KontenerObrazPortOpis
ready4docs-dbpgvector/pgvector:pg185433Baza danych PostgreSQL z pgvector
readynextos-redisredis:7-alpine6379Cache, sesje, kolejki
ready4docs-miniominio/minio:latest9000, 9001S3-compatible storage
ready4docs-keycloakkeycloak:24.08081OIDC Identity Provider
readynextos-reverbghcr.io/milocha/ready4docs-php6001WebSocket (Laravel Reverb)
readynextos-queueghcr.io/milocha/ready4docs-php-Background jobs
ready4docs-livekitlivekit/livekit-server7880, 7882/udpWebRTC video/audio
readynextos-donut-ocrghcr.io/milocha/ready4docs-donut-ocr8885AI OCR dla faktur
ready4docs-tesseracthertzg/tesseract-server8884OCR ogólnego przeznaczenia
readynextos-watchtowercontainrrr/watchtower-Auto-update kontenerów

Okno terminala
cd /home/ready4docs
Okno terminala
# Szybki podgląd
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
# Szczegółowy status z healthcheck
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"
Okno terminala
# Uruchom wszystkie serwisy
docker compose up -d
# Uruchom konkretny serwis
docker compose up -d reverb
# Zatrzymaj wszystkie
docker compose down
# Zatrzymaj konkretny kontener
docker stop readynextos-reverb
# Restart kontenera
docker restart ready4docs-db
Okno terminala
# Po zmianie docker-compose.yml
docker compose up -d --force-recreate
# Z przebudową obrazu
docker compose build --no-cache reverb
docker compose up -d reverb

Okno terminala
# 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ź logi
docker logs ready4docs-db --tail 100
# Sprawdź healthcheck
docker exec ready4docs-db pg_isready -U ready4docs
Okno terminala
# Połączenie z Redis CLI
docker exec -it readynextos-redis redis-cli
# Sprawdź pamięć
docker exec readynextos-redis redis-cli info memory
# Wyczyść cache
docker exec readynextos-redis redis-cli FLUSHALL
# Monitor w czasie rzeczywistym
docker exec readynextos-redis redis-cli MONITOR
Okno terminala
# Konsola webowa: http://localhost:9001
# Login: minio / minio123 (z .env)
# Sprawdź buckety
docker exec ready4docs-minio mc ls local
# Logi
docker logs ready4docs-minio --tail 50
Okno terminala
# Konsola admin: http://localhost:8081
# Login: admin / admin (z .env)
# Logi
docker logs ready4docs-keycloak --tail 100
# Restart po zmianie konfiguracji
docker restart ready4docs-keycloak
Okno terminala
# Status
docker logs readynextos-reverb --tail 50
# Restart
docker restart readynextos-reverb
# Test połączenia WebSocket
curl -v http://localhost:6001
Okno terminala
# Status kolejek
docker exec readynextos-queue php artisan queue:monitor
# Logi
docker logs readynextos-queue --tail 100 -f
# Restart po zmianie kodu
docker restart readynextos-queue
# Wyczyść nieudane joby
docker exec readynextos-queue php artisan queue:flush
Okno terminala
# Status
docker logs readynextos-donut-ocr --tail 50
# Test health
curl http://localhost:8885/.well-known/health/ready
# Uwaga: Pierwsze uruchomienie pobiera model (~1.5GB)
# Może to potrwać kilka minut

Okno terminala
# Wszystkie kontenery
docker compose logs -f
# Konkretny serwis
docker compose logs -f reverb
# Ostatnie N linii
docker logs ready4docs-db --tail 100
# Z timestampami
docker logs ready4docs-db --tail 100 -t
Okno terminala
# Status wszystkich healthchecków
docker ps --format "table {{.Names}}\t{{.Status}}"
# Szczegóły healthcheck kontenera
docker inspect --format='{{json .State.Health}}' ready4docs-db | jq
Okno terminala
# Zużycie zasobów przez kontenery
docker stats --no-stream
# Ciągły monitoring
docker stats
Okno terminala
# Pełna konfiguracja
docker inspect ready4docs-db
# Tylko zmienne środowiskowe
docker inspect ready4docs-db --format='{{range .Config.Env}}{{println .}}{{end}}'
# Wolumeny
docker inspect ready4docs-db --format='{{json .Mounts}}' | jq

Watchtower automatycznie aktualizuje kontenery gdy pojawi się nowa wersja obrazu na GitHub Container Registry.

Okno terminala
# Tryb tylko monitorowanie (domyślnie wyłączony)
WATCHTOWER_MONITOR_ONLY=false
# Interwał sprawdzania (co 6 godzin)
WATCHTOWER_POLL_INTERVAL=21600
Okno terminala
# Logi Watchtower
docker logs readynextos-watchtower --tail 50
# Sprawdź ostatnią aktualizację
docker logs readynextos-watchtower 2>&1 | grep -i update
Okno terminala
# Zaktualizuj konkretny kontener
docker pull ghcr.io/milocha/ready4docs-php:latest
docker compose up -d reverb queue-worker
# Zaktualizuj wszystkie
docker compose pull
docker compose up -d

Dodaj label w docker-compose.yml:

services:
db:
labels:
- "com.centurylinklabs.watchtower.enable=false"

Okno terminala
# 1. Sprawdź logi
docker logs ready4docs-db --tail 100
# 2. Sprawdź czy port jest zajęty
sudo lsof -i :5433
# 3. Sprawdź konfigurację
docker compose config
# 4. Usuń i utwórz ponownie
docker compose down
docker compose up -d
Okno terminala
# Sprawdź szczegóły healthcheck
docker inspect --format='{{json .State.Health}}' ready4docs-db | jq
# Ręcznie uruchom komendę healthcheck
docker exec ready4docs-db pg_isready -U ready4docs
Okno terminala
# Sprawdź wolumeny
docker system df
# Usuń nieużywane obrazy i wolumeny
docker system prune -a --volumes
# Usuń tylko nieużywane obrazy
docker image prune -a
Okno terminala
# UWAGA: To usuwa wszystkie dane!
# Zatrzymaj i usuń kontener z wolumenem
docker compose down -v db
# Usuń katalog danych
sudo rm -rf /home/ready4docs/postgres-data
# Uruchom ponownie (utworzy nową bazę)
docker compose up -d db
Okno terminala
# Sprawdź sieci
docker network ls
# Usuń i utwórz sieć ponownie
docker network rm readynextos-network
docker compose up -d

Wszystkie zmienne są zdefiniowane w /home/ready4docs/.env:

ZmiennaDomyślna wartośćOpis
DB_USERNAMEreadynextosUżytkownik PostgreSQL
DB_PASSWORD(z .env)Hasło PostgreSQL
DB_DATABASEreadynextosNazwa bazy
DB_HOST_PORT5433Port PostgreSQL na hoście
REDIS_PORT6379Port Redis
MINIO_ROOT_USERminioUżytkownik MinIO
MINIO_ROOT_PASSWORD(z .env)Hasło MinIO
KEYCLOAK_ADMINadminAdmin Keycloak
KEYCLOAK_ADMIN_PASSWORD(z .env)Hasło admin Keycloak
REVERB_PORT6001Port WebSocket
GHCR_OWNERmilochaOwner obrazów na GHCR

Dodaj do ~/.bashrc:

Okno terminala
# Docker shortcuts
alias 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 specific
alias 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'