前言Docker类似于虚拟机,可以方便地安装APP应用程序和相关软件包,以便在任何地方执行。 但是,使用Docker容易积累无用的镜像、容器和卷。 他们占用了非常大的空间和资源。
Docker提供了针对此类问题的删除命令和工具。 本教程是Docker删除命令的参考指南。 本教程教您如何安全、有序地清洁Docker。
如何使用本指南:
本指南使用命令对应示例进行说明。 可以使用Ctrl F搜索跳转到所需的删除功能并查询相应的命令。 清除所有未使用或装载的镜像、容器、卷和网络配置的Docker包含所有未装载(与容器无关)的资源(镜像、容器、卷和
docker system prune返回内容:
魔兽世界! thiswillremove :-allstoppedcontainers-allnetworksnotusedbyatleastonecontainer-alldanglingbuildcacactiones-alldangimages-agimages
删除dockersystemprune-adocker镜像删除一个或多个指定为docker images -a的镜像时,将检测到所有镜像ID。 从列表中找到要删除的镜像,复制其ID或名称,然后使用docker rmi ID/名称删除指定的镜像。
查看列表:
docker images -a删除:
docker rmi Image Image注意:如果一个镜像是另一个镜像的参考镜像,则无法删除。
例如,adafef2e596e是7896ef8f403f的参考镜像,不能直接删除adafef2e596e。
repositorytagimageidcreatedsizekalasearch/Ubuntu-nodejs latest 07 bb1 f 0f BF 362 hours ago 163 mbuntulatestadafef2e596 E4 daysago 73.9 MB hello-worldlatestbf 756 FB 1a e 65 months ago rago rago lict : unabletoremoverepositoryreference ' Ubuntu ' (最大力)-container 7896 ef 8f 403 fisusingitsreferencedimageadafef2e5996 一些镜像被命名为none。 当这些镜像被新镜像覆盖时,旧版本的镜像为none。 这些镜像被称为虚悬镜像。 这些镜像已经没有任何作用,并且占用了磁盘空间。 可以通过向命令中添加参数-f来找到它们。 如果要删除它们,可以使用dangling=truedockerimagesdockerimagespurge命令
注意:如果创建的镜像没有tag,则此镜像也会显示在虚拟悬垂镜像列表中。 要避免这种情况,请在创建镜像时添加tag,然后使用docker tag查找镜像
查看列表:
docker images -f dangling=true删除:
docker images purge根据模式删除镜像。 使用grep,可以根据需要找到要删除的镜像文件。 也可以找到特定属性的镜像文件。 然后,可以通过使用awk将ID传递给docker rmi来将其删除。 具体可以看到以下例子。
查看列表:
使用docker images -a | grep 'pattern '删除:
docker images-a ' grep ' pattern ' ' { print $3} ' ' xargsdockerrmi实例:
杜克斯映像- a的输出结果如下。
repositorytagimageidcreatedsizekalasearch/Ubuntu-nodejs latest
07bb1f0fbf36 24 hours ago 163MBubuntu latest adafef2e596e 5 days ago 73.9MBhello-world latest bf756fb1ae65 6 months ago 13.3kB在docker images查询命令后添加grep:
docker images -a | grep "bf756fb1ae65"输出结果为:
hello-world latest bf756fb1ae65 6 months ago 13.3kB删除此镜像:
docker images -a | grep "bf756fb1ae65" | awk '{print $3}' | xargs docker rmi执行结果:
Untagged: hello-world:latestUntagged: hello-world@sha256:d58e752213a51785838f9eed2b7a498ffa1cb3aa7f946dda11af39286c3db9a9Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6bDeleted: sha256:9c27e219663c25e0f28493790cc0b88bc973ba3b1686355f221c38a36978ac63 删除所有镜像我们用docker images -a命令来查看所有镜像。确定要全部删除后,我们添加参数-q
把需要删除的镜像ID传给docker rmi
查看列表:
docker images -a执行删除:
docker rmi $(docker images -a -q) 删除容器 删除一个或多个指定容器使用docker ps -a命令来查找要删除的容器名或ID:
查看列表:
docker ps -a执行删除:
docker rm ID_or_Name ID_or_Name 退出时删除容器如果我们在创建容器时就知道用完后不用保留这个容器,那么我们可以在运行这个容器时,添加参数rm。docker run --rm,这样在执行完成时,此容器会被自动删除。
运行并删除:
docker run --rm image_name 删除所有退出的容器我们可以通过docker ps -a轻松查找并通过容器当前状态进行筛选:创建、重启、运行、暂停、退出。如果我们要查看已退出的容器列表,我们可以添加参数-f来查看,删除时用-q传递给删除命令docker rm
查看列表:
docker ps -a -f status=exited执行删除:
docker rm $(docker ps -a -f status=exited -q) 使用多个过滤器筛选出指定容器我们可以通过 Docker ps的参数赋值来进行“或”的查询和删除。只要满足任意条件,删除命令即会把它们删除掉。例如,我们想要删除容器被标记为 Created (使用无效命令运行容器时,可能导致的状态)或者 Exited 的容器,我们则可以使用两个过滤器:
查看列表:
docker ps -a -f status=exited -f status=created执行删除:
docker rm $(docker ps -a -f status=exited -f status=created -q) 根据模式删除容器我们可以通过grep来按需查找到我们需要删除的容器,可以查找某一类属性的容器。然后我们可以通过使用awk将ID传递给docker rmi来删除它们。
查看列表:
docker ps -a | grep "pattern”执行删除:
docker ps -a | grep "pattern" | awk '{print $3}' | xargs docker rmi 停止并删除所有容器我们可以使用docker ps -a命令来查看所有容器。确定要删除这个列表中的全部容器后,我们在命令结尾添加参数-q 然后传给docker stop 和 docker rm命令即可
查看列表:
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 删除虚悬卷(dangling volumes) - Docker 1.9及更高版本可用由于卷的位置要独立于容器而存在,因此在删除容器时,不会同时自动删除卷。当一个卷存在并且不再连接到任何容器时,称为虚悬卷(dangling volumes) ****。要找到它们并删除可以用docker volume ls命令加上过滤器即可。确定列表中都是想要删除的卷后,我们可以使用docker volume prune命令将它们全部删除:
查询列表:
docker volume ls -f dangling=true执行删除:
docker volume prune 移除容器及对应的卷我们可以使用docker rm -v来删除指定容器并同时删除为此容器分配的卷。在执行删除命令后,当容器已经成功删除时,会显示此容器的 ID。另外要注意的是,此命令只会删除容器,和此容器对应的未命名卷。如果卷被命名了,它不会被此命令删除,仍然会保留在系统中。
执行删除:
docker rm -v container_name 总结本指南介绍了 Docker 中删除镜像、容器及卷的常用命令。其实每个命令还可以有很多组合,更多信息大家可以参考 Docker 官方文档 docker system prune ,docker rmi ,docker rm 、 docker volume rm 。如果大家还有什么不明白的地方,欢迎在留言区留言,我们会根据大家的问题,继续来丰富 Docker 指南。