生成式AI领域的最新成果都在这里!抢 QCon 展区门票 了解详情
写点什么

Docker 清理的常用方法

  • 2021-03-16
  • 本文字数:1073 字

    阅读完需:约 4 分钟

Docker清理的常用方法

如果你使用 docker 进行大规模开发,但是没有清理策略,那么你的磁盘马上就会被填满,当你真的必须因为产品火爆而要立即交付一些东西时,你就无法交付。


当我们在计算机中运行一个进程时,一旦这个进程完成,所有东西都会随之销毁。容器是我们现在很多人操作的基础设施。一切东西都运行在一个容器上,旨在每个容器有一个进程。当进程完成,容器就退出。但它不会自行清理。

Docker 积累的东西

你需要注意这些


  • 已经停止的容器

  • 磁盘卷

  • 镜像

  • 网络


如果有足够的空间,你可能不太关心磁盘空间,但是网络也很重要。默认地,Docker 使用 bridge 网络,它的极限是 31 个网络。当达到极限时,你会看到下面这条消息:


could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network
复制代码


如果你是一个为每个项目创建一个网络的 docker-compose 重度用户,就会发生这种情况。你可以通过设置一个自定义--subnet子网来解决问题,例如:


docker network create dada --subnet 192.167.11.0/24
复制代码


但无论如何,本文的重点是清理。

使用 docker 清理

清理已经停止的容器

docker rm -v $(docker ps --all --quiet --filter 'status=exited')
复制代码


这会找到所有处于已退出(exited)状态的容器,一行一个地输出它们的 ID,以便我们可以将它提供给其它 shell 指令。


我们使用docker rm -v来删除任何匿名卷(没有显式名称的卷)。

清理磁盘卷

上面的命令应该删除与该容器关联的卷。如果你手动创建卷,并要删除任何未被使用的卷:


docker volume rm $(docker volume ls --quiet --filter 'dangling=true')
复制代码

清理镜像

通常删除所有 Docker 镜像是安全的。我们可以在需要的时候按需获取。通常在一个镜像被清理后,构建时间会更长,因为 docker 守护进程需要花时间再次下载镜像


docker rm --force $(docker images --quiet)
复制代码


这里,我们使用了--force来强制删除镜像,即使一个容器正在使用那个镜像。我们可以以后再获取这个镜像。

清理网络

这很简单。我们可以删除任何网络,它会在之后按需重建。


docker network rm $(docker network ls --quiet)
复制代码

使用 docker-compose 清理

如果你使用 docker-compose 启动容器,我们有一种简单的方法来清理与特定 compose 文件关联的资源。


docker-compose down --volumes --rmi all --remove-orphans
复制代码


不幸的是,这个命令不会删除匿名卷,因此你必须处理这些匿名卷。

一条命令解决所有问题

docker 是短暂的,我们总是可以重新获取镜像,为了开发重新创建我们的数据库,或者这只是一个持续集成系统,我们可以删除一切。


docker system prune --all --force --volumes
复制代码


原文链接:


https://hanami.run/blog/posts/cleanup-docker/

2021-03-16 14:313355
用户头像

发布了 165 篇内容, 共 71.5 次阅读, 收获喜欢 342 次。

关注

评论 1 条评论

发布
用户头像
指令写错了,垃圾。。docker rm --force $(docker images --quiet)
2022-01-12 14:21
回复
没有更多了
发现更多内容

ONE MORE

吴小平

如何学习数据结构与算法

C语言与CPP编程

c c++ 数据结构 程序人生 算法

位运算符在 JS 中的妙用

浩浩子

Redis 作为缓存是如何工作的

escray

redis 学习 极客时间 3月日更 Redis 核心技术与实战

SpringBoot + Mybatis + Druid + PageHelper在多数据源下如何配置并实现分页

北游学Java

Java mybatis spring Boot Starter

浅析Node中间件Koa&Express:原理和实现

云小梦

JavaScript node.js 中间件 koa

散列(哈希)表算法学习

Nick

数据结构 算法 哈希算法

推荐引擎概述

跳蚤

2021春招JAVA面试总结:Java+并发+Spring+MySQL+分布式+Redis+算法+JVM等

Java 编程 程序员 架构 面试

shell学习

我是程序员小贱

3月日更

使用Flask Nginx Gunicorn和Supervisor部署一个简单的Restful API接口服务器

Langer

Python 部署与维护 服务器部署 web服务

第八章作业

LouisN

数据分析作业-用户分析-ReadHub

隋泽

产品经理训练营

Python OpenCV setMouseCallback 回调函数,取经之旅第 13 天

梦想橡皮擦

3月日更

使用 Typescript 的一些注意事项

浩浩子

智能时代的TCL之舞

脑极体

HTML5+CSS3高级动画的应用实践

云小梦

JavaScript html css3 浏览器API 网页动画

尤雨溪 Twitch 直播:下一代前端构建工具 ViteJS —— Open Source Friday

清秋

翻译 大前端 vite webpack 构建工具

用栈、回溯算法设计迷宫程序

不脱发的程序猿

回溯算法 28天写作 3月日更 迷宫程序

浅析 Fabric Peer 节点

Rayjun

Mac下brew更新及安装Prometheus+Grafana

程序员架构进阶

容器 Prometheus 监控系统 28天写作 3月日更

用户体验 | 页面阅读进度提示

云小梦

html css3 用户体验 页面进度提示

React 中后台系统多页签实现

清秋

Vue 大前端 React keepalive

Logstash 中 Ruby filter 使用指南

Langer

ruby Logstash ELK

一文搞懂如何实现 Go 超时控制

万俊峰Kevin

微服务 超时 Go 语言

加密解密之 crypto-js 知识

浩浩子

我对PageRank 算法的理解

跳蚤

如何学习数据结构与算法

C语言与CPP编程

数据结构 算法

力扣(LeetCode)刷题,简单+中等题(第26期)

不脱发的程序猿

面试 LeetCode 28天写作 算法面经 3月日更

Img、net & page新展望:连接感知

云小梦

JavaScript html 网络 用户体验 连接感知

架构师训练营 4 期 第13周

引花眠

架构师训练营 4 期

Docker清理的常用方法_服务革新_Hanami_InfoQ精选文章