我应该担心多余的、不能运行的码头集装箱吗?

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

我是否应该考虑拥有一个庞大的非运行容器列表? 我是否应该对非运行容器发出 docker rm

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

12701 次浏览

没有运行的容器不占用除磁盘空间之外的任何系统资源。

通常清理自己的垃圾是很好的,但是如果你周围有很多这样的垃圾,那么就不应该减慢你的工作效率。

如果您确实注意到在运行带有大量已停止容器的 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

如果您运行一个带卷的容器,并且没有使用 码头 rm-v来删除它,那么在您删除一个容器之后,该卷就不会被删除。还有一个带有 vfs 存储驱动程序的 问题。如果您忘记清理,卷将占用您的磁盘空间。

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

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

docker ps --size --filter "status=exited"

等效地 ,您可以运行: 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 等)所需的那些文件的副本。

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

因此,容器只占用磁盘空间。如果存在未使用的容器,则应删除它们,但不应删除映像,因为它们总是可重用的。