259 lines
9.5 KiB
Text
259 lines
9.5 KiB
Text
# Docker Module - Container image building and management (Nickel-native)
|
||
# =========================================================================
|
||
# Source of truth: Nickel templates in schemas/platform/templates/docker/
|
||
# Dockerfiles are GENERATED on-demand, NOT tracked in git
|
||
|
||
# Show detailed docker help
|
||
@docker-help:
|
||
echo "🐳 DOCKER MODULE HELP (Nickel-Native Build System)"
|
||
echo "=================================================="
|
||
echo ""
|
||
echo "This module uses Nickel templates + cargo-chef for optimized Docker builds:"
|
||
echo "• Dockerfiles generated on-demand from Nickel schemas"
|
||
echo "• 4-stage builds: PLANNER → CACHER → BUILDER → RUNTIME"
|
||
echo "• 60-80% build time reduction via dependency caching"
|
||
echo "• BuildKit cache modes: local, registry, inline"
|
||
echo "• Mode-specific tuning: solo, cicd, enterprise"
|
||
echo ""
|
||
echo "SERVICES:"
|
||
echo " orchestrator - Workflow engine and task queue"
|
||
echo " control-center - Policy and RBAC management"
|
||
echo " mcp-server - AI/LLM integration"
|
||
echo " extension-registry - Plugin management"
|
||
echo " provisioning-daemon - System daemon"
|
||
echo " ai-service - AI service integration"
|
||
echo " rag - Retrieval augmented generation"
|
||
echo " vault-service - Secret management"
|
||
echo ""
|
||
echo "RECIPES:"
|
||
echo " docker-gen Generate Dockerfiles from Nickel templates"
|
||
echo " docker-gen-compose Generate docker-compose.build.yml"
|
||
echo " docker-build SERVICES Build service(s) with auto-generation"
|
||
echo " docker-build-all Build all services with BuildKit cache"
|
||
echo " docker-clean-gen Remove generated Dockerfiles"
|
||
echo " image-list Show available services"
|
||
echo " image-validate Validate all built images"
|
||
echo " image-clean Remove all provisioning images"
|
||
echo ""
|
||
echo "EXAMPLES:"
|
||
echo " just docker-gen orchestrator # Generate Dockerfile for orchestrator"
|
||
echo " just docker-gen-compose # Generate docker-compose.build.yml"
|
||
echo " just docker-build orchestrator # Build orchestrator (auto-generates Dockerfile)"
|
||
echo " just docker-build-all # Build all services with parallel BuildKit"
|
||
echo " just docker-clean-gen # Remove all generated Dockerfiles"
|
||
echo ""
|
||
echo "NOTES:"
|
||
echo " • Dockerfiles are NOT tracked in git (source = Nickel templates)"
|
||
echo " • docker-build auto-generates Dockerfiles before building"
|
||
echo " • Change base images in schemas/platform/docker-build.ncl"
|
||
|
||
# Generate Dockerfiles from Nickel templates (on-demand)
|
||
docker-gen MODE='solo' +SERVICES='all':
|
||
#!/usr/bin/env bash
|
||
cd {{provisioning_root}}
|
||
if [ "{{SERVICES}}" == "all" ]; then
|
||
echo "🏗️ Generating Dockerfiles for all services (mode: {{MODE}})..."
|
||
{{nu}} scripts/docker-generate-builds.nu all --mode {{MODE}}
|
||
else
|
||
echo "🏗️ Generating Dockerfiles for: {{SERVICES}} (mode: {{MODE}})..."
|
||
for service in {{SERVICES}}; do
|
||
{{nu}} scripts/docker-generate-builds.nu "$service" --mode {{MODE}}
|
||
done
|
||
fi
|
||
|
||
# Generate docker-compose.build.yml from Nickel template
|
||
docker-gen-compose REGISTRY='localhost:5000':
|
||
#!/usr/bin/env bash
|
||
cd {{provisioning_root}}
|
||
echo "🏗️ Generating docker-compose.build.yml (registry: {{REGISTRY}})..."
|
||
{{nu}} scripts/docker-generate-compose.nu --registry {{REGISTRY}}
|
||
|
||
# Build Docker images with auto-generation and BuildKit cache
|
||
docker-build MODE='solo' REGISTRY='localhost:5000' +SERVICES='':
|
||
#!/usr/bin/env bash
|
||
cd {{provisioning_root}}
|
||
if [ -z "{{SERVICES}}" ]; then
|
||
echo "🐳 Building all services (mode: {{MODE}})..."
|
||
{{nu}} scripts/docker-build.nu --all --mode {{MODE}} --registry {{REGISTRY}}
|
||
else
|
||
echo "🐳 Building service(s): {{SERVICES}} (mode: {{MODE}})..."
|
||
{{nu}} scripts/docker-build.nu {{SERVICES}} --mode {{MODE}} --registry {{REGISTRY}}
|
||
fi
|
||
|
||
# Build all services with BuildKit parallel builds
|
||
docker-build-all MODE='solo' REGISTRY='localhost:5000':
|
||
#!/usr/bin/env bash
|
||
cd {{provisioning_root}}
|
||
echo "🐳 Building all platform services (mode: {{MODE}})..."
|
||
{{nu}} scripts/docker-build.nu --all --mode {{MODE}} --registry {{REGISTRY}}
|
||
|
||
# Remove all generated Dockerfiles (not tracked in git)
|
||
docker-clean-gen:
|
||
#!/usr/bin/env bash
|
||
cd {{provisioning_root}}
|
||
echo "🧹 Removing generated Dockerfiles..."
|
||
find platform/crates -name "Dockerfile" -type f -delete
|
||
rm -f docker-compose.build.yml
|
||
echo "✅ Generated files cleaned"
|
||
|
||
# Legacy: Build platform service Docker images (deprecated - use docker-build)
|
||
build-images +SERVICES='':
|
||
#!/usr/bin/env bash
|
||
echo "⚠️ DEPRECATED: Use 'just docker-build' instead"
|
||
cd {{provisioning_root}}
|
||
if [ -z "{{SERVICES}}" ]; then
|
||
{{nu}} scripts/docker-build.nu --all
|
||
else
|
||
{{nu}} scripts/docker-build.nu {{SERVICES}}
|
||
fi
|
||
|
||
# List available service images
|
||
@image-list:
|
||
echo "📋 Available Platform Services"
|
||
echo "=============================="
|
||
echo ""
|
||
echo "Core Platform Services:"
|
||
echo " • orchestrator (Rust) - Workflow engine and task queue"
|
||
echo " • control-center (Rust) - Policy and RBAC management"
|
||
echo " • mcp-server (Rust) - AI/LLM integration"
|
||
echo " • extension-registry (Rust) - Plugin management"
|
||
echo " • rag (Rust) - Retrieval augmented generation"
|
||
echo ""
|
||
echo "Image Tags:"
|
||
echo " • provisioning-orchestrator:latest"
|
||
echo " • provisioning-control-center:latest"
|
||
echo " • provisioning-mcp-server:latest"
|
||
echo " • provisioning-extension-registry:latest"
|
||
echo " • provisioning-rag:latest"
|
||
echo ""
|
||
echo "Usage: just build-images [service...]"
|
||
echo " just build-images orchestrator"
|
||
echo " just build-images orchestrator control-center"
|
||
|
||
# Validate all built Docker images
|
||
@image-validate:
|
||
#!/usr/bin/env bash
|
||
echo "🔍 Validating platform Docker images..."
|
||
echo ""
|
||
|
||
SERVICES=("provisioning-orchestrator:latest" \
|
||
"provisioning-control-center:latest" \
|
||
"provisioning-mcp-server:latest" \
|
||
"provisioning-extension-registry:latest" \
|
||
"provisioning-rag:latest")
|
||
|
||
VALID=0
|
||
INVALID=0
|
||
|
||
for image in "${SERVICES[@]}"; do
|
||
if docker image inspect "$image" >/dev/null 2>&1; then
|
||
echo "✅ $image"
|
||
((VALID++))
|
||
else
|
||
echo "❌ $image (not found)"
|
||
((INVALID++))
|
||
fi
|
||
done
|
||
|
||
echo ""
|
||
echo "📊 Validation Summary"
|
||
echo "===================="
|
||
echo "Valid: $VALID"
|
||
echo "Invalid: $INVALID"
|
||
|
||
if [ $INVALID -gt 0 ]; then
|
||
echo ""
|
||
echo "Run 'just build-images' to build missing images"
|
||
exit 1
|
||
fi
|
||
|
||
# Remove all provisioning platform images
|
||
@image-clean:
|
||
#!/usr/bin/env bash
|
||
echo "🧹 Removing provisioning platform Docker images..."
|
||
|
||
IMAGES=("provisioning-orchestrator:latest" \
|
||
"provisioning-control-center:latest" \
|
||
"provisioning-mcp-server:latest" \
|
||
"provisioning-extension-registry:latest" \
|
||
"provisioning-rag:latest")
|
||
|
||
for image in "${IMAGES[@]}"; do
|
||
if docker image inspect "$image" >/dev/null 2>&1; then
|
||
echo "Removing $image..."
|
||
docker image rm "$image" || echo "⚠️ Failed to remove $image"
|
||
fi
|
||
done
|
||
|
||
echo "✅ Image cleanup completed"
|
||
|
||
# Show Docker image information
|
||
@image-info:
|
||
#!/usr/bin/env bash
|
||
echo "🐳 Provisioning Platform Docker Images"
|
||
echo "======================================"
|
||
echo ""
|
||
|
||
IMAGES=("provisioning-orchestrator:latest" \
|
||
"provisioning-control-center:latest" \
|
||
"provisioning-mcp-server:latest" \
|
||
"provisioning-extension-registry:latest" \
|
||
"provisioning-rag:latest")
|
||
|
||
for image in "${IMAGES[@]}"; do
|
||
if docker image inspect "$image" >/dev/null 2>&1; then
|
||
echo "📦 $image"
|
||
docker image inspect "$image" | jq -r '.[0] | " Created: \(.Created)\n Size: \(.Size) bytes\n OS: \(.Os)/\(.Architecture)"'
|
||
echo ""
|
||
fi
|
||
done
|
||
|
||
if [ $(docker images --filter "reference=provisioning-*" --quiet | wc -l) -eq 0 ]; then
|
||
echo "ℹ️ No provisioning images found. Run 'just build-images' to build them."
|
||
fi
|
||
|
||
# Build specific service image
|
||
[no-cd]
|
||
build-service SERVICE:
|
||
#!/usr/bin/env bash
|
||
cd {{provisioning_root}}
|
||
echo "🐳 Building service image: {{SERVICE}}"
|
||
{{nu}} scripts/build-images.nu {{SERVICE}}
|
||
|
||
# Show Docker system status
|
||
@docker-status:
|
||
#!/usr/bin/env bash
|
||
echo "🐳 Docker System Status"
|
||
echo "======================"
|
||
echo ""
|
||
|
||
if ! command -v docker &> /dev/null; then
|
||
echo "❌ Docker is not installed"
|
||
exit 1
|
||
fi
|
||
|
||
echo "Docker version:"
|
||
docker --version
|
||
echo ""
|
||
|
||
echo "Docker daemon status:"
|
||
if docker ps -q >/dev/null 2>&1; then
|
||
echo "✅ Docker daemon is running"
|
||
else
|
||
echo "❌ Docker daemon is not running or not accessible"
|
||
exit 1
|
||
fi
|
||
|
||
echo ""
|
||
echo "Provisioning platform images:"
|
||
docker images --filter "reference=provisioning-*" | tail -n +2 || echo "None found"
|
||
|
||
echo ""
|
||
echo "Docker disk usage:"
|
||
docker system df
|
||
|
||
# Build and verify Docker images
|
||
@build-verify:
|
||
just build-images
|
||
just image-validate
|
||
echo "✅ Docker images built and verified"
|