一、概述
在本教程中,我们将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 评论