Docker Integration

Complete containerization solution for JAngular applications with Docker Compose, multi-stage builds, and production-ready deployment configurations.

JAngular provides comprehensive Docker integration with optimized containerization for all application components. The Docker setup includes multi-stage builds, persistent data storage, service orchestration, and production-ready configurations for seamless deployment across environments.

Containerized Architecture

The JAngular Docker setup consists of a complete microservices architecture with the following containerized components:

Core Application Services

  • Backend Service - Spring Boot application with Eclipse Temurin JDK 21
  • Frontend Service - Angular application served through Nginx with optimized static content delivery
  • Reverse Proxy - Nginx-based routing and load balancing for production deployments

Database Services

  • MySQL 8.0+ - High-performance relational database with InnoDB storage engine
  • PostgreSQL 15+ - Advanced open-source database with JSON support and performance optimizations
  • Microsoft SQL Server 2019+ - Enterprise database for Windows-based environments

Database Management Tools

  • phpMyAdmin - Web-based MySQL administration interface
  • pgAdmin 4 - PostgreSQL administration and development platform
  • SQL Server Management Studio (SSMS) - Microsoft SQL Server administration tools

Docker CLI Management

The JAngular CLI provides an interactive Docker management interface for easy container orchestration:

Interactive Docker Menu

jangular docker

This command launches an interactive menu with the following capabilities:

Service Management

  • Start All Services - Launch complete application stack with one command
  • Stop All Services - Gracefully shutdown all containers
  • Start Specific Services - Launch individual components (database, backend, frontend)
  • Restart Services - Restart containers with configuration changes

Monitoring & Diagnostics

  • View Service Logs - Real-time log streaming for all or specific services
  • Check Database Health - Database connectivity and performance checks
  • Container Status - Monitor container health and resource usage
  • Network Diagnostics - Inter-service communication testing

Data Management

  • Reset Volumes - Clean database volumes and reset to initial state
  • Backup Data - Create persistent backups of database volumes
  • Import/Export - Database migration and seeding utilities

Deployment Options

  • Development Mode - Hot reload enabled with debug configurations
  • Production Mode - Optimized builds with security hardening
  • Testing Mode - Isolated environment for automated testing

Multi-Stage Docker Builds

Optimized Docker builds using multi-stage architecture for minimal image sizes and enhanced security:

Backend Build Configuration

# Stage 1: Build Environment FROM eclipse-temurin:21-jdk-jammy AS build WORKDIR /app COPY pom.xml . COPY .mvn .mvn COPY mvnw . RUN chmod +x mvnw COPY src ./src RUN ./mvnw clean package -DskipTests # Stage 2: Runtime Environment FROM eclipse-temurin:21-jre-jammy RUN groupadd -r spring && useradd -r -g spring spring USER spring:spring WORKDIR /app COPY --from=build /app/target/*.jar app.jar EXPOSE 8080 HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD curl -f http://localhost:8080/actuator/health || exit 1 ENTRYPOINT ["java", "-jar", "app.jar"]

Frontend Build Configuration

# Stage 1: Build Environment FROM node:20-alpine AS build WORKDIR /app COPY package*.json ./ RUN npm ci --only=production && npm cache clean --force COPY . . RUN npm run build --prod # Stage 2: Web Server FROM nginx:alpine RUN addgroup -g 1001 -S nginx && adduser -S nginx -u 1001 COPY --from=build /app/dist/frontend/browser /usr/share/nginx/html COPY nginx.conf /etc/nginx/nginx.conf COPY nginx-default.conf /etc/nginx/conf.d/default.conf EXPOSE 80 HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost/ || exit 1 CMD ["nginx", "-g", "daemon off;"]

Build Optimizations

  • Layer Caching - Optimized layer ordering for maximum cache efficiency
  • Multi-Architecture - Support for ARM64 and AMD64 architectures
  • Security Hardening - Non-root users and minimal attack surface
  • Health Checks - Built-in health monitoring for container orchestration

Docker Compose Orchestration

Comprehensive service orchestration with environment-specific configurations:

Development Configuration

# Start development environment docker-compose up -d # View aggregated logs docker-compose logs -f # View logs for specific service docker-compose logs -f backend docker-compose logs -f frontend docker-compose logs -f mysql # Stop all services docker-compose down # Stop and remove volumes (clean slate) docker-compose down -v --remove-orphans

Production Configuration

