201902031

docker命令如何过滤docker容器,image,volumes

Docker命令可以与过滤器以及其他bash命令结合使用,包括grepawk搜索和查找特定类型的容器,image和volumes。

这些组合的一个重要用途是将搜索到的项的ID传递给另一个Docker命令以在所有这些项上执行。

第一个示例查找具有该nginx_repoimages的容器的所有ID,第二个示例查找在特定时间创建的容器的ID。然后docker rm将它们传递给上一个命令以将它们全部删除。

删除nginx_repo容器

[root@linuxea ~]$ docker rm $(docker ps -a|awk '/nginx_repo/{print $1}')

或者按照时间来删除

[root@linuxea ~]$ docker rm $(docker ps -a|awk '/2 months ago/{print $1}')

过滤Filters#

过滤器允许你搜索特定类型的Docker容器,image和volumes。

过滤标志(-f或--filter)格式为“key = value”。如果有多个过滤器,则传递多个标志(例如--filter "foo=bar" --filter "bif=baz")

-  Docker Docs:ps过滤

docker images --filter "dangling=true"

一些常用过滤器包括:

Dangling 意味着未使用的images表示尚未在容器中分配或使用它。例如,在运行时docker ps -a- 它将列出所有已退出和当前正在运行的容器。在任何容器内使用的任何images都是“使用过的images”。

另一方面,Dangling images只是意味着你已经创建了images的新构建,但没有给出新名称。所以你所拥有的旧images就变成了“悬空images”。那些旧images是未标记的images,并<none>在运行时在其名称上显示“ ” docker images

在此前的文章中介绍过如何进行清理docker镜像和容器和卷,事实上,运行docker system prune -a,它将删除未使用和悬空的images。因此,容器中使用的任何images,无论是已退出还是当前正在运行,都不会受到影响

另外,Dockerimages由多个图层组成。Dangling images是与任何标记images无关的图层。它们不再用于目的并占用磁盘空间。

  • 列出

docker images -f dangling = true

  • 删除

docker rmi $(docker images -f dangling = true -q)

例如,要过滤Docker容器并选择名称中包含字符串“mariadb”的容器:

[root@linuxea ~]$ docker ps --filter "name=mariadb"
CONTAINER ID        IMAGE                       COMMAND             CREATED             STATUS              PORTS               NAMES
c2563e96a47a        marksugar/mariadb:10.2.15   "/start.sh"         2 months ago        Up 6 weeks                              mariadb

docker文档具有过滤的例子,比如一个完整列表docker PS页

grep#

docker CLI命令集成了bash命令,所以你可以使用的方法,如grep通过docker的数据进行搜索。

grep在输入文件中搜索包含与给定模式列表匹配的行。当它在一行中找到匹配时,它会将该行复制到标准输出(默认情况下),或者你通过选项请求的任何其他类型的输出。

- TLDP Bash初学者指南:使用grep的示例

让我们更详细地看一下本文开头的例子。

示例:删除所有包含关键字mariadb的容器
docker rm $(docker ps -a | awk '/mariadb/{print $1}')

注意:我们可以有更好的方法,特别是在脚本中执行的时候,如果没有找到容器,则可以避免引发错误: mac:docker ps -a | awk '/mariadb/{print $1}' | xargs docker rm gnu linux&unix:docker ps -a | awk '/mariadb/{print $1}'| xargs --no-run-if-empty docker rm

学习更多#

学习如何使用Docker CLI命令,Dockerfile命令,使用Bash命令可以帮助你更有效地使用Docker应用程序。查看Docker文档和我的其他帖子以了解更多信息。