磁盘垃圾清理
不同对象的垃圾清理
docker v1.13
之后提供了对各种对象的 prune
命令,提供对象垃圾处理功能。
# container
$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N]
# image
$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N]
# volume
$ docker volume prune
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N]
# network
$ docker network prune
WARNING! This will remove all networks not used by at least one container.
Are you sure you want to continue? [y/N]
# 可以通过设置 -filter 字段,来过滤要删除的容器
$ docker container prune --filter "until=24h"
所有对象的垃圾清理
docker 17.06.0
之后提供了删除所有对象垃圾处理功能。
$ docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N]
# 添加–volumes字段来清理存储卷的内容
$ docker system prune --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 dangling images
- all build cache
Are you sure you want to continue? [y/N]
内存限制
默认情况下容器使用的资源是不受限制的。
为什么要限制容器对内存的使用
linux
内核如果检测到没有足够的内存可以分配,就会扔出 OOME(Out Of Memmory Exception),并开始杀死一些进程用于释放内存空间。糟糕的是任何进程都可能成为内核猎杀的对象,包括 docker daemon
和其它一些重要的程序。甚至有可能引起整个系统的宕机。
内核在选择要杀死的进程时会对所有的进程打分,直接杀死得分最高的进程,接着是下一个。通过降低 docker daemon
的 OOM 优先级
可以在一定程度降低风险,但是并不能解决问题。
限制内存和 swap
# -m 设置最大可使用内存
# --memory-swap = memory + swap ,下面的示例就是不使用 swap 空间
$ docker run -it --rm -m 300M --memory-swap=300M <image-name>