Dynamic Compose Architecture Roadmap
Vision
Transform docker-wrapper from a Docker CLI wrapper into a comprehensive tool for programmatic Docker orchestration through dynamic compose generation.
Core Concept
Instead of the original 3-tier system (Templates → Groups → Stacks), we're pivoting to a simpler, more powerful approach:
- Templates: Domain experts that handle both direct container execution AND compose service generation
- Dynamic Compose: Programmatic docker-compose.yml generation with logic, conditionals, and type safety
Architecture Components
1. docker-wrapper (Core)
2. Templates
Templates are domain experts that encapsulate all knowledge about running a service:
3. Compose Builder
The new star feature - programmatic compose generation:
Implementation Phases
Phase 1: Foundation ✅
Phase 2: Compose Builder Core
Phase 3: Template Integration
Phase 4: Advanced Features
Phase 5: Developer Experience
Example Use Cases
Dynamic Environment Configuration
let compose = match env {
"development" => dev_stack()
.with_debugging()
.with_hot_reload(),
"testing" => test_stack()
.with_isolated_databases()
.with_test_data(),
"staging" => staging_stack()
.with_monitoring()
.with_ssl(),
_ => panic!("Unknown environment")
};
Conditional Services
let mut compose = base_stack();
if feature_flags.needs_redis {
compose = compose.add_service(Redis::new());
}
if feature_flags.needs_search {
compose = compose.add_service(Elasticsearch::new());
}
Template with Complex Setup
// Direct execution - full automation
let redis = RedisEnterprise::new()
.with_cluster_setup()
.start()
.await?;
// Compose generation - container + setup script
let compose = redis.to_compose();
let setup = redis.generate_setup_script();
Benefits Over Static Compose
- Type Safety: Catch configuration errors at compile time
- Logic & Conditionals: Use if/else, loops, functions
- Environment Awareness: Different configs for dev/test/prod
- DRY Principle: Reuse common patterns
- IDE Support: Autocomplete, refactoring, go-to-definition
- Testing: Unit test your infrastructure
Success Metrics
Open Questions
- Should compose-builder be part of docker-wrapper or separate crate?
- How to handle compose features that require external files (configs, secrets)?
- Should we support docker-compose extensions (x- fields)?
- How to handle compose profiles?
Related Issues
Let's discuss and refine this roadmap!
Dynamic Compose Architecture Roadmap
Vision
Transform docker-wrapper from a Docker CLI wrapper into a comprehensive tool for programmatic Docker orchestration through dynamic compose generation.
Core Concept
Instead of the original 3-tier system (Templates → Groups → Stacks), we're pivoting to a simpler, more powerful approach:
Architecture Components
1. docker-wrapper (Core)
2. Templates
Templates are domain experts that encapsulate all knowledge about running a service:
3. Compose Builder
The new star feature - programmatic compose generation:
Implementation Phases
Phase 1: Foundation ✅
Phase 2: Compose Builder Core
Phase 3: Template Integration
to_compose_service()to existing templatesgenerate_setup_script()for complex setupPhase 4: Advanced Features
Phase 5: Developer Experience
Example Use Cases
Dynamic Environment Configuration
Conditional Services
Template with Complex Setup
Benefits Over Static Compose
Success Metrics
Open Questions
Related Issues
Let's discuss and refine this roadmap!