Skip to content

Latest commit

 

History

History
582 lines (454 loc) · 16.5 KB

File metadata and controls

582 lines (454 loc) · 16.5 KB

GoDockerManager

A modern, comprehensive CLI tool for managing Docker containers built with Go 1.24 and Docker SDK v28.4.0.

🚀 Features

Core Container Management

  • Multi-container Operations: Start/stop multiple containers at once
  • Advanced Filtering: Filter containers by status, image, or patterns
  • Pattern Matching: Use wildcards like app-* to match multiple containers
  • Interactive Confirmation: Prompts for destructive operations on multiple containers
  • Container Health Monitoring: Real-time health status with color coding

Advanced Monitoring & Observability

  • Real-time Statistics: Live CPU, memory, network, and disk I/O metrics
  • Streaming Mode: Watch container stats with configurable intervals
  • Log Aggregation: View logs from multiple containers simultaneously
  • Multiple Output Formats: Table, JSON, YAML, CSV exports
  • Color-coded Status: Visual indicators for container states and health

📊 Enterprise-Grade Monitoring (NEW)

  • Historical Metrics Storage: Time-series data persistence with configurable retention
  • Advanced Alerting System: Real-time notifications with configurable thresholds
  • Container Security Scanning: Automated vulnerability detection and reporting
  • Prometheus Integration: Native metrics export for observability platforms
  • Grafana Dashboard Generation: Auto-generated visualization dashboards

Docker Compose Integration

  • Full Lifecycle Management: compose up, down, restart, ps commands
  • Compose File Support: Parse and manage docker-compose.yml files
  • Service Management: List and manage compose-based applications

Development & Templates

  • Application Templates: Quick-start with React, Nginx, WordPress, and more
  • Development Mode: Hot-reload with automatic volume mounting
  • Environment Management: Automatic .env file generation
  • Project Initialization: init command for rapid project setup

Configuration & Flexibility

  • YAML Configuration: Flexible configuration with environment defaults
  • Cross-platform: Works on Linux, macOS, and Windows
  • Well Tested: 100% test coverage with comprehensive mock implementations
  • Clean Architecture: Interface-based design for extensibility
  • Security & Compliance: Built-in vulnerability scanning and metrics

📋 Requirements

  • Go: Version 1.24 or higher
  • Docker: Engine 20.10+ with API access
  • Operating System: Linux, macOS, or Windows

🔧 Technical Stack

  • Language: Go 1.24
  • CLI Framework: Cobra v1.10.1
  • Docker SDK: v28.4.0+incompatible
  • Testing: Testify v1.11.1
  • Configuration: YAML v3
  • Compose Support: compose-spec v2.9.0
  • Color Output: fatih/color v1.18.0
  • Prometheus Integration: client_golang v1.20.5
  • Metrics Collection: Native time-series storage
  • Security Scanning: Built-in vulnerability detection

📦 Installation

Quick Install

# Clone the repository
git clone https://github.com/elliotsecops/GoDockerManager.git
cd GoDockerManager

# Build and install
./install.sh

Manual Installation

# Build the binary
go build -o docker-container-manager ./cmd/docker-container-manager

# Move to system PATH
sudo mv docker-container-manager /usr/local/bin/
sudo chmod +x /usr/local/bin/docker-container-manager

From Source

git clone https://github.com/elliotsecops/GoDockerManager.git
cd GoDockerManager
go mod tidy
go build -o docker-container-manager ./cmd/docker-container-manager

⚙️ Configuration

The tool uses a YAML configuration file for settings. Create config.yaml in your working directory:

# Docker socket path (default: unix:///var/run/docker.sock)
docker_socket: "unix:///var/run/docker.sock"

# Default output format: table, json, yaml, csv (default: table)
output_format: "table"

# Metrics collection settings
enable_metrics: true
metrics_retention: 168  # hours (7 days)

# Alerting configuration
alerting:
  enabled: true
  cpu_threshold: 80.0    # percentage
  memory_threshold: 90.0 # percentage
  disk_threshold: 85.0   # percentage
  notification_method: "console"  # console, email, webhook

Configuration Options

Option Type Default Description
docker_socket string unix:///var/run/docker.sock Docker daemon socket path
output_format string table Default output format for list commands
enable_metrics bool true Enable metrics collection
metrics_retention int 168 Metrics retention period in hours
alerting.enabled bool true Enable alerting system
alerting.cpu_threshold float 80.0 CPU usage alert threshold (%)
alerting.memory_threshold float 90.0 Memory usage alert threshold (%)
alerting.disk_threshold float 85.0 Disk usage alert threshold (%)
alerting.notification_method string console Alert notification method

Environment Variables

You can override configuration using environment variables:

