如何从 minikube 中删除现有下载的 docker 图像
How to remove existing downloaded docker images from minikube
我正在使用 DevSpace tool 将多项服务部署到我的本地集群 (minikube
)。一旦有人对其中一项服务进行了更改并将图像推送到我们的私人存储库,我需要这些更改才能在我的本地可用。我现在要做的是完全删除 minikube
集群并开始一个新集群。在这种情况下,所有具有相同标签的图像都只是更新为最新版本,而不是缓存的。
但我相信有一些更优雅的方法可以克服这个问题。因此,在重新部署服务之前,我需要以某种方式从我的本地集群 cleanup/remove/delete 过时的图像。
有人可以指出它们的存储位置吗?我该如何查看和删除它们?谢谢
您可以尝试以下命令
删除未标记的图像:
docker image rm $(docker images | grep "^<none>" | awk "{print }")
移除所有停止的容器 :
docker container rm $(docker ps -a -q)
(或)
您需要停止并禁用 localkube 服务:
systemctl disable localkube.service
systemctl stop localkube.service
之后您就可以停止并移除容器。
docker system prune -a
删除所有图像
您可以执行滚动更新,而不是删除所有映像并重新创建集群(这是假设您正在使用部署,正如您应该的那样)。
kubectl set image deployments/<deployment-name>=<repository-name>/<image-name>:<image-tag>
这也是假设,您正在使用带有标签的正确版本控制。
或者,如果您使用带有 latest
标签的图像,您可以将 ImagePullPolicy
更改为 Always
,然后删除必要的 pods 和
kubectl delete pod <pod-name> <pod2-name> ...
创建新 pods 时将拉取较新的图像。
如果您仍想删除未使用的 docker 图片,您可以使用
docker image prune -a
这将删除所有没有至少一个容器关联的图像。
这里是 DevSpace 维护者。你需要的是两件事:
- 每次 运行
devspace dev
时强制重新创建 pods 的东西。因此,如果您使用的是 Deployment 或 StatefulSet,则可以添加类似标签的内容,例如包含 DevSpace 内置时间戳变量作为 Pod 模板的值。
- 在您的 pod 规范中添加
imagePullPolicy: Always
以确保 Kubernetes 始终为每个新创建的 pod 拉取最新图像。否则 Kubernetes 将使用已经缓存的图像。
结合起来,这在您的 devspace.yaml
文件中可能看起来像这样(如果您使用的是组件图表部署):
deployments:
- name: my-component
helm:
componentChart: true
values:
labels:
timestamp: $!{DEVSPACE_TIMESTAMP} # here is 1.
containers:
- image: "YOUR_IMAGE:latest" # specify any tag here that you want
imagePullPolicy: Always # here is 2.
$!{DEVSPACE_TIMESTAMP}
= $!{}
强制把这个var的值作为字符串放置(因为k8s只允许标签的字符串值)并且DEVSPACE_TIMESTAMP
是预定义变量的名称在开发空间中。此处有更多详细信息:https://devspace.sh/cli/docs/configuration/variables/basics#predefined-variables
我正在使用 DevSpace tool 将多项服务部署到我的本地集群 (minikube
)。一旦有人对其中一项服务进行了更改并将图像推送到我们的私人存储库,我需要这些更改才能在我的本地可用。我现在要做的是完全删除 minikube
集群并开始一个新集群。在这种情况下,所有具有相同标签的图像都只是更新为最新版本,而不是缓存的。
但我相信有一些更优雅的方法可以克服这个问题。因此,在重新部署服务之前,我需要以某种方式从我的本地集群 cleanup/remove/delete 过时的图像。
有人可以指出它们的存储位置吗?我该如何查看和删除它们?谢谢
您可以尝试以下命令
删除未标记的图像:
docker image rm $(docker images | grep "^<none>" | awk "{print }")
移除所有停止的容器 :
docker container rm $(docker ps -a -q)
(或)
您需要停止并禁用 localkube 服务:
systemctl disable localkube.service
systemctl stop localkube.service
之后您就可以停止并移除容器。
docker system prune -a
删除所有图像
您可以执行滚动更新,而不是删除所有映像并重新创建集群(这是假设您正在使用部署,正如您应该的那样)。
kubectl set image deployments/<deployment-name>=<repository-name>/<image-name>:<image-tag>
这也是假设,您正在使用带有标签的正确版本控制。
或者,如果您使用带有 latest
标签的图像,您可以将 ImagePullPolicy
更改为 Always
,然后删除必要的 pods 和
kubectl delete pod <pod-name> <pod2-name> ...
创建新 pods 时将拉取较新的图像。
如果您仍想删除未使用的 docker 图片,您可以使用
docker image prune -a
这将删除所有没有至少一个容器关联的图像。
这里是 DevSpace 维护者。你需要的是两件事:
- 每次 运行
devspace dev
时强制重新创建 pods 的东西。因此,如果您使用的是 Deployment 或 StatefulSet,则可以添加类似标签的内容,例如包含 DevSpace 内置时间戳变量作为 Pod 模板的值。 - 在您的 pod 规范中添加
imagePullPolicy: Always
以确保 Kubernetes 始终为每个新创建的 pod 拉取最新图像。否则 Kubernetes 将使用已经缓存的图像。
结合起来,这在您的 devspace.yaml
文件中可能看起来像这样(如果您使用的是组件图表部署):
deployments:
- name: my-component
helm:
componentChart: true
values:
labels:
timestamp: $!{DEVSPACE_TIMESTAMP} # here is 1.
containers:
- image: "YOUR_IMAGE:latest" # specify any tag here that you want
imagePullPolicy: Always # here is 2.
$!{DEVSPACE_TIMESTAMP}
= $!{}
强制把这个var的值作为字符串放置(因为k8s只允许标签的字符串值)并且DEVSPACE_TIMESTAMP
是预定义变量的名称在开发空间中。此处有更多详细信息:https://devspace.sh/cli/docs/configuration/variables/basics#predefined-variables