我是否应该关注多余的、未运行的Docker容器?

我是否应该关注多余的、未运行的Docker容器?,docker,Docker,docker文件中的每个run命令或每个run命令都会创建一个容器。如果容器不再运行,仍然可以通过docker ps-a看到它 我是否应该关心大量未运行的容器?我应该在非运行的容器上发布docker rm 我不确定这些未运行的容器会带来什么性能或内存/存储方面的损失。未运行的容器不会占用磁盘空间以外的任何系统资源 通常情况下,清理自己的房间是很好的,但如果有很多人坐在周围,这根本不会降低性能 如果在使用大量停止的容器运行docker命令时注意到速度减慢,则可能是docker中存在错误,您应该提交

docker文件中的每个
run
命令或每个
run
命令都会创建一个容器。如果容器不再运行,仍然可以通过
docker ps-a
看到它

我是否应该关心大量未运行的容器?我应该在非运行的容器上发布
docker rm


我不确定这些未运行的容器会带来什么性能或内存/存储方面的损失。

未运行的容器不会占用磁盘空间以外的任何系统资源

通常情况下,清理自己的房间是很好的,但如果有很多人坐在周围,这根本不会降低性能

如果在使用大量停止的容器运行docker命令时注意到速度减慢,则可能是docker中存在错误,您应该提交错误。

描述了如何在容器退出时自动清理容器并删除文件系统:

  --rm=false: Automatically remove the container when it exits (incompatible with -d)
上面显示,默认情况下不会删除容器,但添加
--rm=true
或仅添加简写的
--rm
将像这样工作:

sudo docker run -i -t --rm ubuntu /bin/bash
当您从容器中退出时,它将自动删除

您可以通过在一个终端窗口中列出docker容器来测试这一点:

watch -n1 'sudo ls -c /var/lib/docker/containers'
然后在另一个窗口中运行此命令以运行多个docker容器,这些容器将在睡眠10秒后自动退出

for i in {1..10}; do sudo docker run --rm ubuntu /bin/sleep $i & done

如果使用卷运行容器,并且未使用docker rm-v删除该容器,则删除容器后不会删除该卷。还有一个带有vfs存储驱动程序的。如果忘记清理,卷将占用磁盘空间

我不确定这些未运行的容器会导致什么性能或内存/存储损失

为了评估非运行Docker容器使用的存储量,您可以运行:

docker ps --size --filter "status=exited"
  • --size
    :显示总文件大小(仅供参考:)
  • --筛选“状态=已退出”
,您可以运行:
docker容器ls--filter“status=exited”

您还可以使用命令(Docker 1.13.0,2017年1月引入)查看Docker磁盘的使用情况,例如:

username@server:~$ docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              44                  28                  114.7GB             84.84GB (73%)
Containers          86                  7                   62.43GB             41.67GB (66%)
Local Volumes       2                   1                   0B                  0B
Build Cache                                                 0B                  0B

映像是特定应用程序/软件的文件系统和依赖项或特定目录集的快照。我所说的快照,是指在容器环境中使用基本配置运行该软件(例如mysql、redis等)所需的文件的副本

当您使用映像创建容器时,系统中的一小部分资源在名称空间cgroups的帮助下被隔离,然后映像中的文件被复制到这个隔离的资源环境中


因此,容器只占用磁盘空间。如果有未使用的容器,您应该删除它们,但不要删除图像,因为它们总是可重复使用。

运行命令的文档现在已移动到:不是对问题的直接回答,而是一个有趣的答案,它将让用户对docker背后的机制有一些了解。谢谢
-rm
已弃用,将在某个时间被删除,请改用
-rm
。不久前添加了
docker exec
命令,请参阅-它将在运行的容器上执行命令。仅供参考,如果您想了解如何删除旧容器,请参阅此问题:@schmunk链接已移动。