export DOCKER_SOCKET="tcp://localhost:2376"
export OUTPUT_FORMAT="json"

Configuration Locations

The tool looks for configuration in this order:

  1. config.yaml in current working directory
  2. Environment variables
  3. Built-in defaults

If no configuration file is found, the following defaults are used:

  • Docker Socket: unix:///var/run/docker.sock
  • Output Format: table

🎯 Usage

Basic Commands

List All Containers

docker-container-manager list
CONTAINER ID   IMAGE                 STATUS           NAMES
affe1890e1a1   api-security-scanner  Exited (2 days)  api-security-scanner
45dc1f6d281a   juice-shop:latest     Running          juice-shop

Start a Container

docker-container-manager start <container-id>
docker-container-manager start affe1890e1a1

Stop a Container

docker-container-manager stop <container-id>
docker-container-manager stop affe1890e1a1

Advanced Commands

View Container Logs

docker-container-manager logs <container-id>

Aggregate Logs from Multiple Containers

docker-container-manager logs container1 container2 container3
docker-container-manager logs --filter "status=running"

Inspect Container Details

docker-container-manager inspect <container-id>

Monitor Container Statistics

docker-container-manager stats <container-id>

Real-time Statistics Monitoring

docker-container-manager stats <container-id> --watch --interval 2s
Container stats for affe1890e1a1 (refreshing every 2s)
--------------------------------------------------
CPU Usage: 12.5%
Memory Usage: 256.0 MiB / 1.0 GiB
Network I/O: 1.2 MiB RX / 2.4 MiB TX
Block I/O: 15.5 MiB read / 8.3 MiB write
--------------------------------------------------

Multi-Container Operations

Start Multiple Containers

docker-container-manager start container1 container2 container3
docker-container-manager start container1,container2,container3
docker-container-manager start "app-*"

Stop with Filters

docker-container-manager stop --filter "status=running" --filter "image=nginx"

Batch Operations with Confirmation

docker-container-manager stop app-web app-db app-api
# You are about to stop 3 containers: [app-web app-db app-api]
# Do you want to continue? (y/N): y

Docker Compose Management

Start Compose Application

docker-container-manager compose up
docker-container-manager compose up --file docker-compose.prod.yml

Stop Compose Application

docker-container-manager compose down

List Compose Services

docker-container-manager compose ps
CONTAINER ID   SERVICE         STATUS          COMMAND         CREATED
abc123def456   web             Running          npm start      1630000000
def456ghi789   db              Running          docker-entry…  1630000000

Development & Templates

Initialize Project from Template

docker-container-manager init react-app
docker-container-manager init wordpress --path ./my-project

Development Mode with Hot Reload

docker-container-manager dev --image node:16
# Mounts current directory to /app in container

List Available Templates

docker-container-manager init --help
# Templates: react-app, nginx, wordpress, default

Advanced Output Formats

JSON Output

docker-container-manager list --format json
[
  {
    "id": "container1-id",
    "image": "nginx:latest",
    "status": "Running",
    "health": "healthy",
    "names": ["/web-server"]
  }
]

YAML Output

docker-container-manager list --format yaml

CSV Export

docker-container-manager list --format csv > containers.csv

Help and Autocompletion

# Show general help
docker-container-manager --help

# Show command-specific help
docker-container-manager list --help

# Generate shell autocompletion
docker-container-manager completion bash
docker-container-manager completion zsh
docker-container-manager completion fish

📊 Metrics & Monitoring Commands

Historical Metrics

# View metrics history for a container
docker-container-manager metrics history <container-id> --hours 24

# Collect current metrics
docker-container-manager metrics collect <container-id>

# Export metrics to file
docker-container-manager metrics export <container-id> --format json --output metrics.json

Real-time Alerting

# View current alerts
docker-container-manager alerts list

# View alerts for specific container
docker-container-manager alerts list <container-id>

# Clear alerts
docker-container-manager alerts clear

Security Scanning

# Scan container for vulnerabilities
docker-container-manager security scan <container-id>

# Generate security report
docker-container-manager security report <container-id>

# Scan all containers
docker-container-manager security scan --all

🔬 Prometheus & Grafana Integration

Start Prometheus Metrics Exporter

# Start metrics exporter on default port 8080
docker-container-manager prometheus

# Start on custom port with custom interval
docker-container-manager prometheus --port 9090 --interval 15s

The exporter provides:

  • Metrics endpoint: http://localhost:8080/metrics
  • Health check: http://localhost:8080/health
  • Web interface: http://localhost:8080/

Generate Grafana Dashboard

# Generate dashboard JSON file
docker-container-manager grafana

# Save to custom location
docker-container-manager grafana --output ./my-dashboard.json

Import the generated JSON file into Grafana to visualize:

  • Container CPU usage over time
  • Memory consumption trends
  • Network traffic patterns
  • Disk I/O metrics
  • Container health status

