简介
Docker让你很容易将你的应用程序和服务包装在容器中,这样你就可以在任何地方运行它们。然而,当你使用Docker时,也很容易积累了过多的未使用的镜像、容器和数据卷,使输出混乱并消耗磁盘空间。
Docker为你提供了所有的工具,你需要从命令行中清理你的系统。这本小抄式的指南提供了一个快速参考的命令,这些命令有助于释放磁盘空间,并通过删除未使用的Docker镜像、容器和卷来保持你的系统有序。
如何使用本指南。
- 本指南采用小抄的形式,包含独立的命令行片段。
- 你可以跳到与你要完成的任务有关的任何章节。
**注意:**命令的替换语法。 command $(command),在许多流行的shell中都可以使用,如bash、zsh和Windows Powershell。
清除所有未使用或悬空的镜像、容器、卷和网络
Docker提供了一个单一的命令,可以清理任何资源--镜像、容器、卷和网络--这些资源都是悬空的(没有标记或与容器相关联)。
docker system prune
要想额外删除任何停止的容器和所有未使用的镜像(不仅仅是悬空的镜像),请在命令中添加-a 标志。
docker system prune -a
删除Docker镜像
删除一个或多个特定的镜像
使用带有-a 标志的docker images 命令来定位你想删除的镜像的ID。这将显示每一个镜像,包括中间的镜像层。当你找到你想删除的图像时,你可以把它们的ID或标签传给docker rmi 。
列表。
docker images -a
删除。
docker rmi Image Image
删除悬空的镜像
Docker镜像由多个层组成。悬空的图像是与任何标记的图像没有关系的层。它们不再有任何作用,并且消耗了磁盘空间。通过在docker images 命令中添加过滤标志-f ,其值为dangling=true ,可以找到它们。当你确定要删除它们时,你可以使用docker image prune 命令。
**注意:**如果你建立一个图像而不对其进行标记,该图像将出现在悬空图像的列表中,因为它与已标记的图像没有关联。你可以通过在构建时提供一个标签来避免这种情况,你也可以用 docker tag命令对图像进行追溯标记。
列表。
docker images -f dangling=true
删除。
docker image prune
根据一个模式删除图片
你可以使用docker images 和的组合找到所有符合模式的图片。 grep.一旦你满意了,你可以通过使用 awk将ID传递给docker rmi 。 注意,这些工具不是由Docker提供的,不一定在所有系统上都可用。
列表。
docker images -a | grep "pattern"
删除。
docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi
移除所有镜像
通过在docker images 命令中添加-a ,可以列出一个系统中的所有Docker镜像。一旦你确定要把它们全部删除,你可以添加-q 标志,把镜像的ID传给docker rmi 。
列出。
docker images -a
删除。
docker rmi $(docker images -a -q)
移除容器
移除一个或多个特定的容器
使用带有-a 标志的docker ps 命令,找到你想删除的容器的名称或ID。
列表。
docker ps -a
移除。
docker rm ID_or_Name ID_or_Name
退出时删除一个容器
如果你在创建一个容器时知道一旦完成就不想再保留它,你可以运行docker run --rm ,在它退出时自动删除它。
运行并删除。
docker run --rm image_name
删除所有退出的容器
你可以使用docker ps -a 来定位容器,并通过其状态来过滤它们。created,restarting,running,paused, 或exited 。要查看exited 容器的列表,使用-f 标志根据状态进行过滤。当你确认你想删除这些容器时,使用-q ,将ID传递给docker rm 命令。
列表。
docker ps -a -f status=exited
删除。
docker rm $(docker ps -a -f status=exited -q)
使用一个以上的过滤器删除容器
Docker过滤器可以通过重复过滤器标志和一个额外的值进行组合。这将产生一个满足任一条件的容器列表。例如,如果你想删除所有被标记为created (当你用无效的命令运行容器时可能导致的状态)或exited ,你可以使用两个过滤器。
列表。
docker ps -a -f status=exited -f status=created
删除。
docker rm $(docker ps -a -f status=exited -f status=created -q)
根据一个模式来删除容器
你可以使用docker ps 和 .NET的组合来找到所有符合模式的容器。 grep.当你确信你有你想要删除的列表时,你可以使用 awk和xargs ,将ID提供给docker rm 。 注意,这些工具不是由Docker提供的,也不一定在所有系统上都可用。
列表。
docker ps -a | grep "pattern”
删除。
docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rm
停止并删除所有的容器
你可以用docker ps 来查看你系统中的容器。添加-a 标志将显示所有的容器。当你确定要删除它们时,你可以添加-q 标志来为docker stop 和docker rm 命令提供ID。
列表。
docker ps -a
删除。
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
移除卷
删除一个或多个特定卷 - Docker 1.9及以后版本
使用docker volume ls 命令来定位你想删除的卷的名称或名字。然后你可以用docker volume rm 命令删除一个或多个卷。
列表。
docker volume ls
删除。
docker volume rm volume_name volume_name
删除悬空卷 - Docker 1.9及以后版本
由于卷的意义在于独立于容器而存在,所以当一个容器被删除时,卷不会同时被自动删除。当一个卷存在并且不再与任何容器连接时,它被称为悬空卷。 为了找到它们以确认你要删除它们,你可以使用docker volume ls 命令,用一个过滤器将结果限制在悬空卷上。当你对列表满意时,你可以用docker volume prune 将它们全部删除。
列表。
docker volume ls -f dangling=true
删除。
docker volume prune
删除一个容器和它的卷
如果你创建了一个未命名的卷,可以用-v 标志将其与容器同时删除。注意,这只适用于未命名的卷。当容器被成功删除时,它的ID会被显示出来。注意,没有提到卷的删除。如果它是未命名的,它就被悄悄地从系统中移除。如果它是命名的,它就默默地保持存在。
移除。
docker rm -v container_name
结论
本指南涵盖了用Docker删除镜像、容器和卷的一些常用命令。还有很多其他的组合和标志可以与每个命令一起使用。关于可用的全面指南,请参见Docker文档中的 docker system prune, docker rmi, docker rm、 、 和 docker volume rm.如果你想在指南中看到一些常见的清理任务,请在评论中提问或提出建议。
要详细了解Docker容器的不同组件,请查看《Docker生态系统》。常见组件的介绍。