Question: Can I run Kubernetes in Docker?. If you want to test Kubernetes without any commitment, the easiest and quickest way is to use Docker Containers. This method doesn’t have many prerequisites and is not resource-intensive. Any decent Linux machine which can run Docker is all that’s required.

install kubernetes in docker using kind

We had earlier covered other methods that can help you get a running Lightweight Kubernetes Cluster on Linux. See below.

Deploy Production Kubernetes Cluster with Ansible & Kubespray

Deploy Lightweight Kubernetes with MicroK8s and Snap

How to run Minikube on KVM

For Docker Lovers, this method is another option you can explore. The setup has been done on CentOS 7 & Ubuntu Server. But the process should be similar for other Linux distributions.

Step 1: Install Docker

Start by installing Docker runtime engine, this will be used to run all Kubernetes services. Our guides below should be of great help.

Install Docker and Docker Compose on Debian 10 Buster

How to install Docker CE on Ubuntu / Debian / CentOS 

How to install Docker on Fedora

Confirm if docker is installed properly by running:

$ docker info
 Debug Mode: false

 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 19.03.1
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
 runc version: 425e105d5a03fabd737a126ad93d62a9eeede87f
 init version: fec3683
 Security Options:
   Profile: default
 Kernel Version: 4.15.0-54-generic
 Operating System: Ubuntu 18.04.2 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 7.604GiB
 Name: k8s-server
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Experimental: false
 Insecure Registries:
 Live Restore Enabled: false

Step 2: Install Go

You need Go(Golang) installed since it will be used to build packages required.

How To Install Go (Golang) On Fedora

How To Install Go on CentOS / RHEL 8

How to Install Go on Ubuntu / CentOS 7

Step 3: Install kind Tool

kind is a tool for running local Kubernetes clusters using Docker container “nodes”.
kind is primarily designed for testing Kubernetes 1.11+, initially targeting the conformance tests.

$ GO111MODULE="on" go get

Copy the kind binary to a directory in your PATH.

sudo cp ~/go/bin/kind /usr/local/bin/

Check version installed.

$ kind version

Step 4: Run local Kubernetes clusters using Docker container “nodes”.

We now have all requirements satisfied. We should be ready to create a local Kubernetes cluster running on Docker containers.

sudo kind create cluster

You should get output like this:

 kind create cluster | sudo tee -a kind_output.txt
Creating cluster "kind" ...
 • Ensuring node image (kindest/node:v1.15.0) 🖼  ...
 ✓ Ensuring node image (kindest/node:v1.15.0) 🖼
 • Preparing nodes 📦  ...
 ✓ Preparing nodes 📦
 • Creating kubeadm config 📜  ...
 ✓ Creating kubeadm config 📜
 • Starting control-plane 🕹️  ...
 ✓ Starting control-plane 🕹️
 • Installing CNI 🔌  ...
 ✓ Installing CNI 🔌
 • Installing StorageClass 💾  ...
 ✓ Installing StorageClass 💾
Cluster creation complete. You can now use the cluster with:

export KUBECONFIG="$(kind get kubeconfig-path --name="kind")"
kubectl cluster-info

You can view a running container with docker ps command.

# docker ps
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                                  NAMES
d5bd9c025fe6        kindest/node:v1.15.0   "/usr/local/bin/entr…"   27 minutes ago      Up 27 minutes       34213/tcp,>6443/tcp   

Step 5: Install Kubectl command-line tool

To access the Kubernetes cluster from the command line, you need kubectl command line tool. This can be easily installed by running the command:

curl -LO`curl -s`/bin/linux/amd64/kubectl

Make the kubectl binary executable.

chmod +x ./kubectl

Move the binary into your PATH.

sudo mv ./kubectl /usr/local/bin/kubectl

Test to ensure the version you installed is up-to-date:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.2", GitCommit:"f6278300bebbb750328ac16ee6dd3aa7d3549568", GitTreeState:"clean", BuildDate:"2019-08-05T09:23:26Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}

For other systems, refer to the official kubectl installation guide.

Configure Autocompletion:

source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc 

For zsh users, run:

source <(kubectl completion zsh)
echo "if [ $commands[kubectl] ]; then source <(kubectl completion zsh); fi" >> ~/.zshrc

Step 6: Configure kubectl

Create Kubectl configuration directory:

mkdir ~/.kube

Create kubectl configuration symlink to the Kind generated config file.

ln -s `kind get kubeconfig-path --name="kind"` ~/.kube/config

Test kubectl configuration.

$ kubectl cluster-info 
Kubernetes master is running at
KubeDNS is running at

$ kubectl config  get-clusters

$ kubectl config  get-contexts
CURRENT   NAME                    CLUSTER   AUTHINFO           NAMESPACE
*         [email protected]   kind      kubernetes-admin

$ kubectl get nodes
NAME                 STATUS   ROLES    AGE   VERSION
kind-control-plane   Ready    master   30m   v1.15.0

$ kubectl get namespaces 
NAME              STATUS   AGE
default           Active   31m
kube-node-lease   Active   31m
kube-public       Active   31m
kube-system       Active   31m

$ kubectl get pods -n kube-system
NAME                                         READY   STATUS    RESTARTS   AGE
coredns-5c98db65d4-q7k7w                     1/1     Running   0          31m
coredns-5c98db65d4-svdpf                     1/1     Running   0          31m
etcd-kind-control-plane                      1/1     Running   0          30m
kindnet-nv5gq                                1/1     Running   1          31m
kube-apiserver-kind-control-plane            1/1     Running   0          30m
kube-controller-manager-kind-control-plane   1/1     Running   0          30m
kube-proxy-4n874                             1/1     Running   0          31m
kube-scheduler-kind-control-plane            1/1     Running   0          30m

You’re on the right track to Learning Kubernetes using your local cluster. I recommend you visit K8s Concepts page to use interactive guides available.

More Learning material:

Also check:

Portainer – Install Best Docker UI Manager

How To run Docker Containers using Podman and Libpod

How To Setup Local OpenShift Origin (OKD) Cluster on CentOS 7

How To Install and Use Source-To-Image (S2I) Toolkit on Linux

Best Storage Solutions for Kubernetes & Docker Containers

Your support is our everlasting motivation,
that cup of coffee is what keeps us going!

As we continue to grow, we would wish to reach and impact more people who visit and take advantage of the guides we have on our blog. This is a big task for us and we are so far extremely grateful for the kind people who have shown amazing support for our work over the time we have been online.

Thank You for your support as we work to give you the best of guides and articles. Click below to buy us a coffee.


Please enter your comment!
Please enter your name here