{"id":48190846,"url":"https://github.com/pabpereza/toolkitbox","last_synced_at":"2026-04-04T17:55:19.766Z","repository":{"id":336290209,"uuid":"1135833006","full_name":"pabpereza/toolkitbox","owner":"pabpereza","description":"Container images to wrap different database clients, utilities and toolbox to use it on docker, podman, Kubernetes o everywhere.","archived":false,"fork":false,"pushed_at":"2026-04-01T12:20:01.000Z","size":122,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-01T14:41:24.900Z","etag":null,"topics":["container","debug","devops","docker","image","kubernetes","podman","sandbox","toolkit"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pabpereza.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-01-16T16:52:35.000Z","updated_at":"2026-04-01T12:20:03.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pabpereza/toolkitbox","commit_stats":null,"previous_names":["pabpereza/toolkitbox"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pabpereza/toolkitbox","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pabpereza%2Ftoolkitbox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pabpereza%2Ftoolkitbox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pabpereza%2Ftoolkitbox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pabpereza%2Ftoolkitbox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pabpereza","download_url":"https://codeload.github.com/pabpereza/toolkitbox/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pabpereza%2Ftoolkitbox/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31407655,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["container","debug","devops","docker","image","kubernetes","podman","sandbox","toolkit"],"created_at":"2026-04-04T17:55:18.627Z","updated_at":"2026-04-04T17:55:19.752Z","avatar_url":"https://github.com/pabpereza.png","language":"Shell","readme":"# Toolkitbox \n\nA modular Docker image build system for DevOps/SysAdmin tools and clients. You can use a single image with all tools included, individual images per tool, or bundles grouped by kind of tool. \n\n[![GitHub Stars](https://img.shields.io/github/stars/pabpereza/toolkitbox?style=flat\u0026logo=github)](https://github.com/pabpereza/toolkitbox)\n[![GitHub Issues](https://img.shields.io/github/issues/pabpereza/toolkitbox?style=flat\u0026logo=github)](https://github.com/pabpereza/toolkitbox/issues)\n[![Docker Pulls](https://img.shields.io/docker/pulls/toolkitbox/all?logo=docker)](https://hub.docker.com/r/toolkitbox/all)\n\n\u003e 📢 **Found an issue or want to request a new tool?** [Open an issue on GitHub](https://github.com/pabpereza/toolkitbox/issues)\n\n## Available Images\n\n### Bundle Images\n\n\u003c!-- BUNDLE_TABLE_START --\u003e\n| Image | Description | Components | Size | Docker Pull | Badges |\n|-------|-------------|------------|------|-------------|--------|\n| all | All tools in one image | all components | 343.2 MB | `docker pull toolkitbox/all` | [![Docker Pulls](https://img.shields.io/docker/pulls/toolkitbox/all?logo=docker)](https://hub.docker.com/r/toolkitbox/all) |\n| cloud | Cloud Bundle | aws-cli, azure-cli, gcloud | 283.6 MB | `docker pull toolkitbox/cloud` | [![Docker Pulls](https://img.shields.io/docker/pulls/toolkitbox/cloud?logo=docker)](https://hub.docker.com/r/toolkitbox/cloud) |\n| databases | Databases Bundle | postgres, mysql, mariadb, mongo, redis, sqlite | 67.7 MB | `docker pull toolkitbox/databases` | [![Docker Pulls](https://img.shields.io/docker/pulls/toolkitbox/databases?logo=docker)](https://hub.docker.com/r/toolkitbox/databases) |\n\u003c!-- BUNDLE_TABLE_END --\u003e\n\n### Individual Tools\n\n\u003c!-- TOOLS_TABLE_START --\u003e\n| Tool | Versions | Size | Docker Pull | Badges |\n|------|----------|------|-------------|--------|\n| aws-cli | `latest`,`v1` | 45.3 MB | `docker pull toolkitbox/aws-cli` | [![Docker Pulls](https://img.shields.io/docker/pulls/toolkitbox/aws-cli?logo=docker)](https://hub.docker.com/r/toolkitbox/aws-cli) |\n| azure-cli | `latest` | 134.8 MB | `docker pull toolkitbox/azure-cli` | [![Docker Pulls](https://img.shields.io/docker/pulls/toolkitbox/azure-cli?logo=docker)](https://hub.docker.com/r/toolkitbox/azure-cli) |\n| duckdb | `v1.4.4` | - | `docker pull toolkitbox/duckdb` | [![Docker Pulls](https://img.shields.io/docker/pulls/toolkitbox/duckdb?logo=docker)](https://hub.docker.com/r/toolkitbox/duckdb) |\n| gcloud | `latest` | 152.1 MB | `docker pull toolkitbox/gcloud` | [![Docker Pulls](https://img.shields.io/docker/pulls/toolkitbox/gcloud?logo=docker)](https://hub.docker.com/r/toolkitbox/gcloud) |\n| mariadb | `latest`,`v10.3`,`v10.4` | 17.2 MB | `docker pull toolkitbox/mariadb` | [![Docker Pulls](https://img.shields.io/docker/pulls/toolkitbox/mariadb?logo=docker)](https://hub.docker.com/r/toolkitbox/mariadb) |\n| mongo | `latest`,`v3.6`,`v4.4` | 53.2 MB | `docker pull toolkitbox/mongo` | [![Docker Pulls](https://img.shields.io/docker/pulls/toolkitbox/mongo?logo=docker)](https://hub.docker.com/r/toolkitbox/mongo) |\n| mysql | `latest`,`v5.6`,`v5.7` | 17.2 MB | `docker pull toolkitbox/mysql` | [![Docker Pulls](https://img.shields.io/docker/pulls/toolkitbox/mysql?logo=docker)](https://hub.docker.com/r/toolkitbox/mysql) |\n| postgres | `latest`,`v10`,`v11`,`v9.6` | 8.7 MB | `docker pull toolkitbox/postgres` | [![Docker Pulls](https://img.shields.io/docker/pulls/toolkitbox/postgres?logo=docker)](https://hub.docker.com/r/toolkitbox/postgres) |\n| redis | `latest`,`v4`,`v5` | 9.9 MB | `docker pull toolkitbox/redis` | [![Docker Pulls](https://img.shields.io/docker/pulls/toolkitbox/redis?logo=docker)](https://hub.docker.com/r/toolkitbox/redis) |\n| sqlite | `latest`,`v3` | 8.2 MB | `docker pull toolkitbox/sqlite` | [![Docker Pulls](https://img.shields.io/docker/pulls/toolkitbox/sqlite?logo=docker)](https://hub.docker.com/r/toolkitbox/sqlite) |\n\u003c!-- TOOLS_TABLE_END --\u003e\n\n### Standalone Only (Not in Bundles)\n\nSome tools require glibc and cannot be included in Alpine-based bundles:\n\n| Tool | Reason | Available As |\n|------|--------|--------------|\n| duckdb | Requires glibc (Alpine uses musl) | Standalone image only |\n\n## Overview\nThis system allows you to dynamically build a \"mega image\" containing multiple tools without manually editing Dockerfiles. Simply add a new component directory with an `install.sh` script, and the orchestrator automatically includes it in the build.\n\nThis repository builds an individual image for each component as well, allowing for flexible usage and an all-in-one image.\n\n## Architecture\n\nThe Dynamic Injection pattern works as follows:\n\n1. **Component Discovery**: The orchestrator scans the `components/` directory for tools\n2. **Script Collection**: Each component's `install.sh` is copied to a temporary build context\n3. **Dynamic Installation**: The Dockerfile iterates through all collected scripts and executes them\n4. **Clean Build**: Temporary files are removed to keep the final image lean\n\n## Project Structure\n\n```\n.gitignore                   # Ignores .build-context directory\nbuild-mega-image.sh          # Orchestrator script (main entry point)\nbuild-single.sh              # Script to build individual component images\nDockerfile.bundle            # Generic Dockerfile for mega image\ncomponents/                  # Component library\n├── postgres/\n│   ├── install.sh           # Latest PostgreSQL client installer\n│   └── v11-legacy/          # Legacy version (not included in bundle)\n│       └── Dockerfile       # Standalone Dockerfile for PG 11\n└── aws-cli/\n└── install.sh           # AWS CLI installer\n```\n\n## Quick Start\n\n### Building the all-in-one Image\n\n```bash\n./build-all-in-one.sh\n```\n\nThe script will:\n- Discover all components with `install.sh` files\n- Create a temporary `.build-context` directory\n- Copy and rename component installers (e.g., `postgres.sh`, `aws-cli.sh`)\n- Build the Docker image tagged as `ops-toolchain:latest`\n\n\n## Adding New Components\n\nTo add a new tool to the mega image:\n\n1. Create a new directory under `components/`:\n   ```bash\n   mkdir components/my-tool\n   ```\n\n2. Create an `install.sh` script:\n   ```bash\n   cat \u003e components/my-tool/install.sh \u003c\u003c'EOF'\n   #!/bin/bash\n   set -e\n   \n   echo \"Installing my-tool...\"\n   apk add --no-cache my-tool\n   \n   # Verify installation\n   if command -v my-tool \u0026\u003e /dev/null; then\n       echo \"my-tool installed successfully\"\n   else\n       echo \"ERROR: my-tool installation failed\"\n       exit 1\n   fi\n   EOF\n   ```\n\n3. Rebuild the all-in-one image:\n   ```bash\n   ./build-allinone.sh\n   ```\n\nThat's it! No Dockerfile editing required.\n\n## Automated Docker Hub Description Sync\n\nThis repository includes an automated workflow that keeps Docker Hub image descriptions synchronized with component READMEs.\n\n### Workflow: `sync-dockerhub-descriptions.yml`\n\n**Triggers:**\n- Automatically when `components/**/README.md` files are updated in the `main` branch\n- Manually via GitHub Actions UI (workflow_dispatch)\n\n**Functionality:**\n1. Authenticates with Docker Hub API\n2. Iterates through all components in `components/` directory\n3. Updates the Docker Hub description for each image using its README.md content\n\n**Requirements:**\n- `DOCKER_TOKEN` secret must be configured in repository settings\n- Docker Hub repositories must exist before running the workflow\n\n### Updating Component Descriptions\n\nTo update a Docker Hub image description:\n\n1. Edit the component's README: `components/{component}/README.md`\n2. Commit and push to the `main` branch\n3. The workflow will automatically sync the description to Docker Hub\n\nThe workflow uses the entire README content as the \"full description\" on Docker Hub, preserving all markdown formatting.\n\n## Contributing\nWhen adding new components:\n1. Follow the component guidelines above\n2. Test the installation script in isolation first\n3. Verify the individual and all-in-one image builds successfully\n4. Update documentation if adding complex components\n5. Create a comprehensive README.md in the component directory (it will be synced to Docker Hub)\n\n## Author\n\nCreated and maintained by:\n- Fermín Jiménez ([@Rimander](https://github.com/Rimander))\n- Pablo Pérez-Aradros ([@pabpereza](https://github.com/pabpereza))","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpabpereza%2Ftoolkitbox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpabpereza%2Ftoolkitbox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpabpereza%2Ftoolkitbox/lists"}