Docker镜像内置Minikube

7

我正在尝试创建一个包含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不是最好的解决方案。有什么建议吗?

这不会起作用。Minikube 是一个虚拟机,内部运行着 Docker 和 Kubernetes。Minikube 使用 Docker Machine 来管理 Kubernetes VM,并从 Docker Machine 使用的驱动程序插件体系结构中受益,以提供一致地管理各种 VM 提供商的方式。Minikube 嵌入了 VirtualBox 和 VMware Fusion 驱动程序,因此使用它们没有其他步骤。 - Edmhs
2个回答

2

我自己对这个问题很感兴趣,因为我想通过在线Kubernetes课程而不进行任何环境更改。我只安装了Docker。

首先要熟悉docker-in-docker concept,因为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

需要重新启动,因为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

这是一个很棒的开始。我现在的问题是我的MacOS不支持network_mode=host。因此,启动minikube会在启动Docker容器时卡住并且从未启动。尝试通过telnet到本地8080端口失败。我尝试了标准桥接网络,但也失败了。有什么办法可以解决这个问题吗?我的错误信息是:libmachine: Error dialing TCP: dial tcp 127.0.0.1:61531 - Eric B.
很遗憾,我在这里无法提供帮助。根据我所阅读的内容,这完全是 MacOS Docker 的限制。人们开始使用 Linux 虚拟机来避免这个问题,而不是直接运行 Docker。 - Ash Lander
很遗憾,我在这里无法提供帮助。根据我所了解,这完全是MacOS Docker的限制。人们会启动Linux虚拟机来避免这个问题,而不是直接在Mac上运行Docker。 - undefined

1

1
这是正确的。但是设置它是我遇到问题的地方。我不确定需要哪些依赖项。 - user1555190

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接