Docker (vind) Quick Start
No Kubernetes cluster? No problem. vind (vCluster in Docker) runs a complete Kubernetes cluster entirely in Docker containers — no existing infrastructure required.
Beyond what KinD offers, vind adds capabilities that matter for real development workflows:
| Feature | vind | KinD |
|---|---|---|
| Pause and resume without losing state | Yes | No — must delete and recreate |
| LoadBalancer services | Automatic (Linux); port-forward on macOS | Manual setup required |
| Virtual worker nodes | Yes | Limited |
| Join real cloud instances | Yes, via VPN | No |
| Pull-through image cache | Uses host Docker daemon | Direct registry pulls |
Prerequisites​
- Docker installed and running
- At least 4 GB RAM available to Docker (Rancher Desktop or Docker Desktop VM size)
Install the vCluster CLI​
- Homebrew
- Mac (Intel/AMD)
- Mac (Silicon/ARM)
- Linux (AMD)
- Linux (ARM)
- Download Binary
- Windows Powershell
brew install loft-sh/tap/vcluster
The binaries in the tap are signed using the Sigstore framework for enhanced security.
curl -L -o vcluster "https://github.com/loft-sh/vcluster/releases/latest/download/vcluster-darwin-amd64" && sudo install -c -m 0755 vcluster /usr/local/bin && rm -f vcluster
curl -L -o vcluster "https://github.com/loft-sh/vcluster/releases/latest/download/vcluster-darwin-arm64" && sudo install -c -m 0755 vcluster /usr/local/bin && rm -f vcluster
curl -L -o vcluster "https://github.com/loft-sh/vcluster/releases/latest/download/vcluster-linux-amd64" && sudo install -c -m 0755 vcluster /usr/local/bin && rm -f vcluster
curl -L -o vcluster "https://github.com/loft-sh/vcluster/releases/latest/download/vcluster-linux-arm64" && sudo install -c -m 0755 vcluster /usr/local/bin && rm -f vcluster
Download the binary for your platform from the GitHub Releases page and add this binary to your $PATH.
md -Force "$Env:APPDATA\vcluster"; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]'Tls,Tls11,Tls12';
Invoke-WebRequest -URI "https://github.com/loft-sh/vcluster/releases/latest/download/vcluster-windows-amd64.exe" -o $Env:APPDATA\vcluster\vcluster.exe;
$env:Path += ";" + $Env:APPDATA + "\vcluster";
[Environment]::SetEnvironmentVariable("Path", $env:Path, [System.EnvironmentVariableTarget]::User);
You may need to reboot your computer to use the CLI due to changes to the PATH variable (see below).
Line 4 of this install script adds the install directory %APPDATA%\vcluster to the $PATHenvironment variable. This is only effective for the current Powershell session, i.e. when opening a new terminal window,vcluster may not be found.
Make sure to add the folder %APPDATA%\vcluster to the PATH environment variable after installing vcluster CLI via Powershell. Afterward, a reboot might be necessary.
Verify the CLI installed successfully.
vcluster --version
Output is similar to:
vCluster version 0.x.x
Deploy a cluster​
Configure vCluster to use the Docker driver.
vcluster use driver dockerDeploy a cluster.
vcluster create my-vclusterWhen deployment finishes, the CLI connects and switches your kube context into the cluster.
Verify the cluster is running.
kubectl get nodes
Pause and resume​
A vind cluster can pause and resume without losing state. A KinD cluster requires a full delete and recreate.
# Pause the cluster — frees Docker resources immediately
vcluster pause my-vcluster
# Check the status
vcluster list
Output is similar to:
NAME | STATUS | CONNECTED | AGE
--------------+--------+-----------+-----
my-vcluster | exited | True | 5m
# Resume — cluster is back in seconds
vcluster resume my-vcluster
vcluster connect my-vcluster
Paused clusters retain all their state. After resume, workloads restart where they left off.
If vcluster disconnect prompts you to select a context, choose your previous cluster context (for example rancher-desktop or docker-desktop).
LoadBalancer services​
On Linux, LoadBalancer services get an external IP automatically — no MetalLB or extra configuration required.
kubectl create deployment hello --image=nginx
kubectl expose deployment hello --port=80 --type=LoadBalancer
kubectl get service hello --watch
Output on Linux is similar to:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello LoadBalancer 10.96.x.x 127.0.0.1 80:31234/TCP 5s
curl http://localhost
On macOS with Docker Desktop or Rancher Desktop, the LoadBalancer IP will not be assigned. Docker runs inside a Linux VM and the bridge network IP is not routable on the macOS host. Use kubectl port-forward instead:
kubectl port-forward deployment/hello 8080:80
curl http://localhost:8080
Add virtual worker nodes​
Test node affinity rules, DaemonSet scheduling, or topology spread constraints without real hardware. Add virtual worker nodes by configuring them in a vcluster.yaml at creation time.
Delete the current cluster first to free resources — running two clusters simultaneously requires at least 4 GB RAM in your Docker VM.
vcluster delete my-vcluster
experimental:
docker:
nodes:
- name: worker-1
- name: worker-2
vcluster create my-cluster --values vcluster.yaml
kubectl get nodes
Output is similar to:
NAME STATUS ROLES AGE
my-cluster Ready control-plane 30s
worker-1 Ready <none> 25s
worker-2 Ready <none> 25s
Schedule workloads to specific nodes, add labels and taints, or simulate a realistic multi-node topology — all from a single Docker host.
Join real cloud nodes​
vind clusters accept real cloud instances as worker nodes through vCluster VPN. An EC2 instance, GCP VM, or any Linux machine can join your local vind cluster through a VPN tunnel, giving you a hybrid cluster: local control plane, real remote compute.
This requires vCluster Platform. See vCluster VPN documentation for setup instructions.
Clean up​
vcluster delete my-cluster
All Docker containers and networks created for the cluster are removed. On macOS you may see a permission denied warning about a leftover file in ~/.vcluster/docker/ — this is benign; the cluster is fully deleted.
Next steps​
- vind configuration — ports, volumes, registry proxy, multi-node options
- vCluster VPN — join real cloud nodes to a vind cluster
- Shared nodes — when you're ready to move to a real Kubernetes cluster
- vcluster.yaml reference — full configuration reference