All-in-one DevOps toolbox: k8s, GitOps, IaC, cloud, security & AI CLIs
3.6K
A single "Swiss-army-knife" container image that bundles the tools you reach for every day when working with Kubernetes, GitOps, Infrastructure-as-Code, cloud providers, supply-chain security and AI coding assistants — plus Docker-in-Docker so you can build and run containers from inside it.
The image is based on docker:24.0.2-dind-rootless
(Alpine Linux) and published to Docker Hub as
hungnt612/devops-toolkit.
docker pull hungnt612/devops-toolkit:latest
docker run --rm -it hungnt612/devops-toolkit:latest
| Tool | Purpose |
|---|---|
kubectl / kubecolor | Kubernetes CLI (colorized alias k) |
helm | Kubernetes package manager (alias h) |
kustomize | Template-free Kubernetes config customization |
kind | Run local Kubernetes clusters in Docker |
k9s | Terminal UI to navigate / manage clusters |
kubectx / kubens | Fast context & namespace switching |
kubeseal | Encrypt Secrets for Sealed-Secrets |
krew | kubectl plugin manager |
stern | Multi-pod log tailing |
skaffold | Local Kubernetes dev loops |
argocd | Argo CD GitOps CLI |
flux | Flux CD GitOps CLI |
| Tool | Purpose |
|---|---|
terraform | Provision infrastructure (alias tf) |
terragrunt | Thin wrapper around Terraform for DRY configs |
vault | HashiCorp Vault CLI |
| Tool | Purpose |
|---|---|
trivy | Vulnerability & misconfiguration scanner |
cosign | Sign / verify container images (Sigstore) |
gitleaks | Detect hardcoded secrets in git repos |
semgrep | Static analysis / SAST |
roxctl | StackRox / RHACS CLI |
sonar-scanner + sonar-cnes-report | SonarQube code scanning & reporting |
| Tool | Purpose |
|---|---|
aws | AWS CLI v2 |
session-manager-plugin | AWS SSM Session Manager (aws ssm start-session) |
eksctl | Create / manage Amazon EKS clusters |
aws-iam-authenticator | EKS IAM authentication |
gcloud / gsutil | Google Cloud CLI |
az | Azure CLI |
oc | OpenShift client |
| Tool | Purpose |
|---|---|
gh | GitHub CLI |
glab | GitLab CLI |
| Tool | Purpose |
|---|---|
mongosh | MongoDB Shell (runs on the image's musl Node) |
mongodump / mongorestore | MongoDB backup / restore (mongodb-tools) |
| Tool | Purpose |
|---|---|
claude | Claude Code CLI (@anthropic-ai/claude-code) |
codex | OpenAI Codex CLI (@openai/codex) |
gemini | Google Gemini CLI (@google/gemini-cli) |
These run on Node.js 22 (musl), installed into
/usr/local. Provide your own API keys at runtime (e.g.ANTHROPIC_API_KEY,OPENAI_API_KEY,GEMINI_API_KEY).
For reading and processing common file formats without extra setup:
pdftotext, pdfinfo, pdftoppm (poppler-utils) and the pypdf
Python library.python-docx (.docx), openpyxl (.xlsx) and pandas
for tabular data.convert, identify, mogrify) and the Pillow
Python library.git, go, node/npm, python3 (+ msal, python-sonarqube-api, pypdf,
python-docx, openpyxl, pandas, Pillow), jq, yq, openssl, nano
(with a tuned .nanorc), vim, htop, lynx, curl, wget, and handy bash
aliases/completions.
Run
devops-tools-versionsinside the container to print every tool's version.
cd DevOps-Tools
docker build -t devops-tools:latest .
ℹ️ This is a large image (multi-cloud CLIs are heavy). The Azure CLI layer in particular is slow to build — comment out the
azure-cliRUNblock in theDockerfileif you don't need it.
# Interactive shell (shows a version banner on start)
docker run --rm -it devops-tools:latest
# Mount your kube/aws/ssh config from the host
docker run --rm -it \
-v "$HOME/.kube:/home/rootless/.kube" \
-v "$HOME/.aws:/root/.aws" \
devops-tools:latest
# Use it as a one-off CLI (banner goes to stderr, so stdout stays clean)
docker run --rm devops-tools:latest kubectl version --client
Environment toggles:
| Variable | Effect |
|---|---|
DEVOPS_TOOLS_NO_BANNER=1 | Suppress the startup banner |
The image ships a helper to spin up a kind cluster with an NGINX ingress controller:
# Inside the container
./create_cluster.sh my-cluster
config.yml configures the kind cluster (control-plane + worker, ports 80/443
exposed for ingress). config is an empty kubeconfig template.
Versions are pinned via ENV in the Dockerfile:
| Tool | Version |
|---|---|
| Helm | 3.11.3 |
| Terraform | 1.14.3 |
| Terragrunt | 0.96.0 |
| kind | 0.18.0 |
| kubeseal | 0.20.2 |
| krew | 0.4.3 |
| kustomize | 5.8.3 |
| k9s | 0.51.0 |
| Argo CD | 3.5.5 |
| Flux | 2.9.6 |
| Trivy | 0.75.0 |
| cosign | 3.1.3 |
| gitleaks | 8.30.1 |
| yq | 4.54.1 |
| Google Cloud CLI | 588.0.0 |
| Node.js | 22.23.3 (musl) |
| SonarScanner | 4.6.2.2472 |
kubectl, kubecolor, stern, skaffold, az, semgrep and the AI CLIs
(claude, codex, gemini) track their latest release at build time. Pin the
AI CLIs with the CLAUDE_CODE_VERSION, CODEX_VERSION and GEMINI_CLI_VERSION
build args if you need reproducible builds.
The image is tagged on Docker Hub as follows:
| Tag | When | Use it for |
|---|---|---|
latest | every push to main | quick start, always-current (may drift) |
main-<sha> | every push to main | trace an image back to an exact commit |
vX.Y.Z, X.Y | when you push a git tag vX.Y.Z | reproducible, pinned releases |
| (custom) | manual workflow_dispatch | one-off ad-hoc tags |
OS-CVE fixes land through a normal rebuild (the daily scan opens a PR — see below),
so they ship as a new latest / main-<sha> rather than a separate tag.
Recommended flow — SemVer via git tags:
# Cut a release whenever the bundled tool set changes
git tag v1.2.0
git push origin v1.2.0 # CI builds & publishes v1.2.0, v1.2 and latest
latest for convenience / dev.vX.Y.Z in anything that must be reproducible (CI runners, docs).Two GitHub Actions workflows live in .github/workflows/:
devops-tools.yml — runs on PRs, pushes to main, git tags, and manual
dispatch:
hadolint on the Dockerfile + shellcheck on the scripts.devops-tools-versions inside the image and fail if any
tool is MISSING, plus explicit kubectl / terraform checks.Trivy for CRITICAL/HIGH (reporting by default; set the step's
exit-code to 1 for a hard gate) and a CycloneDX SBOM artifact.hungnt612/devops-toolkit with the tags above, then
sync an enriched overview to the Docker Hub repository page so it is always
up to date. The overview is this README plus, for the release being published,
its release notes (auto-generated from commits/PRs on a git tag, or the
recent commit log on main) and a Trivy security-scan summary (fixable
CRITICAL/HIGH/MEDIUM counts, with a pointer to the full report in the GitHub
Security tab).devops-tools-autopatch.yml — runs daily (and on demand), against the
published image rather than a fresh build:
SECURITY_REFRESH in the Dockerfile and opens a PR to main
(security/cve-autofix) listing the CVEs. Merging it triggers the main CI/CD
workflow, which rebuilds with a fresh apk upgrade and publishes a patched
image.Scanning is scheduled (daily), not tied to builds: the published image keeps getting checked even when no new commits land. Library/app CVEs that a rebuild can't fix on their own still surface in the scan so you can bump the tool version.
Requirements for the auto-fix PR:
GH_PAT secret (a PAT with
repo/workflow scope) is set; with the default token the PR is created but
you merge it to trigger the publish rebuild.| Secret | Purpose |
|---|---|
DOCKER_HUB_TOKEN | Docker Hub access token (push image + update the repo overview). Login user is hungnt612. |
A Repo Read & Write token is normally enough both to push images and to update the repository overview. Syncing the overview is best-effort: if Docker Hub rejects the description edit (e.g. a 403), the publish still succeeds — the publish log says so, and re-issuing the token with Read, Write & Delete scope resolves it.
Published 2026-10-14 09:14 UTC
Scanned 2026-10-14 09:14 UTC
| Severity | Fixable CVEs |
|---|---|
| 🔴 CRITICAL | 59 |
| 🟠 HIGH | 1158 |
| 🟡 MEDIUM | 1405 |
The full vulnerability report is uploaded to the repository's GitHub Security tab (daily auto-scan), and a CycloneDX SBOM is attached to each CI run.
Content type
Image
Digest
sha256:728ed4caa…
Size
2.3 GB
Last updated
14 days ago
docker pull hungnt612/devops-toolkit