拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 在Minikube 中使用本地Docker 映像

在Minikube 中使用本地Docker 映像

白鹭 - 2022-09-08 2285 0 2

一、概述

在本教程中,我们将Docker 容器部署到Kubernetes,并了解如何为这些容器使用本地镜像。我们将使用Minikube来运行Kubernetes 集群。

2.Dockerfile

首先,我们需要一个[Dockerfile](https://docs.docker.com/engine/reference/builder/)来创建本地Docker 镜像。这应该很简单,因为我们将专注于Minikube 命令。

让我们创建一个Dockerfile,只使用一个打印消息的echo命令:

FROM alpine
 CMD ["echo", "Hello World"]

3.docker-env命令

对于第一种方法,我们需要确保已安装Docker CLI这是一个管理Docker 资源的工具,例如镜像和容器。

默认情况下,它使用我们机器上的Docker 引擎,但我们可以轻松更改它。我们将使用它并将Docker CLI 指向Minikube 内的Docker 引擎。

让我们检查一下这个先决条件,看看Docker CLI 是否正常工作:

$ docker version

输出应该与此类似:

Client: Docker Engine - Community
 Version: 19.03.12
 ...
 Server: Docker Engine - Community
 Engine:
 Version: 19.03.12
 ...

让我们继续接下来的步骤。我们可以将此CLI 配置为使用Minikube 中的Docker 引擎。这样,我们将能够列出Minikube 中可用的图像,甚至在其中构建图像。

让我们看看配置Docker CLI 所需的步骤

$ minikube docker-env

我们可以在这里看到命令列表:

export DOCKER_TLS_VERIFY="1"
 export DOCKER_HOST="tcp://172.22.238.61:2376"
 export DOCKER_CERT_PATH="C:\Users\Baeldung\.minikube\certs"
 export MINIKUBE_ACTIVE_DOCKERD="minikube"
 # To point your shell to minikube's docker-daemon, run:
 # eval $(minikube -p minikube docker-env)

让我们执行最后一行的命令,因为它将为我们进行配置:

$ eval $(minikube -p minikube docker-env)

现在,我们可以使用Docker CLI 来调查Minikube 中的Docker 环境。

让我们使用minikube image ls命令列出可用的图像:

$ minikube image ls --format table

这将打印一个带有图像的表格:

|-----------------------------------------|---------|---------------|--------|
 | Image | Tag | Image ID | Size |
 |-----------------------------------------|---------|---------------|--------|
 | docker.io/kubernetesui/dashboard | <none> | 1042d9e0d8fcc | 246MB |
 | docker.io/kubernetesui/metrics-scraper | <none> | 115053965e86b | 43.8MB |
 | k8s.gcr.io/etcd | 3.5.3-0 | aebe758cef4cd | 299MB |
 | k8s.gcr.io/pause | 3.7 | 221177c6082a8 | 711kB |
 | k8s.gcr.io/coredns/coredns | v1.8.6 | a4ca41631cc7a | 46.8MB |
 | k8s.gcr.io/kube-controller-manager | v1.24.3 | 586c112956dfc | 119MB |
 | k8s.gcr.io/kube-scheduler | v1.24.3 | 3a5aa3a515f5d | 51MB |
 | k8s.gcr.io/kube-proxy | v1.24.3 | 2ae1ba6417cbc | 110MB |
 | k8s.gcr.io/pause | 3.6 | 6270bb605e12e | 683kB |
 | gcr.io/k8s-minikube/storage-provisioner | v5 | 6e38f40d628db | 31.5MB |
 | k8s.gcr.io/echoserver | 1.4 | a90209bb39e3d | 140MB |
 | k8s.gcr.io/kube-apiserver | v1.24.3 | d521dd763e2e3 | 130MB |
 |-----------------------------------------|---------|---------------|--------|

如果我们将其与docker image ls命令的输出进行比较,我们会看到两者都显示相同的列表。这意味着我们的Docker CLI 配置正确。

让我们使用我们的Dockerfile并从中构建一个镜像

$ docker build -t first-image -f ./Dockerfile .

现在它在Minikube 中可用,我们可以创建一个使用此映像的pod:

$ kubectl run first-container --image=first-image --image-pull-policy=Never --restart=Never

让我们检查一下这个pod 的日志:

$ kubectl logs first-container

我们可以看到预期的“Hello World”消息。一切正常。让我们关闭终端以确保我们的Docker CLI 未连接到下一个示例的Minikube。

4. Minikube 图片加载命令

让我们看看另一种使用本地图像的方法。这一次,我们将在我们的机器上在Minikube 之外构建Docker 镜像并将其加载到Minikube 中。让我们构建图像:

$ docker build -t second-image -f ./Dockerfile .

现在图像存在,但在Minikube 中尚不可用。让我们加载它

$ minikube image load second-image

让我们列出图像并检查它是否可用:

$ minikube image ls --format table

我们可以在列表中看到新图像。这意味着我们可以创建pod:

$ kubectl run second-container --image=second-image --image-pull-policy=Never --restart=Never

容器成功启动。让我们检查一下日志:

$ kubectl logs second-container

我们可以看到它打印了正确的消息。

5. Minikube 镜像构建命令

在前面的示例中,我们将预构建的Docker 映像加载到Minikube。但是,我们也可以在Minikube 中构建我们的图像。

让我们使用相同的Dockerfile并构建一个新的Docker 镜像:

$ minikube image build -t third-image -f ./Dockerfile .

现在镜像在Minikube 中可用,我们可以用它启动一个容器:

$ kubectl run third-container --image=third-image --image-pull-policy=Never --restart=Never

让我们检查日志以确保它正常工作:

$ kubectl logs third-container

它按预期打印“Hello World”消息。

六,结论

在本文中,我们使用了三种不同的方式在Minikube 中运行本地Docker 镜像。

首先,我们将Docker CLI 配置为连接到Minikube 内的Docker 引擎。然后,我们看到了两个命令来加载预构建的镜像并直接在Minikube 中构建镜像。


标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *