使用Minikube的本地Docker镜像

1.概述

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

2.Dockerfile

首先,我们需要一个Dockerfile,以便能够创建本地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://192.168.49.2:2376"
export DOCKER_CERT_PATH="/home/work/.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 “消息。

6.结论

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值