A modern, comprehensive CLI tool for managing Docker containers built with Go 1.24 and Docker SDK v28.4.0.
- 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
- 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
- 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
- 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
- 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
- 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
- Go: Version 1.24 or higher
- Docker: Engine 20.10+ with API access
- Operating System: Linux, macOS, or Windows
- 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
# Clone the repository
git clone https://github.com/elliotsecops/GoDockerManager.git
cd GoDockerManager
# Build and install
./install.sh
# 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
git clone https://github.com/elliotsecops/GoDockerManager.git
cd GoDockerManager
go mod tidy
go build -o docker-container-manager ./cmd/docker-container-manager
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
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 |
You can override configuration using environment variables:
export DOCKER_SOCKET="tcp://localhost:2376"
export OUTPUT_FORMAT="json"
The tool looks for configuration in this order:
config.yaml
in current working directory- Environment variables
- Built-in defaults
If no configuration file is found, the following defaults are used:
- Docker Socket:
unix:///var/run/docker.sock
- Output Format:
table
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
docker-container-manager start <container-id>
docker-container-manager start affe1890e1a1
docker-container-manager stop <container-id>
docker-container-manager stop affe1890e1a1
docker-container-manager logs <container-id>
docker-container-manager logs container1 container2 container3
docker-container-manager logs --filter "status=running"
docker-container-manager inspect <container-id>
docker-container-manager stats <container-id>
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
--------------------------------------------------
docker-container-manager start container1 container2 container3
docker-container-manager start container1,container2,container3
docker-container-manager start "app-*"
docker-container-manager stop --filter "status=running" --filter "image=nginx"
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-container-manager compose up
docker-container-manager compose up --file docker-compose.prod.yml
docker-container-manager compose down
docker-container-manager compose ps
CONTAINER ID SERVICE STATUS COMMAND CREATED
abc123def456 web Running npm start 1630000000
def456ghi789 db Running docker-entry… 1630000000
docker-container-manager init react-app
docker-container-manager init wordpress --path ./my-project
docker-container-manager dev --image node:16
# Mounts current directory to /app in container
docker-container-manager init --help
# Templates: react-app, nginx, wordpress, default
docker-container-manager list --format json
[
{
"id": "container1-id",
"image": "nginx:latest",
"status": "Running",
"health": "healthy",
"names": ["/web-server"]
}
]
docker-container-manager list --format yaml
docker-container-manager list --format csv > containers.csv
# 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
# 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
# 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
# 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
# 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 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
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
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
# 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)
- 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
# 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
# Add new dependencies
go get <package-name>
# Update dependencies
go get -u <package-name>
# Tidy dependencies
go mod tidy
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
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
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
go: missing import: module not found
Solution: Update dependencies:
go mod tidy
We welcome contributions! Please follow these steps:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature
- Make your changes and add tests
- Run tests:
go test ./...
- Build project:
go build -o docker-container-manager ./cmd/docker-container-manager
- Commit changes:
git commit -m 'Add amazing feature'
- Push to branch:
git push origin feature/amazing-feature
- Open a Pull Request
- 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
This project is licensed under the MIT License - see the LICENSE file for details.
- 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
If you encounter any issues or have questions:
- Check the troubleshooting section
- Search existing issues
- Create a new issue with detailed information
Made with ❤️ using Go and Docker