首页 > 解决方案 > 有什么方法可以配置 Skaffold 以在我的本地 Docker 守护程序而不是 minikube 的守护程序上构建图像?

问题描述

我在 Linux 上使用 minikube 和 Docker 驱动程序。对于手动工作流程,我可以在 minikube 中启用注册表插件,将我的图像推送到那里并在部署配置文件中将它们简单地引用为localhost:5000/anything. 然后它们被其 Docker 守护进程拉到 minikube 的环境中,并在此处成功开始部署。结果,我将所有基本图像都保存在我的本地设备上(当我使用本地 Docker 守护程序构建图像时),并且 minikube 的环境仅被其 Docker 守护程序拉取的图像弄乱了。

我可以在使用 Skaffold 时实现相同的工作流程吗?默认情况下,Skaffold 使用 minikube 的环境来构建镜像和运行容器,并且它在 minikube 中复制(有时甚至三重复制)我的镜像(不知道为什么)。

标签: dockerkubernetesminikubeskaffold

解决方案


Skaffold 直接构建到 Minikube 的 Docker 守护程序作为优化,以避免在推送到注册表时需要额外的检索和解包。

我相信您的副本如下所示:

$ (eval $(minikube docker-env); docker images node-example)
REPOSITORY     TAG                                                                IMAGE ID       CREATED      SIZE
node-example   bb9830940d8803b9ad60dfe92d4abcbaf3eb8701c5672c785ee0189178d815bf   bb9830940d88   3 days ago   92.9MB
node-example   v1.17.1-38-g1c6517887                                              bb9830940d88   3 days ago   92.9MB

尽管这些图像具有不同的标签,但这些标签只是指向相同图像 ID 的指针,因此保留了一个图像。

Skaffold 通常会清理以前运行的剩余图像。所以你不应该看到 minikube 守护进程的空间不断增长。


顺便说一句:即使这些图像 ID 不同,图像也由多个图层组成,并且这些图层在图像之间共享。因此 Docker 报告的映像大小可能与实际消耗的磁盘空间不匹配。


推荐阅读