Skip to content

Docker prostředí

Projekt používá Docker Compose pro kompletní lokální vývojové prostředí.

SlužbaImagePortyPopis
nginxnginx:latest80, 443Web server
fpmCustom PHP-FPM9001, 5173PHP aplikace + Vite dev server
dbmariadb:113337:3306MariaDB databáze
redisredis:alpine6379Cache & sessions
mailhogmailhog/mailhog1025, 8025SMTP testing
miniobitnami/minio9000, 9002S3-compatible storage
docsCustom Node.js5174:4321Dokumentace (Astro)

Všechny kontejnery sdílí Docker network kviz:

networks:
kviz: ~

Terminal window
# Spuštění všech služeb
docker compose up -d
# Zastavení všech služeb
docker compose down
# Restart služeb
docker compose restart
# Zobrazení běžících kontejnerů
docker compose ps
# Zobrazení logů
docker compose logs -f
# Logy konkrétní služby
docker compose logs -f fpm
docker compose logs -f nginx
Terminal window
# Vstup do fpm kontejneru (bash)
docker compose exec fpm bash
# Spuštění příkazu v kontejneru
docker compose exec fpm php artisan migrate
# Spuštění příkazu bez alokace TTY (pro CI/CD)
docker compose exec -T fpm php artisan test
Terminal window
# Build všech custom images
docker compose build
# Build konkrétní služby
docker compose build fpm
# Build bez cache (fresh build)
docker compose build --no-cache fpm
# Pull latest images
docker compose pull

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:

Terminal window
docker compose restart nginx

Kontrola konfigurace:

Terminal window
docker compose exec nginx nginx -t

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: 3000M

Spuštění Composer:

Terminal window
docker compose exec fpm composer install
docker compose exec fpm composer update
docker compose exec fpm composer dump-autoload

Spuštění npm:

Terminal window
docker compose exec fpm npm ci
docker compose exec fpm npm run dev
docker compose exec fpm npm run build

Artisan příkazy:

Terminal window
docker compose exec fpm php artisan migrate
docker compose exec fpm php artisan db:seed
docker compose exec fpm php artisan tinker

Připojení:

Terminal window
# Z host stroje
mysql -h 127.0.0.1 -P 3337 -u kviz -pkviz kviz
# Z fpm kontejneru
docker compose exec fpm php artisan db

Environment proměnné:

environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: kviz
MYSQL_PASSWORD: kviz
MYSQL_DATABASE: kviz

Volumes:

volumes:
- ./database/dump.sql:/docker-entrypoint-initdb.d/schema.sql
- ./database/init.sql:/docker-entrypoint-initdb.d/init.sql

SQL soubory v /docker-entrypoint-initdb.d/ se spustí při prvním startu kontejneru.

Reset databáze:

Terminal window
# Zastavit a smazat volumes
docker compose down -v
# Spustit znovu (vytvoří se nová DB z dump.sql)
docker compose up -d db

Backup databáze:

Terminal window
docker compose exec db mysqldump -u kviz -pkviz kviz > backup.sql

Restore databáze:

Terminal window
docker compose exec -T db mysql -u kviz -pkviz kviz < backup.sql

Připojení:

Terminal window
# Redis CLI
docker compose exec redis redis-cli
# Test ping
docker compose exec redis redis-cli ping
# Output: PONG

Kontrola klíčů:

Terminal window
docker compose exec redis redis-cli KEYS "*"

Flush cache:

Terminal window
docker compose exec redis redis-cli FLUSHALL

Laravel cache clear:

Terminal window
docker compose exec fpm php artisan cache:clear

UI: http://localhost:8025

SMTP server: mailhog:1025

Laravel konfigurace (.env):

MAIL_DRIVER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

Test odeslání emailu:

Terminal window
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


Console UI: http://localhost:9002

API: http://localhost:9000

Credentials:

MINIO_ROOT_USER: chytrykviz
MINIO_ROOT_PASSWORD: chytrykviz

Default bucket: kviz:public

Laravel konfigurace (.env):

