Docker prostředí
Docker prostředí
Section titled “Docker prostředí”Projekt používá Docker Compose pro kompletní lokální vývojové prostředí.
Struktura kontejnerů
Section titled “Struktura kontejnerů”Přehled služeb
Section titled “Přehled služeb”| Služba | Image | Porty | Popis |
|---|---|---|---|
| nginx | nginx:latest | 80, 443 | Web server |
| fpm | Custom PHP-FPM | 9001, 5173 | PHP aplikace + Vite dev server |
| db | mariadb:11 | 3337:3306 | MariaDB databáze |
| redis | redis:alpine | 6379 | Cache & sessions |
| mailhog | mailhog/mailhog | 1025, 8025 | SMTP testing |
| minio | bitnami/minio | 9000, 9002 | S3-compatible storage |
| docs | Custom Node.js | 5174:4321 | Dokumentace (Astro) |
Všechny kontejnery sdílí Docker network kviz:
networks: kviz: ~Běžné příkazy
Section titled “Běžné příkazy”Základní operace
Section titled “Základní operace”# Spuštění všech služebdocker compose up -d
# Zastavení všech služebdocker compose down
# Restart služebdocker compose restart
# Zobrazení běžících kontejnerůdocker compose ps
# Zobrazení logůdocker compose logs -f
# Logy konkrétní službydocker compose logs -f fpmdocker compose logs -f nginxPráce s kontejnery
Section titled “Práce s kontejnery”# Vstup do fpm kontejneru (bash)docker compose exec fpm bash
# Spuštění příkazu v kontejnerudocker compose exec fpm php artisan migrate
# Spuštění příkazu bez alokace TTY (pro CI/CD)docker compose exec -T fpm php artisan testBuild a rebuild
Section titled “Build a rebuild”# Build všech custom imagesdocker compose build
# Build konkrétní službydocker compose build fpm
# Build bez cache (fresh build)docker compose build --no-cache fpm
# Pull latest imagesdocker compose pullSlužby detailně
Section titled “Služby detailně”nginx - Web server
Section titled “nginx - Web server”Konfigurace: .docker/nginx/kviz.conf
server { listen 80; listen 443 ssl; server_name chytrykviz.local;
root /var/www/html/public; index index.php;
# SSL certifikáty ssl_certificate /etc/nginx/ssl/chytrykviz.local.crt; ssl_certificate_key /etc/nginx/ssl/chytrykviz.local.key;
# PHP-FPM location ~ \.php$ { fastcgi_pass fpm:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }}Restart nginx:
docker compose restart nginxKontrola konfigurace:
docker compose exec nginx nginx -tfpm - PHP-FPM + Vite
Section titled “fpm - PHP-FPM + Vite”Dockerfile: .docker/fpm/Dockerfile
Nainstalované rozšíření:
- zip, json, pdo, pdo_mysql, redis
- gd, intl, opcache
- xdebug (pro debugging)
Environment proměnné:
environment: PROJECT_DIR: '/var/www/html' MEMORY_LIMIT: 3000MSpuštění Composer:
docker compose exec fpm composer installdocker compose exec fpm composer updatedocker compose exec fpm composer dump-autoloadSpuštění npm:
docker compose exec fpm npm cidocker compose exec fpm npm run devdocker compose exec fpm npm run buildArtisan příkazy:
docker compose exec fpm php artisan migratedocker compose exec fpm php artisan db:seeddocker compose exec fpm php artisan tinkerdb - MariaDB 11
Section titled “db - MariaDB 11”Připojení:
# Z host strojemysql -h 127.0.0.1 -P 3337 -u kviz -pkviz kviz
# Z fpm kontejnerudocker compose exec fpm php artisan dbEnvironment proměnné:
environment: MYSQL_ROOT_PASSWORD: root MYSQL_USER: kviz MYSQL_PASSWORD: kviz MYSQL_DATABASE: kvizVolumes:
volumes: - ./database/dump.sql:/docker-entrypoint-initdb.d/schema.sql - ./database/init.sql:/docker-entrypoint-initdb.d/init.sqlSQL soubory v /docker-entrypoint-initdb.d/ se spustí při prvním startu kontejneru.
Reset databáze:
# Zastavit a smazat volumesdocker compose down -v
# Spustit znovu (vytvoří se nová DB z dump.sql)docker compose up -d dbBackup databáze:
docker compose exec db mysqldump -u kviz -pkviz kviz > backup.sqlRestore databáze:
docker compose exec -T db mysql -u kviz -pkviz kviz < backup.sqlredis - Cache & Sessions
Section titled “redis - Cache & Sessions”Připojení:
# Redis CLIdocker compose exec redis redis-cli
# Test pingdocker compose exec redis redis-cli ping# Output: PONGKontrola klíčů:
docker compose exec redis redis-cli KEYS "*"Flush cache:
docker compose exec redis redis-cli FLUSHALLLaravel cache clear:
docker compose exec fpm php artisan cache:clearmailhog - SMTP Testing
Section titled “mailhog - SMTP Testing”SMTP server: mailhog:1025
Laravel konfigurace (.env):
MAIL_DRIVER=smtpMAIL_HOST=mailhogMAIL_PORT=1025MAIL_USERNAME=nullMAIL_PASSWORD=nullMAIL_ENCRYPTION=nullTest odeslání emailu:
docker compose exec fpm php artisan tinker>>> Mail::raw('Test email', function($msg) { $msg->to('test@example.com')->subject('Test'); });Poté zkontrolujte http://localhost:8025
minio - S3 Storage
Section titled “minio - S3 Storage”Console UI: http://localhost:9002
Credentials:
MINIO_ROOT_USER: chytrykvizMINIO_ROOT_PASSWORD: chytrykvizDefault bucket: kviz:public
Laravel konfigurace (.env):
FILESYSTEM_DISK=s3AWS_ACCESS_KEY_ID=chytrykvizAWS_SECRET_ACCESS_KEY=chytrykvizAWS_DEFAULT_REGION=us-east-1AWS_BUCKET=kvizAWS_ENDPOINT=http://minio:9000AWS_USE_PATH_STYLE_ENDPOINT=trueTest uploadu:
docker compose exec fpm php artisan tinker>>> Storage::disk('s3')->put('test.txt', 'Hello World');>>> Storage::disk('s3')->exists('test.txt');docs - Dokumentace (Astro)
Section titled “docs - Dokumentace (Astro)”Dockerfile: .docker/docs/Dockerfile
Restart dokumentace:
docker compose restart docsBuild dokumentace:
docker compose exec docs npm run buildDebugging
Section titled “Debugging”Xdebug
Section titled “Xdebug”Xdebug je nainstalován ve fpm kontejneru.
Konfigurace (.docker/fpm/php.ini):
[xdebug]xdebug.mode=debugxdebug.client_host=host.docker.internalxdebug.client_port=9003xdebug.start_with_request=yesVS Code konfigurace (launch.json):
{ "version": "0.2.0", "configurations": [ { "name": "Listen for Xdebug", "type": "php", "request": "launch", "port": 9003, "pathMappings": { "/var/www/html": "${workspaceFolder}" } } ]}PhpStorm:
- Settings → PHP → Debug → Port: 9003
- Settings → PHP → Servers:
- Name:
docker - Host:
localhost - Port:
80 - Debugger:
Xdebug - Path mappings:
/var/www/html→ project root
- Name:
Všechny logy
Section titled “Všechny logy”docker compose logs -fKonkrétní služba
Section titled “Konkrétní služba”docker compose logs -f fpmdocker compose logs -f nginxdocker compose logs -f dbPoslední N řádků
Section titled “Poslední N řádků”docker compose logs --tail=100 fpmLaravel logy
Section titled “Laravel logy”docker compose exec fpm tail -f storage/logs/laravel.logNginx access logy
Section titled “Nginx access logy”docker compose exec nginx tail -f /var/log/nginx/access.logMySQL error logy
Section titled “MySQL error logy”docker compose exec db tail -f /var/log/mysql/error.logVolumes
Section titled “Volumes”Seznam volumes
Section titled “Seznam volumes”docker volume ls | grep chytrykvizSmazání volumes (POZOR: smaže data!)
Section titled “Smazání volumes (POZOR: smaže data!)”# Zastavit kontejnery a smazat volumesdocker compose down -v
# Pouze databázový volumedocker volume rm chytrykviz_dbdataMountované adresáře
Section titled “Mountované adresáře”Z docker-compose.yml:
fpm: volumes: - ./:/var/www/html # Celý projekt - ./.docker/fpm/php.ini:/usr/local/etc/php/php.ini
nginx: volumes: - ./:/var/www/html - ./.docker/nginx/kviz.conf:/etc/nginx/conf.d/default.conf - ./.docker/nginx/ssl:/etc/nginx/ssl
db: volumes: - ./database/dump.sql:/docker-entrypoint-initdb.d/schema.sql - ./database/init.sql:/docker-entrypoint-initdb.d/init.sqlPerformance optimalizace
Section titled “Performance optimalizace”Composer cache
Section titled “Composer cache”# Vyčistit cachedocker compose exec fpm composer clear-cache
# Optimalizovat autoloaddocker compose exec fpm composer dump-autoload -oArtisan optimalizace
Section titled “Artisan optimalizace”# Cachování konfiguracedocker compose exec fpm php artisan config:cache
# Cachování routesdocker compose exec fpm php artisan route:cache
# Cachování viewsdocker compose exec fpm php artisan view:cache
# Vše najednoudocker compose exec fpm php artisan optimizenpm cache
Section titled “npm cache”docker compose exec fpm npm cache clean --forceTroubleshooting
Section titled “Troubleshooting”Kontejner se neustále restartuje
Section titled “Kontejner se neustále restartuje”# Zobrazit logydocker compose logs fpm
# Zkontrolovat statusdocker compose psPort již používán
Section titled “Port již používán”# Zjistit, co používá port 80sudo lsof -i :80
# Změnit port v docker-compose.ymlports: - "8080:80"Permission denied chyby
Section titled “Permission denied chyby”# Nastavit správná oprávněnídocker compose exec fpm chown -R www-data:www-data storage bootstrap/cachedocker compose exec fpm chmod -R 775 storage bootstrap/cacheNelze se připojit k databázi
Section titled “Nelze se připojit k databázi”# Zkontrolovat, že db kontejner běžídocker compose ps db
# Zkontrolovat logydocker compose logs db
# Test připojenídocker compose exec fpm php artisan dbVite dev server nefunguje
Section titled “Vite dev server nefunguje”# Zkontrolovat, že port 5173 je volnýdocker compose ps
# Restart fpm s Vitedocker compose exec fpm npm run devVyčištění všeho (nuclear option)
Section titled “Vyčištění všeho (nuclear option)”# Zastavit všedocker compose down -v
# Smazat všechny Docker objekty projektudocker compose rm -fdocker volume prune -fdocker network prune -f
# Rebuild a restartdocker compose build --no-cachedocker compose up -dAktualizace services
Section titled “Aktualizace services”Aktualizace PHP verze
Section titled “Aktualizace PHP verze”- Upravit
.docker/fpm/Dockerfile:
FROM php:8.4-fpm # Změnit na novou verzi- Rebuild:
docker compose build --no-cache fpmdocker compose up -d fpmAktualizace MariaDB
Section titled “Aktualizace MariaDB”- Upravit
docker-compose.yml:
db: image: mariadb:11.2 # Změnit verzi- Backup databáze:
docker compose exec db mysqldump -u kviz -pkviz kviz > backup-before-upgrade.sql- Aktualizace:
docker compose downdocker compose up -d dbAktualizace Node.js verze
Section titled “Aktualizace Node.js verze”- Upravit
.docker/fpm/Dockerfile:
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - # Změnit verzi- Rebuild:
docker compose build --no-cache fpmdocker compose up -d fpm