我是否应该担心多余的,不运行的,Docker容器



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

我应该关心有一个庞大的非运行容器列表吗?我应该在非运行容器上发布docker rm吗?

我不确定这些非运行容器会产生什么性能或内存/存储损失

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

自己清理通常是件好事,但如果你有很多人坐在那里,它不应该减慢性能。

如果你发现在运行docker命令时有很多停止的容器时速度变慢,这可能是docker的一个bug,你应该提交一个bug

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

  --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 ps -s"中的SIZE列以及"virtual"关键字的含义#1520)。
  • --filter "status=exited": list only stopped container .

同样地,您可以运行:docker container ls --filter "status=exited"

您也可以使用命令docker system df(在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隔离系统中的一小部分资源,然后在这个隔离的资源环境中复制映像中的文件。

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

最新更新