FILESYSTEM_DISK=s3
AWS_ACCESS_KEY_ID=chytrykviz
AWS_SECRET_ACCESS_KEY=chytrykviz
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=kviz
AWS_ENDPOINT=http://minio:9000
AWS_USE_PATH_STYLE_ENDPOINT=true

Test uploadu:

Terminal window
docker compose exec fpm php artisan tinker
>>> Storage::disk('s3')->put('test.txt', 'Hello World');
>>> Storage::disk('s3')->exists('test.txt');

UI: http://localhost:5174

Dockerfile: .docker/docs/Dockerfile

Restart dokumentace:

Terminal window
docker compose restart docs

Build dokumentace:

Terminal window
docker compose exec docs npm run build

Xdebug je nainstalován ve fpm kontejneru.

Konfigurace (.docker/fpm/php.ini):

[xdebug]
xdebug.mode=debug
xdebug.client_host=host.docker.internal
xdebug.client_port=9003
xdebug.start_with_request=yes

VS 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:

  1. Settings → PHP → Debug → Port: 9003
  2. Settings → PHP → Servers:
    • Name: docker
    • Host: localhost
    • Port: 80
    • Debugger: Xdebug
    • Path mappings: /var/www/html → project root

Terminal window
docker compose logs -f
Terminal window
docker compose logs -f fpm
docker compose logs -f nginx
docker compose logs -f db
Terminal window
docker compose logs --tail=100 fpm
Terminal window
docker compose exec fpm tail -f storage/logs/laravel.log
Terminal window
docker compose exec nginx tail -f /var/log/nginx/access.log
Terminal window
docker compose exec db tail -f /var/log/mysql/error.log

Terminal window
docker volume ls | grep chytrykviz
Terminal window
# Zastavit kontejnery a smazat volumes
docker compose down -v
# Pouze databázový volume
docker volume rm chytrykviz_dbdata

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.sql

Terminal window
# Vyčistit cache
docker compose exec fpm composer clear-cache
# Optimalizovat autoload
docker compose exec fpm composer dump-autoload -o
Terminal window
# Cachování konfigurace
docker compose exec fpm php artisan config:cache
# Cachování routes
docker compose exec fpm php artisan route:cache
# Cachování views
docker compose exec fpm php artisan view:cache
# Vše najednou
docker compose exec fpm php artisan optimize
Terminal window
docker compose exec fpm npm cache clean --force

Terminal window
# Zobrazit logy
docker compose logs fpm
# Zkontrolovat status
docker compose ps
Terminal window
# Zjistit, co používá port 80
sudo lsof -i :80
# Změnit port v docker-compose.yml
ports:
- "8080:80"
Terminal window
# Nastavit správná oprávnění
docker compose exec fpm chown -R www-data:www-data storage bootstrap/cache
docker compose exec fpm chmod -R 775 storage bootstrap/cache
Terminal window
# Zkontrolovat, že db kontejner běží
docker compose ps db
# Zkontrolovat logy
docker compose logs db
# Test připojení
docker compose exec fpm php artisan db
Terminal window
# Zkontrolovat, že port 5173 je volný
docker compose ps
# Restart fpm s Vite
docker compose exec fpm npm run dev
Terminal window
# Zastavit vše
docker compose down -v
# Smazat všechny Docker objekty projektu
docker compose rm -f
docker volume prune -f
docker network prune -f
# Rebuild a restart
docker compose build --no-cache
docker compose up -d

  1. Upravit .docker/fpm/Dockerfile:
FROM php:8.4-fpm # Změnit na novou verzi
  1. Rebuild:
Terminal window
docker compose build --no-cache fpm
docker compose up -d fpm
  1. Upravit docker-compose.yml:
db:
image: mariadb:11.2 # Změnit verzi
  1. Backup databáze:
Terminal window
docker compose exec db mysqldump -u kviz -pkviz kviz > backup-before-upgrade.sql
  1. Aktualizace:
Terminal window
docker compose down
docker compose up -d db
  1. Upravit .docker/fpm/Dockerfile:
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - # Změnit verzi
  1. Rebuild:
Terminal window
docker compose build --no-cache fpm
docker compose up -d fpm