在 Kubernetes minikube 教程中,有这样一段命令来使用 Minikube Docker 守护进程:
$ eval $(minikube docker-env)
这个命令到底有什么作用,也就是说,minikube docker-env
到底是什么意思?
命令minikube docker-env
返回一组 Bash 环境变量导出,以配置本地环境以重用 Minikube 实例中的 Docker 守护程序。
通过eval
传递此输出会导致 bash 评估这些导出并使其生效。
您可以通过省略评估步骤并直接运行minikube docker-env
来查看将在 shell 中执行的特定命令。但是,这不会执行配置- 需要为此评估输出。
这是一项工作流程优化,旨在改善您在构建和运行 Docker 镜像时的体验,您可以在 minikube 环境中运行这些镜像。为了有效地使用 minikube,您并不强制要求重用 minikube 的 Docker 守护进程,但这样做会显着提高代码构建测试周期的速度。
在正常的工作流程中,您的主机上将有一个与minikube中单独的Docker注册表,这需要以下过程在minikube中构建和运行Docker映像:
- 在主机上生成 Docker 映像。
- 使用远程注册表或 minikube 实例的注册表重新标记本地计算机映像注册表中的构建映像。
- 将映像推送到远程注册表或 minikube。
- (如果使用远程注册表(配置 minikube 具有从注册表拉取映像的适当权限。
- 在 minikube 中设置部署以使用该映像。
通过在 Minikube 中重用 Docker 注册表,这将变成:
- 使用 Minikube 的 Docker 实例构建 Docker 镜像。这会将映像推送到 Minikube 的 Docker 注册表。
- 在 minikube 中设置部署以使用该映像。
有关目的的更多详细信息,请参阅minikube文档。
尝试运行minikube docker-env
你会看到一些environment variables
在那里被提及:)
这些变量将帮助您docker CLI (where you write docker commands)
在 minikube 创建的VM 中与 docker 守护程序连接!
现在,要将 Docker CLI 连接到您需要运行的docker daemon inside the VM
:eval $(minikube docker-env)
这将暂时(对于该终端(将 CLI 连接到虚拟机:)内的 docker 守护程序
现在,尝试执行docker ps
,您可以看到在 VM 中创建的所有容器(仅当您在 k8 的集群中完成一些工作时才会显示(
这一切都是可能的,因为 docker-env 的这些环境变量
弄清楚$ eval $(minikube docker-env)
做什么的一种方法是了解我们希望在本地机器中构建一个 docker 映像,然后将它们部署到 minikube 环境中。 正如其他人所解释的那样,此命令使执行此操作更容易。
- 它告诉minikube使用从
minikube docker-env
返回的配置 - 然后,您可以在本地构建您的 docker 镜像,并能够在 minikube 环境中访问它
- 完成构建后,您可以取消设置 docker env,即如果您运行 Docker 配置,则通过取消设置这些 docker 配置来断开您的 minikube env
minikube docker-env --unset
如果不将 docker 配置设置为 minikube env,在本地构建映像并在 minikube env 的容器中运行它会有点乏味。
如果你有minikube运行,你可以ssh到env中,并查看其中运行的所有docker镜像。
你应该在运行'minikube start'后运行这个命令
eval $(minikube docker-env)
此命令可让您将cli tool
连接到 Kubernetes 集群的docker-env