A Docker image that bundles 20+ Kubernetes and infrastructure tools on Debian Linux. Pull it, start a container, and you have a working cluster in minutes.
docker pull brakmic/devops:latestLinux / macOS:
docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ${PWD}:/home/minidevops/local \
--network=host \
brakmic/devops:latestWindows (PowerShell):
docker run --rm -it `
-v //var/run/docker.sock:/var/run/docker.sock `
-v ${PWD}:/home/minidevops/local `
--network=host `
brakmic/devops:latestKubernetes 1.35+ requires cgroup v2. Docker Desktop on Windows must use the WSL 2 backend with the unified cgroup hierarchy enabled. Without this, Kind clusters fail during kubelet startup with a health check timeout.
- Enable the WSL 2 engine in Docker Desktop under Settings > General.
- Create or edit
%USERPROFILE%\.wslconfig:
[wsl2]
kernelCommandLine = cgroup_no_v1=all systemd.unified_cgroup_hierarchy=1- Restart WSL and Docker Desktop:
wsl --shutdownVerify the change by running docker info --format '{{.CgroupVersion}}'. The output should be 2.
Once inside the container, create a cluster:
./create_cluster.sh my-clusterThe socket mount lets the container talk to the host Docker daemon. The local volume mount at /home/minidevops/local persists files across container restarts. The cluster script creates a Kind cluster and deploys the NGINX Ingress Controller.
| Tool | Version | Purpose |
|---|---|---|
| kubectl | latest stable | Kubernetes CLI, aliased to kubecolor |
| helm | 4.1.3 | Kubernetes package manager |
| terraform | 1.14.8 | Infrastructure as code |
| kind | 0.31.0 | Local Kubernetes clusters in Docker |
| k9s | 0.50.18 | Terminal UI for Kubernetes |
| stern | 1.33.1 | Multi-pod log tailing |
| kubecolor | 0.5.3 | Colorized kubectl output |
| skaffold | 2.18.2 | Continuous development for Kubernetes |
| flux | 2.8.3 | GitOps toolkit |
| kubeseal | 0.36.1 | Encrypt secrets for Git storage |
| operator-sdk | 1.42.2 | Build Kubernetes operators |
| kubelogin | 0.2.16 | Azure AD authentication for clusters |
| lazydocker | 0.25.0 | Terminal UI for Docker |
| popeye | 0.22.1 | Cluster sanitizer and linter |
| krew | 0.5.0 | kubectl plugin manager |
| kubectx | 0.11.0 | Switch between clusters |
| kubens | 0.11.0 | Switch between namespaces |
| usql | 0.21.4 | Universal SQL client |
| docker compose | v2 | Multi-container orchestration |
The image includes bash with completions, nano with syntax highlighting, vim, git, gcc, make, python3, pip3, pipenv, curl, htop, tree, openssl, iputils-ping, dnsutils, and hping3.
Python 3 and Pipenv are pre-configured with a virtual environment. Run pipenv install <package> to add dependencies and pipenv run python my_script.py to execute scripts.
The config.yml file contains a Kind cluster configuration you can adjust. The included create_cluster.sh script reads this config, creates the cluster, and deploys NGINX Ingress.
./create_cluster.sh my-clusterOn Windows, use the PowerShell equivalent:
.\create_cluster.ps1 -ClusterName MyClusterNameTo keep your cluster across container restarts, copy .kube/config to the local volume before exiting:
cp ~/.kube/config ~/local/kubeconfig-backupOn the next run, restore it:
cp ~/local/kubeconfig-backup ~/.kube/configAvailable on Docker Hub.
- Sealing secrets with kubeseal
- Automated builds with Skaffold
- Streaming logs with Stern
- Installing NGINX Ingress Controller
kubectl get pods -n kube-systemhelm install prometheus prometheus-community/prometheusterraform init && terraform applyoperator-sdk init --domain=example.com --repo=github.com/example-inc/my-operator
operator-sdk create api --group cache --version v1alpha1 --kind Memcached --resource --controllerflux bootstrap github \
--owner=<your-user> \
--repository=<your-repo> \
--branch=main \
--path=./clusters/my-cluster \
--personaldocker compose up -dkind create cluster --name my-clusterlazydockerpopeye -n kube-system -o yamlkubeseal --cert=publicCert.pem --format=yaml < secret.yaml > sealedsecret.yamlstern -n dev app=myappskaffold devkubelogin convert-kubeconfig -l azurekubectl krew install ctxkubectx my-cluster
kubens devusql postgres://user:pass@localhost/mydb -c "SELECT count(*) FROM orders"


