我正在尝试创建一个安装了 minikube 的 docker 镜像。
我使用 openjdk:8 图像作为基础尝试了几个步骤:
FROM openjdk:8
RUN apt-get install -y apt-transport-https
RUN curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
RUN touch /etc/apt/sources.list.d/kubernetes.list
RUN echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | tee -a /etc/apt/sources.list.d/kubernetes.list
RUN apt-get update
RUN apt-get install -y kubectl
RUN apt-get install sudo -y
ENV MINIKUBE_VERSION v0.31.0
RUN curl -Lo minikube https://github.com/kubernetes/minikube/releases/download/${MINIKUBE_VERSION}/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
RUN mkdir -p root/.kube
RUN touch root/.kube/config
但我似乎无法启动 minikube,似乎我缺少依赖项,或者可能在另一个 docker 中运行 minikube 不是最好的解决方案。
有什么想法吗?
我自己对这个问题很感兴趣,因为我想在不改变任何环境的情况下通过在线 Kubernetes 课程。我所拥有的只是安装了 docker。
首先熟悉一下docker-in-docker概念,因为minikube也会使用docker,我也用过这个技巧
Dockerfile
FROM ubuntu:22.04
# installing docker
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
# installing kubectl
#RUN apt-get install -y ca-certificates curl
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
# installing other dependencies
RUN apt-get install conntrack
# installing minikube
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
restart是需要的,因为minikube会在某个时刻重新启动
network_mode 允许访问主机本地主机,否则 minikube 将无法连接到它创建的容器
volumes 是 docker-in-docker 技巧
现在运行开始:
docker-compose up -d
登录容器:
docker exec -it test-kuber bash
现在你可以启动 minikube 了:
minikube start --driver=docker --force
从根目录使用 minikube 需要force(这对我来说没问题,但你可能需要一些额外的工作来避免它)
完成后,从容器内运行:
minikube delete
退出容器并运行:
docker-compose down
https://kubernetes.io/docs/tasks/tools/install-minikube/
注意:Minikube 还支持 --vm-driver=none 选项,该选项在主机上而不是在虚拟机中运行 Kubernetes 组件。使用此驱动程序需要 Docker 和 Linux 环境,但不需要虚拟机管理程序。
感谢 Ash Lander,我能够创建包含 minikube 一切设置的镜像
https://hub.docker.com/repository/docker/kemsekov/minikube-1.31/general
安装了兼容版本的 kube 依赖项
您只需要创建 docker-compose 文件,启动它,附加到容器并创建集群。