393 lines
7.2 KiB
Markdown
393 lines
7.2 KiB
Markdown
# Docker Quick Reference
|
|
|
|
## Essential Commands
|
|
|
|
### Initial Setup
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# Service status and health
|
|
docker-compose ps
|
|
|
|
# Container resource usage
|
|
docker stats
|
|
|
|
# Disk usage
|
|
docker system df
|
|
```
|
|
|
|
### Database Operations
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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
|
|
```bash
|
|
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
|
|
```bash
|
|
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
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# All containers
|
|
docker stats
|
|
|
|
# Specific container
|
|
docker stats feuerwehr_backend_prod
|
|
```
|
|
|
|
### Inspect Containers
|
|
```bash
|
|
# 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
|
|
```bash
|
|
docker rmi feuerwehr-backend-test:latest
|
|
docker rmi feuerwehr-frontend-test:latest
|
|
```
|
|
|
|
### Clean Build Cache
|
|
```bash
|
|
docker builder prune
|
|
```
|
|
|
|
### Remove Unused Resources
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# Scan backend image
|
|
docker scan feuerwehr-backend:latest
|
|
|
|
# Scan frontend image
|
|
docker scan feuerwehr-frontend:latest
|
|
```
|
|
|
|
### Update Base Images
|
|
```bash
|
|
# 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:
|
|
```yaml
|
|
services:
|
|
backend:
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
cpus: '1.0'
|
|
memory: 512M
|
|
reservations:
|
|
cpus: '0.5'
|
|
memory: 256M
|
|
```
|
|
|
|
### Check Resource Usage
|
|
```bash
|
|
docker stats --no-stream
|
|
```
|
|
|
|
## Common Issues
|
|
|
|
### Port Already in Use
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# Check postgres is healthy
|
|
docker-compose ps postgres
|
|
|
|
# View postgres logs
|
|
docker-compose logs postgres
|
|
|
|
# Restart postgres
|
|
docker-compose restart postgres
|
|
```
|
|
|
|
### Container Crashes
|
|
```bash
|
|
# 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
|
|
```
|
|
|
|
## References
|
|
|
|
- [Docker Setup Documentation](DOCKER_SETUP.md)
|
|
- [Summary Document](SUMMARY.md)
|
|
- [Backend Dockerfile](backend/Dockerfile)
|
|
- [Frontend Dockerfile](frontend/Dockerfile)
|
|
- [Nginx Configuration](frontend/nginx.conf)
|
|
- [Docker Compose File](docker-compose.yml)
|