Installing Kubernetes in Docker container

2/8/2021

I want to use Kubeflow to check it out and see if it fits my projects. I want to deploy it locally as a development server so I can check it out, but I have Windows on my computer and Kubeflow only works on Linux. I'm not allowed to dual boot this computer, I could install a virtual machine, but I thought it would be easier to use docker, and oh boy was I wrong. So, the problem is, I want to install Kubernetes in a docker container, right now this is the Dockerfile I've written:

# Docker file with local deployment of Kubeflow
FROM ubuntu:18.04

ENV USER=Joao
ENV PASSWORD=Password
ENV WK_DIR=/home/${USER} 

# Setup Ubuntu
RUN apt-get update -y
RUN apt-get install -y conntrack sudo wget

RUN useradd -rm -d /home/${USER} -s /bin/bash -g root -G sudo -u 1001 -p ${PASSWORD} ${USER}
WORKDIR ${WK_DIR}

# Installing Docker CE
RUN apt-get install -y apt-transport-https ca-certificates curl software-properties-common
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
RUN add-apt-repository \
    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) \
    stable"
RUN apt-get update -y
RUN apt-get install -y docker-ce docker-ce-cli containerd.io

# Installing Kubectl
RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.15.0/bin/linux/amd64/kubectl
RUN chmod +x ./kubectl
RUN mv ./kubectl /usr/local/bin/kubectl

# Installing Minikube
RUN curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
RUN install minikube-linux-amd64 /usr/local/bin/minikube


ENV PATH="${PATH}:${WK_DIR}"
COPY start.sh start.sh
CMD sh start.sh

With this, just to make the deployment easier, I also have a docker-compose.yaml that looks like this:

services:
  kf-local:
    build: .
    volumes:
      - path/to/folder:/usr/kubeflow
    privileged: true

And start.sh looks like this:

service docker start

minikube start \
     --extra-config=apiserver.service-account-issuer=api \
     --extra-config=apiserver.service-account-signing-key-file=/var/lib/minikube/certs/apiserver.key \
     --extra-config=apiserver.service-account-api-audiences=api \
     --driver=docker

The problem is, whenever I try running this I get the error:

X Exiting due to DRV_AS_ROOT: The "docker" driver should not be used with root privileges.

I've tried creating a user and running it from there also but then I'm not being able to run sudo, any idea how I could install Kubernetes on a Docker container?

-- João Areias
docker
docker-compose
kubeflow
kubernetes

2 Answers

2/8/2021

As you thought you are right in case of using VM and that be easy to test it out.

Instead of setting up Kubernetes on docker you can use Linux base container for development testing.

There is linux container available name as LXC container. Docker is kind of application container while in simple words LXC is like VM for local development testing. you can install the stuff into rather than docker setting up application inside image.

read some details about lxc : https://medium.com/@harsh.manvar111/lxc-vs-docker-lxc-101-bd49db95933a

you can also run it on windows and try it out at : https://linuxcontainers.org/

If you have read the documentation of Kubeflow there is also one option multipass

Multipass creates a Linux virtual machine on Windows, Mac or Linux systems. The VM contains a complete Ubuntu operating system which can then be used to deploy Kubernetes and Kubeflow.

Learn more about Multipass : https://multipass.run/#install

-- Harsh Manvar
Source: StackOverflow

2/23/2021

Insufficient user permissions on the docker groups and minikube directory cause this error ("X Exiting due to DRV_AS_ROOT: The "docker" driver should not be used with root privileges.").

You can fix that error by adding your user to the docker group and setting permissions to the minikube profile directory (change the $USER with your username in the two commands below):

sudo usermod -aG docker $USER && newgrp docker

sudo chown -R $USER $HOME/.minikube; chmod -R u+wrx $HOME/.minikube
-- turkishce1
Source: StackOverflow