# Deploy production environment docker-compose -f docker-compose.prod.yml up -d # Production health check docker-compose -f docker-compose.prod.yml ps # Scale services docker-compose -f docker-compose.prod.yml up -d --scale backend=3 # Production shutdown docker-compose -f docker-compose.prod.yml down

Service Dependencies

  • Startup Order - Database services start before application services
  • Health Dependencies - Applications wait for database readiness
  • Network Isolation - Services communicate through dedicated Docker networks
  • Volume Management - Persistent storage for databases and configuration

Environment Configuration

Flexible configuration management supporting multiple deployment scenarios:

Environment Variables

# Backend Environment SPRING_PROFILES_ACTIVE=docker SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/jangular SPRING_DATASOURCE_USERNAME=jangular_user SPRING_DATASOURCE_PASSWORD=secure_password JWT_SECRET=your-production-jwt-secret CORS_ALLOWED_ORIGINS=http://frontend:80 # Frontend Environment ANGULAR_ENV=production API_BASE_URL=http://backend:8080/api AUTH_BASE_URL=http://backend:8080/auth # Database Environment MYSQL_ROOT_PASSWORD=root_password MYSQL_DATABASE=jangular MYSQL_USER=jangular_user MYSQL_PASSWORD=secure_password

Configuration Files

  • .env - Development environment variables
  • .env.prod - Production environment variables
  • .env.test - Testing environment variables
  • docker-compose.override.yml - Local development overrides

Security Considerations

  • Secret Management - Docker secrets for sensitive configuration
  • Environment Isolation - Separate configurations per environment
  • Credential Rotation - Support for dynamic credential updates
  • Access Control - Network policies and service isolation

Persistent Storage & Volumes

Robust data persistence with backup and recovery capabilities:

Volume Configuration

  • Database Volumes - Persistent storage for database files
  • Configuration Volumes - Application configuration and secrets
  • Log Volumes - Centralized logging and audit trails
  • Upload Volumes - User-generated content storage

Backup Strategy

# Database backup docker-compose exec mysql mysqldump -u root -p jangular > backup.sql # Volume backup docker run --rm -v jangular_mysql_data:/data -v $(pwd):/backup \ alpine tar czf /backup/mysql-backup.tar.gz /data # Restore from backup docker run --rm -v jangular_mysql_data:/data -v $(pwd):/backup \ alpine tar xzf /backup/mysql-backup.tar.gz -C /

Data Management

  • Volume Snapshots - Point-in-time backup creation
  • Data Migration - Cross-environment data transfer
  • Cleanup Procedures - Safe volume removal and cleanup
  • Storage Monitoring - Disk usage and performance metrics

Production Deployment

Enterprise-ready deployment with advanced orchestration and monitoring:

Production Features

  • SSL/TLS Termination - Automatic certificate management with Let's Encrypt
  • Load Balancing - Multi-instance backend scaling with health checks
  • Reverse Proxy - Nginx-based traffic routing and caching
  • Resource Limits - Memory and CPU constraints for optimal performance
  • Health Monitoring - Comprehensive health checks and alerting
  • Log Aggregation - Centralized logging with structured output

Production Commands

# Production deployment docker-compose -f docker-compose.prod.yml up -d # Scale backend services docker-compose -f docker-compose.prod.yml up -d --scale backend=3 # Rolling updates docker-compose -f docker-compose.prod.yml up -d --force-recreate backend # Monitor production health docker-compose -f docker-compose.prod.yml ps docker-compose -f docker-compose.prod.yml top

Monitoring & Observability

  • Health Endpoints - Application and database health monitoring
  • Metrics Collection - Performance metrics and resource usage
  • Log Analysis - Error tracking and performance analysis
  • Alerting - Automated notifications for critical issues

Database Integration

Comprehensive database support with administration tools and health monitoring:

Database Health Checks

# MySQL health check docker-compose exec mysql mysqladmin ping -h localhost -u root -p # PostgreSQL health check docker-compose exec postgres pg_isready -U postgres # SQL Server health check docker-compose exec mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P password -Q "SELECT @@VERSION"

Database Administration

  • Web Interfaces - Browser-based database management
  • Migration Tools - Automated schema migration and seeding
  • Performance Monitoring - Query analysis and optimization tools
  • Backup Automation - Scheduled backup and retention policies

Connection Management

  • Connection Pooling - Optimized database connection management
  • SSL Encryption - Secure database communications
  • Access Control - Role-based database access permissions
  • Network Isolation - Database network security and isolation

Production Note: The Docker configuration includes comprehensive security hardening, performance optimization, and monitoring capabilities suitable for enterprise production environments.