7.2 KiB
7.2 KiB
Docker Quick Reference
Essential Commands
Initial Setup
# 1. Navigate to project
cd /Users/matthias/work/feuerwehr_dashboard
# 2. Validate Docker setup
./docker-validate.sh
# 3. Configure environment
cp .env.example .env
# Edit .env and set:
# POSTGRES_PASSWORD=your_secure_password
# JWT_SECRET=your_jwt_secret_min_32_chars
# 4. Test Docker builds (optional)
./docker-test.sh
Start Application
# Build and start all services
docker-compose up -d
# View logs during startup
docker-compose logs -f
# Check service health
docker-compose ps
Access Services
- Frontend: http://localhost:80
- Backend API: http://localhost:3000
- PostgreSQL: localhost:5432
Manage Services
# Stop services (keeps data)
docker-compose stop
# Start stopped services
docker-compose start
# Restart all services
docker-compose restart
# Restart specific service
docker-compose restart backend
# Stop and remove containers (keeps data)
docker-compose down
# Stop, remove containers and volumes (DELETE DATA)
docker-compose down -v
View Logs
# All services
docker-compose logs -f
# Specific service
docker-compose logs -f backend
docker-compose logs -f frontend
docker-compose logs -f postgres
# Last 100 lines
docker-compose logs --tail=100 backend
# Since specific time
docker-compose logs --since 2024-01-01T00:00:00
Check Status
# Service status and health
docker-compose ps
# Container resource usage
docker stats
# Disk usage
docker system df
Database Operations
# Access PostgreSQL CLI
docker-compose exec postgres psql -U prod_user -d feuerwehr_prod
# Create backup
docker-compose exec postgres pg_dump -U prod_user feuerwehr_prod > backup.sql
# Restore backup
cat backup.sql | docker-compose exec -T postgres psql -U prod_user feuerwehr_prod
# View database logs
docker-compose logs -f postgres
Rebuild Services
# Rebuild all images
docker-compose build
# Rebuild without cache
docker-compose build --no-cache
# Rebuild specific service
docker-compose build backend
# Rebuild and restart
docker-compose up -d --build
Execute Commands in Containers
# Backend shell
docker-compose exec backend sh
# Frontend/Nginx shell
docker-compose exec frontend sh
# Run command in backend
docker-compose exec backend node -v
docker-compose exec backend npm list
# View backend environment
docker-compose exec backend env
Troubleshooting
# View full configuration
docker-compose config
# Validate docker-compose.yml
docker-compose config --quiet
# Remove all stopped containers
docker container prune
# Remove unused images
docker image prune
# Remove unused volumes
docker volume prune
# Remove everything (CAUTION!)
docker system prune -a
Development Workflow
# 1. Make code changes in backend/frontend
# 2. Rebuild affected service
docker-compose build backend
# 3. Restart service
docker-compose up -d backend
# 4. Check logs
docker-compose logs -f backend
Health Checks
# Check backend health
curl http://localhost:3000/health
# Check frontend health
curl http://localhost:80/health
# Check all services health
docker-compose ps
Environment Variables
# View service environment
docker-compose exec backend env
# Override environment variable
BACKEND_PORT=4000 docker-compose up -d
# Use different env file
docker-compose --env-file .env.production up -d
Build Individual Images
Backend
cd backend
docker build -t feuerwehr-backend:latest .
docker run -p 3000:3000 \
-e DATABASE_URL=postgresql://user:pass@postgres:5432/db \
-e JWT_SECRET=your_secret \
feuerwehr-backend:latest
Frontend
cd frontend
docker build \
--build-arg VITE_API_URL=http://localhost:3000 \
-t feuerwehr-frontend:latest .
docker run -p 80:80 feuerwehr-frontend:latest
Production Deployment
Using Docker Compose
# 1. Set production environment variables
export POSTGRES_PASSWORD="secure_production_password"
export JWT_SECRET="secure_jwt_secret_min_32_chars"
export CORS_ORIGIN="https://yourdomain.com"
export VITE_API_URL="https://api.yourdomain.com"
# 2. Build and start
docker-compose up -d
# 3. Monitor
docker-compose logs -f
Using Container Registry
# Tag images
docker tag feuerwehr-backend:latest registry.example.com/feuerwehr-backend:v1.0.0
docker tag feuerwehr-frontend:latest registry.example.com/feuerwehr-frontend:v1.0.0
# Push to registry
docker push registry.example.com/feuerwehr-backend:v1.0.0
docker push registry.example.com/feuerwehr-frontend:v1.0.0
# Pull on production server
docker pull registry.example.com/feuerwehr-backend:v1.0.0
docker pull registry.example.com/feuerwehr-frontend:v1.0.0
# Run with docker-compose
docker-compose up -d
Monitoring
Real-time Stats
# All containers
docker stats
# Specific container
docker stats feuerwehr_backend_prod
Inspect Containers
# Container details
docker inspect feuerwehr_backend_prod
# Container IP address
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' feuerwehr_backend_prod
# Container logs location
docker inspect --format='{{.LogPath}}' feuerwehr_backend_prod
Cleanup
Remove Test Images
docker rmi feuerwehr-backend-test:latest
docker rmi feuerwehr-frontend-test:latest
Clean Build Cache
docker builder prune
Remove Unused Resources
# Remove stopped containers
docker container prune -f
# Remove unused images
docker image prune -f
# Remove unused volumes
docker volume prune -f
# Remove unused networks
docker network prune -f
# Remove everything unused
docker system prune -af
Security
Check for Vulnerabilities
# Scan backend image
docker scan feuerwehr-backend:latest
# Scan frontend image
docker scan feuerwehr-frontend:latest
Update Base Images
# Pull latest base images
docker pull node:20-alpine
docker pull nginx:alpine
docker pull postgres:16-alpine
# Rebuild with new base images
docker-compose build --no-cache
docker-compose up -d
Performance Tuning
Resource Limits
Add to docker-compose.yml:
services:
backend:
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
reservations:
cpus: '0.5'
memory: 256M
Check Resource Usage
docker stats --no-stream
Common Issues
Port Already in Use
# Find process using port
lsof -i :3000
# Kill process
kill -9 <PID>
# Or use different port
BACKEND_PORT=3001 docker-compose up -d
Database Connection Failed
# Check postgres is healthy
docker-compose ps postgres
# View postgres logs
docker-compose logs postgres
# Restart postgres
docker-compose restart postgres
Container Crashes
# View crash logs
docker-compose logs backend
# Inspect container
docker inspect feuerwehr_backend_prod
# Check health
docker inspect --format='{{.State.Health.Status}}' feuerwehr_backend_prod