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 Pulls Docker Image Size
docker pull brakmic/devops:latest
Linux / 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:latest
Kubernetes 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-cluster
The 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.2.0 | Kubernetes package manager |
| terraform | 1.15.0 | Infrastructure as code |
| kind | 0.31.0 | Local Kubernetes clusters in Docker |
| k9s | 0.50.18 | Terminal UI for Kubernetes |
| stern | 1.34.0 | Multi-pod log tailing |
| kubecolor | 0.6.0 | Colorized kubectl output |
| skaffold | 2.21.0 | Continuous development for Kubernetes |
| flux | 2.8.3 | GitOps toolkit |
| kubeseal | 0.37.0 | Encrypt secrets for Git storage |
| operator-sdk | 1.42.2 | Build Kubernetes operators |
| kubelogin | 0.2.17 | Azure AD authentication for clusters |
| lazydocker | 0.25.2 | 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-cluster
On 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-backup
On the next run, restore it:
cp ~/local/kubeconfig-backup ~/.kube/config
Available on Docker Hub.
- Sealing secrets with kubeseal
- Automated builds with Skaffold
- Streaming logs with Stern
- Installing NGINX Ingress Controller
kubectl get pods -n kube-system
helm install prometheus prometheus-community/prometheus
terraform 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 --controller
flux bootstrap github \ --owner=<your-user> \ --repository=<your-repo> \ --branch=main \ --path=./clusters/my-cluster \ --personal
docker compose up -d
kind create cluster --name my-cluster
lazydocker
popeye -n kube-system -o yaml
kubeseal --cert=publicCert.pem --format=yaml < secret.yaml > sealedsecret.yaml
stern -n dev app=myapp
skaffold dev
kubelogin convert-kubeconfig -l azure
kubectl krew install ctx
kubectx my-cluster kubens dev
usql postgres://user:pass@localhost/mydb -c "SELECT count(*) FROM orders"