我自己对这个问题很感兴趣,因为我想通过在线Kubernetes课程而不进行任何环境更改。我只安装了Docker。
首先要熟悉docker-in-docker concept,因为minikube也会使用docker,我已经用过这个技巧。
Dockerfile
FROM ubuntu:22.04
RUN apt-get -y update
RUN apt-get -y install \
ca-certificates \
curl \
gnupg \
lsb-release
RUN mkdir -p /etc/apt/keyrings
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
RUN echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
RUN apt-get -y update
RUN apt-get -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin
RUN curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
RUN echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | tee /etc/apt/sources.list.d/kubernetes.list
RUN apt-get update
RUN apt-get install -y kubectl
RUN apt-get install conntrack
RUN curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
&& chmod +x minikube
RUN mkdir -p /usr/local/bin/
RUN install minikube /usr/local/bin/
CMD tail -F /dev/null
tail 命令将在启动后继续运行
现在构建镜像
docker build -t minikube .
docker-compose.yml
version: '2'
services:
minikube:
image: minikube:latest
container_name: test-kuber
restart: always
network_mode: host
volumes:
- /var/run/docker.sock:/var/run/docker.sock
需要重新启动,因为minikube在某些时候会重新启动
network_mode 允许访问主机localhost,否则minikube将无法连接到其创建的容器
volumes 是docker-in-docker的技巧
现在运行以开始:
docker-compose up -d
登录容器:
docker exec -it test-kuber bash
现在你可以开始启动minikube:
minikube start --driver=docker --force
强制需要使用root用户才能使用minikube(对我来说没问题,但你可能需要额外的工作来避免它)
完成后,在容器内运行:
minikube delete
退出容器并运行:
docker-compose down