inital
This commit is contained in:
392
DOCKER_QUICK_REF.md
Normal file
392
DOCKER_QUICK_REF.md
Normal file
@@ -0,0 +1,392 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user