Docker & Makefile Skill
docker-makefile
Docker Compose orchestration and Makefile commands for the development environment. Use this skill when managing containers, debugging services, running make commands, or troubleshooting Docker issues.
SKILL.md
Full skill instructions
Docker & Makefile Skill
This skill provides guidance for managing the Family Plan development environment using Docker Compose and Makefile commands.
Docker Services Overview
| Service | Port | Description |
|---|---|---|
frontend | 3000 | React development server |
nginx | 8080 | Backend API reverse proxy |
php | 9000 (internal) | PHP-FPM application server |
database | 5432 | PostgreSQL database |
mailpit | 8025 | Email testing UI |
node | - | Asset builder (build only) |
Essential Make Commands
Service Management
# Start all services
make up
# Stop all services
make down
# Restart services
make restart
# View service status
docker compose ps
# Full cleanup (removes volumes)
make clean
Initial Setup
# Complete project setup (first time)
make setup
# This runs: up -> install -> db-migrate -> create-admin
# Initialize development environment
make init
# Install all dependencies
make install
Database Operations
# Run database migrations
make db-migrate
# Reset database (drop + create + migrate)
make db-reset
# Generate new migration from entity changes
make db-diff
# Direct database access
make shell-db
# Then: \dt to list tables, \d+ table_name for schema
Testing
# Run all backend tests (PHPUnit + Behat)
make backend-test
# Run only PHPUnit tests
make phpunit
# Run only Behat acceptance tests
make behat
# Run frontend E2E tests
make frontend-test
# Run all tests
make test
Shell Access
# PHP container shell
make shell-php
# or: make shell
# Database shell (psql)
make shell-db
# Frontend container shell
docker compose exec frontend sh
Code Quality
# Run PHP linter (PHP-CS-Fixer)
make lint
# Auto-fix linting issues
make lint-fix
Logs and Debugging
# All service logs
docker compose logs -f
# Specific service logs
docker compose logs -f php
docker compose logs -f frontend
docker compose logs -f database
docker compose logs -f nginx
# Last 100 lines
docker compose logs --tail=100 php
Docker Compose Configuration
compose.yaml Structure
services:
database:
image: postgres:16-alpine
ports:
- "5432:5432"
environment:
POSTGRES_DB: app
POSTGRES_USER: app
POSTGRES_PASSWORD: "!ChangeMe!"
volumes:
- database_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "app"]
interval: 10s
timeout: 5s
retries: 5
php:
build:
context: .
target: app_php_dev
depends_on:
database:
condition: service_healthy
volumes:
- .:/srv/app
environment:
DATABASE_URL: postgresql://app:!ChangeMe!@database:5432/app
nginx:
build:
context: .
target: app_nginx
depends_on:
- php
ports:
- "8080:80"
frontend:
build:
context: ./frontend
ports:
- "3000:3000"
volumes:
- ./frontend:/app
- /app/node_modules
environment:
- CHOKIDAR_USEPOLLING=true
mailpit:
image: axllent/mailpit
ports:
- "8025:8025"
- "1025:1025"
volumes:
database_data:
Common Tasks
Rebuilding Containers
# Rebuild all containers
docker compose build
# Rebuild specific service
docker compose build php
# Rebuild without cache
docker compose build --no-cache php
# Rebuild and restart
docker compose up -d --build
Executing Commands in Containers
# Run command in PHP container
docker compose exec php <command>
# Examples:
docker compose exec php composer install
docker compose exec php php bin/console cache:clear
docker compose exec php vendor/bin/phpunit
docker compose exec php vendor/bin/behat
# Run command in frontend container
docker compose exec frontend npm install
docker compose exec frontend npm run build
Database Management
# Create database backup
docker compose exec database pg_dump -U app app > backup.sql
# Restore database
docker compose exec -T database psql -U app app < backup.sql
# Run SQL query
docker compose exec database psql -U app -d app -c "SELECT * FROM users;"
Clearing Caches
# Symfony cache
docker compose exec php php bin/console cache:clear
# Clear all caches (dev)
docker compose exec php php bin/console cache:clear --env=dev
# Clear Doctrine cache
docker compose exec php php bin/console doctrine:cache:clear-metadata
docker compose exec php php bin/console doctrine:cache:clear-query
docker compose exec php php bin/console doctrine:cache:clear-result
Troubleshooting
Service Won't Start
# Check logs for errors
docker compose logs php
# Verify dependencies are healthy
docker compose ps
# Restart specific service
docker compose restart php
Database Connection Issues
# Check if database is ready
docker compose exec database pg_isready -U app
# Check database logs
docker compose logs database
# Reset database container
docker compose down -v # WARNING: destroys data
docker compose up -d database
make db-migrate
Permission Issues
# Fix file permissions (Linux)
sudo chown -R $(id -u):$(id -g) .
# In container
docker compose exec php chown -R www-data:www-data var/
Port Conflicts
# Check what's using a port
lsof -i :8080
lsof -i :3000
# Stop conflicting service or change port in compose.yaml
Memory Issues
# Check container resources
docker stats
# Increase Docker memory allocation in Docker Desktop settings
Environment Variables
Backend (.env)
APP_ENV=dev
APP_SECRET=your-secret-key
DATABASE_URL="postgresql://app:!ChangeMe!@database:5432/app"
[email protected]
SUPER_ADMIN_PASSWORD=admin123
CORS_ALLOWED_ORIGIN=http://localhost:3000
MAILER_DSN=smtp://mailpit:1025
Frontend (frontend/.env)
REACT_APP_API_URL=http://localhost:8080
Performance Tips
- Use named volumes - Faster than bind mounts for dependencies
- Exclude node_modules - Use anonymous volume to avoid syncing
- Enable BuildKit -
DOCKER_BUILDKIT=1 docker compose build - Use .dockerignore - Exclude unnecessary files from build context
- Health checks - Ensure services start in correct order
Quick Reference
| Task | Command |
|---|---|
| Start environment | make up |
| Stop environment | make down |
| Run tests | make test |
| Database shell | make shell-db |
| PHP shell | make shell-php |
| View logs | docker compose logs -f |
| Run migrations | make db-migrate |
| Reset everything | make clean && make setup |
