Docker 清理释放磁盘空间优化性能指南
在我们日常使用 Docker 的过程中,可能时不时会遇到以下情况:
$ docker-compose ps
[27142] INTERNAL ERROR: cannot create temporary directory!
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 489M 132K 488M 1% /dev
tmpfs 497M 0 497M 0% /dev/shm
/dev/xvda1 7.8G 7.7G 0 100% /
目前我们大概知道 Docker 很可能会占满磁盘。在这种情况下,我们必须进行清理。本博客主要总结了一些强大的 Docker 清理操作如下。
- 搜索对接数据和流程;
- 删除未使用的映像、存储、卷和网络;
- 重置Docker
- 限制Sheet大小
- 其他相关操作
在了解这些之前,我想你一定已经了解了下面的词汇。
- image:可用于创建容器的只读模板。例如,包含 ubuntu 系统的镜像。
- 容器:从镜像创建的运行实例。您可以使用 Docker 命令控制这些容器。
- 卷:对接数据保留。
- 悬挂:未使用的图像。
- 网络:连接到docker容器服务。查看Docker磁盘使用情况,容器占用42.85MB,数据量
3.541GB
。了解了基本占用情况后,我们就可以通过下面的命令进行有针对性的清理。查找 Docker 数据和进程
要清理 Docker,您需要知道 docker 数据在哪里以及哪些 docker 进程在哪里。 MDocker Images列出了docker镜像;
Docker PS
列出 Docker 容器;Docker Volume ls
docker 网络列表;Docker 信息
列出容器镜像的数量以及一些 docker 安装等系统信息。
删除未使用的数据和进程
Docker提供了一些删除未使用的容器、网络和镜像的快捷方式:
$ docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache
Are you sure you want to continue? [y/N]
默认情况下,它不会删除数据卷功能,因为数据更重要,防止意外删除一些数据。可以使用 体积
来确定。
同时 – 我们还可以删除所有
未使用的图片。为了避免确认,请使用--force
。
$ docker system prune --all --volumes
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all volumes not used by at least one container
- all images without at least one container associated to them
- all build cache
Are you sure you want to continue? [y/N]
当然,我们也可以单独删除它们。
docker集装箱西梅
清洁停止的容器;Docker卷修剪
删除未使用的数据卷;Docker 镜像修剪
干净、未使用的镜像;删除所有
Data Recovery Docker
以上命令对正在运行的存储库及相关镜像、数据卷和网络没有影响。如果您需要全部清洁,则需要停止所有水箱。
使用 docker 容器停止 [CONTAINERS...]
停止正在运行的容器。同时,我们可以通过以下命令获取正在运行的容器ID。
$ docker container ls -aq
ls
所有容器列表;--all / -a
列出所有容器(包括非运行者);--quiet / -q
仅容器标识符;
所以我们可以通过以下命令来停止所有容器:
$ docker container stop $(docker container ls -a -q)
与clear命令结合,完整的清除所有容器命令为:
$ docker container stop $(docker container ls -a -q) && docker system prune -a -f --volumes
同样,我们可以想到如下:
- Cle docker 容器 rm $(docker 容器 ls -a -q) /
docker rm $(docker ps -a -q)
; Clerm docker 镜像 ls -a - q);
- 删除数据卷
dockervolume rm $(dockervolumels -q)
;;; - docker 网络 网络 ls -q);
存储日志大小限制
我们经常发现日志文件让我们不知所措。问题的根源在于存储日志大小限制。共有三种方法:
- 修改
daemon.json
配置;{ "log-opts": { "max-size" : "521m" } }
- 更改
docker-compose
;ubuntu: image: ubuntu restart: always logging: driver: "json-file" options: max-size: "1g"
- 传递参数;
$ docker run -d --log-opt max-size=1g ubuntu
其他常见相关清理命令
- 删除指定日志文件;
如果要删除特定容器的日志,只需执行几个步骤即可。
# 获取指定的容器ID, 可通过docker ps 查看 如:2ed640d8fcd1 # 获取该容器的日志地址 $ docker inspect 2ed640d8fcd1 --format '{{.LogPath}}' /mnt/data/docker/containers/2ed640d8fcd1bd464a23be78513d23be1807c8ad6a95116da5cb9118a6b2380a/2ed640d8fcd1bd464a23be78513d23be1807c8ad6a95116da5cb9118a6b2380a-json.log
如果知道日志地址,可以删除或删除日志,但要注意权限。 ~
- 杀死所有正在运行的容器;
$ docker kill $(docker ps -a -q)
- 删除所有停止的容器;
$ docker rm $(docker ps -a -q)
- 删除未打开的标记图像;
$ docker rmi $(docker images -q -f dangling=true)
- 指定的镜像/容器等批量删除;
--format
可用于指示docker命令的输出格式,grep
用于过滤然后删除。例如:# 删除带有指定 hub.docker.com 仓库的镜像 $ docker rmi $(docker images --format '{{.Repository}}' | grep 'hub.docker.com') # 杀掉带有ubuntu 镜像名字的容器 $ docker kill $(docker ps -a --format '{{.Images}}' | grep 'ubuntu')
在使用Docker进行日常开发部署时,经常会遇到需要进行清理操作的情况。在上一节中,我们介绍了一些强大的 Docker 清理操作,包括检查磁盘使用情况、查找 Docker 数据和进程、删除未使用的镜像、容器、卷和网络、重置 Docker 以及限制容器日志大小。 。现在让我们看看其他一些常见的 Docker 清理命令和一些建议。
清除未使用的构建缓存
当您使用 Docker 构建镜像时,会生成一些中间构建镜像和缓存。这些缓存可能会占用大量磁盘空间,尤其是在多次构建映像之后。要释放磁盘空间,请使用 docker builder prune
删除未使用的构建缓存。
$ docker builder prune
这将删除所有未使用的中间构建映像和缓存,从而释放宝贵的磁盘空间。
清除挂起的卷和网络
Docker 可能有挂起的卷和网络,这意味着它们不再与任何容器关联,但仍然占用磁盘空间或系统资源。要清理未使用的卷和网络,您可以使用 docker volume prune
和 docker network prune
命令。
$ docker volume prune
$ docker network prune
这些命令将删除与任何存储无关的所有卷和网络,确保充分利用系统资源。
删除未标记的镜像
使用 Docker 构建和使用镜像时,可能会生成一些未标记的镜像。这些图像没有与标签关联,因此难以管理和识别。您可以使用 docker image prune
来清理未标记的图像。
$ docker image prune
这将删除所有未标记且不与任何容器关联的图像,使图像列表更清晰。
删除已停止的容器
当我们停止容器时,这些容器仍保留在系统中并占用磁盘空间。如果不再需要这些容器,您可以使用 docker container prune
命令删除已停止的容器。
$ docker container prune
这将删除所有已停止的容器,释放磁盘空间和系统资源。
自动清理策略
除了手动执行清理命令外,还可以配置Docker自动执行清理操作。在 Docker 的配置文件daemon.json
中,您可以设置一些参数来定义自动清理策略。
例如,您可以设置图像和容器的过期时间,以便自动清理它们。
{
"image-prune-filters": {
"until": "24h"
},
"container-prune-filters": {
"until": "24h"
}
}
上述配置会删除所有超过 24 小时未使用的镜像和容器。
您还可以设置最大日志大小和日志文件保留时间,以限制日志文件的增长。
{
"log-opts": {
"max-size": "100m",
"max-file": "10"
}
}
上述配置将每个日志文件的最大大小限制为100 MB,并且最多保留10个日志文件。
通过自动清理策略,可以定期清理不再需要的图像、存储和日志,以保持系统的有序和良好运行。
总结
码头清洁是日常维护工作中不可或缺的一部分。通过删除未使用的映像、存储库、网络、卷和缓存以及设置自动清理策略,释放磁盘空间、优化系统性能并维护 Docker 环境的可靠性和稳定性。
在执行任何清理操作之前,请确保您了解清理命令的含义,并仔细考虑所清理的资源是否确实不必要。清洁不当可能会导致数据丢失或其他意外情况。作者:Bobochang
来源:稀土掘金
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。