🏗️ Project Structure

GoDockerManager/
├── cmd/docker-container-manager/
│   └── main.go              # CLI entry point
├── internal/
│   ├── config/
│   │   └── config.go         # Configuration management
│   ├── docker/
│   │   ├── docker.go         # Docker client interface
│   │   ├── commands.go      # Business logic & display functions
│   │   ├── compose.go       # Docker Compose integration
│   │   ├── metrics.go        # Historical metrics storage
│   │   ├── alerting.go      # Advanced alerting system
│   │   ├── security.go      # Container security scanning
│   │   ├── prometheus.go    # Prometheus metrics export
│   │   ├── utils.go          # Utility functions
│   │   ├── mock_docker.go    # Test mocks
│   │   └── commands_test.go  # Unit tests (100% coverage)
│   └── types/
│       └── types.go          # Type definitions
├── config.yaml               # Default configuration
├── ROADMAP.md               # Project roadmap & progress
├── install.sh               # Installation script
├── uninstall.sh             # Uninstallation script
├── go.mod                   # Go modules
└── README.md               # This file

Architecture Overview

The project follows clean architecture principles with:

  • CLI Layer: Cobra-based command interface with argument validation
  • Business Logic: Container operations separated into distinct commands
  • Data Layer: Docker SDK abstraction with interface-based design
  • Testing: Mock-based testing with comprehensive coverage
  • Configuration: YAML-based settings with sensible defaults
  • Extensibility: Clean interfaces for future enhancements

🧪 Development

Running Tests

# Run all tests
go test ./...

# Run tests with verbose output
go test -v ./internal/docker/...

# Run tests with coverage
go test -cover ./internal/docker/...

# All tests passing (100% success rate)

Test Coverage

  • Unit Tests: Comprehensive coverage of all major functions
  • Mock Implementation: Complete Docker client mocking
  • Integration Tests: Docker Compose and template functionality
  • Test Status: 100% pass rate (15/15 tests passing)
  • Security Tests: Vulnerability scanning and alerting systems
  • Monitoring Tests: Metrics collection and Prometheus integration

Building

# Build for current platform
go build -o docker-container-manager ./cmd/docker-container-manager

# Build for multiple platforms
GOOS=linux GOARCH=amd64 go build -o docker-container-manager-linux ./cmd/docker-container-manager
GOOS=darwin GOARCH=amd64 go build -o docker-container-manager-macos ./cmd/docker-container-manager
GOOS=windows GOARCH=amd64 go build -o docker-container-manager.exe ./cmd/docker-container-manager

Dependencies

# Add new dependencies
go get <package-name>

# Update dependencies
go get -u <package-name>

# Tidy dependencies
go mod tidy

🔍 Architecture

The project follows clean architecture principles:

  • CLI Layer: Cobra-based command interface with argument validation
  • Business Logic: Container operations separated into distinct commands
  • Data Layer: Docker SDK abstraction with interface-based design
  • Configuration: YAML-based settings with environment variable support
  • Testing: Mock-based testing with comprehensive coverage

🐛 Troubleshooting

Common Issues

Docker Connection Failed

Error: failed to create Docker client: Cannot connect to the Docker daemon

Solution: Ensure Docker is running and you have proper permissions:

# Start Docker service
sudo systemctl start docker

# Add user to docker group
sudo usermod -aG docker $USER

# Log out and back in, or run with sudo
sudo docker-container-manager list

Permission Denied

Error: permission denied while trying to connect to the Docker daemon socket

Solution: Either run with sudo or fix Docker permissions:

# Check docker group membership
groups $USER

# Run with sudo
sudo docker-container-manager list

Build Errors

go: missing import: module not found

Solution: Update dependencies:

go mod tidy

🤝 Contributing

We welcome contributions! Please follow these steps:

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Make your changes and add tests
  4. Run tests: go test ./...
  5. Build project: go build -o docker-container-manager ./cmd/docker-container-manager
  6. Commit changes: git commit -m 'Add amazing feature'
  7. Push to branch: git push origin feature/amazing-feature
  8. Open a Pull Request

Development Guidelines

  • Follow Go standard formatting (go fmt)
  • Write comprehensive tests for new features
  • Update documentation as needed
  • Ensure all tests pass before submitting
  • Use meaningful commit messages

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

🙏 Acknowledgments

  • Docker for the amazing containerization platform
  • Cobra for the powerful CLI framework
  • Testify for excellent testing utilities
  • The Go community for inspiration and best practices

📞 Support

If you encounter any issues or have questions:

  1. Check the troubleshooting section
  2. Search existing issues
  3. Create a new issue with detailed information

Made with ❤️ using Go and Docker