Dockerfile中的每个docker run
命令或每个RUN
命令都会创建一个容器。如果容器不再运行,仍然可以看到docker ps -a
。
我是否应该关注拥有大量非运行容器?我应该在非运行容器上发布docker rm
吗?
我不确定这些非运行容器会产生什么性能或内存/存储损失。
答案 0 :(得分:69)
未运行的容器除磁盘空间外不占用任何系统资源。
通常很好地清理自己,但如果你有很多人坐在它周围,它应该不会减慢性能。
如果在运行包含大量已停止容器的docker命令时发现速度变慢,则可能是docker中的错误,您应该提交错误。
答案 1 :(得分:61)
docker run
documentation描述了当容器退出时如何自动清理容器并删除文件系统:
--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
答案 2 :(得分:5)
如果您运行带有卷的容器但未使用 docker rm -v 将其删除,则在删除容器后不会删除该卷。还有一个带有vfs存储驱动程序的issue。如果您忘记清理,卷将占用您的磁盘空间。
答案 3 :(得分:2)
我不确定这些非运行容器会产生什么性能或内存/存储损失。
为了评估未运行的Docker容器正在使用多少存储空间,您可以运行:
docker ps --size --filter "status=exited"
--size
:显示总文件大小(仅供参考:Explain the SIZE column in "docker ps -s" and what "virtual" keyword means #1520)。--filter "status=exited"
:list only stopped containers。 Equivalently,您可以运行:docker container ls --filter "status=exited"
您也可以使用命令docker system df
(在2017年1月的Docker 1.13.0中引入)来查看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
答案 4 :(得分:2)
映像是文件系统和相关性或特定应用程序/软件的特定目录集的快照。快照是指容器环境中具有基本配置的运行该软件(例如mysql,redis等)所需文件的副本。
使用图像创建容器时,借助于 namespacing 和 cgroups ,然后隔离其中的文件,可以隔离系统中一小部分资源。图像是在这种隔离的资源环境中复制的。
因此,容器仅占用磁盘空间。如果有未使用的容器,则应删除它们,但不要删除图像,因为它们始终可重复使用。