使用单个命令清理docker镜像,容器和卷

2023年 7月 16日 75.2k 0

虽然Docker具有停止和删除image,容器,网络和卷的命令,但它们并不全面。使用这组指令清理并刷新整个Docker环境,并将它们设置为shell别名。20190201.png本篇文章解释了如何:

  • 找出系统中存在的Docker数据和进程
  • 删除未使用的Docker镜像,容器,卷和网络
  • 全部删除以获得完全新鲜的Docker环境
  • 如何使用shell别名轻松地重用这些命令

Docker glossary

  • image:一个只读模板,包含创建Docker容器的说明
  • 容器:image的可运行实例。你可以使用Docker API或CLI创建,启动,停止,移动或删除容器
  • volume:保留Docker容器生成和使用的数据
  • (<none>:<none>)悬空:未使用的镜像或卷
  • network:连接Docker容器和服务

列出Docker进程和数据

一个有用的起点是查看系统上已加载的docker元素的列表。

  • docker container ls列表容器,也可以显示 docker ps
  • docker image ls 列出image,还有命令 docker images
  • docker volume ls 列表卷
  • docker network ls 列出网络
  • docker info 列出容器和镜像的数量,以及有关Docker安装的系统范围信息

只需清理未使用的数据和进程

清理Docker环境的主要区别在于你是想要完全刷新还是仅prune(修剪)它。

Docker提供了一种方便的方法来删除未使用的容器,网络和image:

docker system prune
WARNING! This will remove:
        - all stopped containers
        - all networks not used by at least one container
        - all dangling images
        - all build cache

默认情况下,如果当前没有使用该卷的容器,则不会删除卷以防止删除重要数据。--volumes在运行命令时使用该标志来prune卷

-  Docker docs:system prune

因此,要删除卷(--volumes),任何未使用的image(--all),以及覆盖确认提示符(--force):

docker system prune --all --force --volumes

WARNING! This will remove:
        - all stopped containers
        - all networks not used by at least one container
        - all volumes not used by at least one container
        - all images without at least one container associated to them
        - all build cache

prune 也可以用于一个方面:

  • docker container prune #删除所有已停止的容器
  • docker volume prune #删除所有未使用的卷
  • docker image prune #删除未使用的image

销毁所有完整的Docker

上面的最后一个命令不会删除所有正在运行的容器 因此,对于完整的系统refresh ,你需要停止所有容器,然后运行system prune命令。

幸运的是,docker的stop containers命令就是这样 docker container stop [CONTAINERS...]

但是,要获取该命令的正确信息,你需要获取所有容器ID的列表。

docker container ls -aq

ls 列出容器

--all / -a 所有容器(默认显示刚刚运行)

--quiet / -q 仅显示数字ID

所以要通过这个命令的返回值,所有容器的ID,来docker stop,你需要用它$()

命令替换允许替换命令的输出来代替命令名称本身。$(command)

现在停止所有docker容器的完整命令:

docker container stop $(docker container ls -a -q)

现在可以通过将此链接与本文前面介绍的完整prune命令相关联来实现完整的Docker系统清理。

docker container stop $(docker container ls -a -q) && docker system prune -a -f --volumes

同样,你现在知道如何组合docker命令,如果你愿意,只需删除一个方面。将所有ID的列表传递给关联的remove命令。

  • Containers docker container rm $(docker container ls -a -q)
  • Images docker image rm $(docker image ls -a -q)
  • Volumes docker volume rm $(docker volume ls -q)
  • Networks docker network rm $(docker network ls -q)

注意:有其他方法可以执行此操作,例如*docker ps*列出正在运行的容器以及*docker rm*删除容器。我已经这样写了,因为我觉得在docker对象中使用一致的命令名和语法更难忘。

如何使用shell别名轻松地重用它们

每次你可以将它们设置为shell的别名,而不是输入这些。你可以随意调用命令,这里我称之为docker-clean。

alias docker-clean-unused='docker system prune --all --force --volumes'

alias docker-clean-all='docker stop $(docker container ls -a -q) && docker system prune -a -f --volumes'

要在运行shell时将它们设置为加载,请将它们添加到shell的rc文件中。

echo [ALIASES ...]  
>>〜/ .bashrc

然后使用新别名重新加载文件。

source~ / .bashrc

bash的完整命令:

echo "alias docker-clean-unused='docker system prune --all --force --volumes'
alias docker-clean-all='docker container stop $(docker container ls -a -q) && docker system prune -a -f --volumes'" 
>> ~/.bashrc && source ~/.bashrc

Zsh的完整命令:

echo "alias docker-clean-unused='docker system prune --all --force --volumes'
alias docker-clean-all='docker container stop $(docker container ls -a -q) && docker system prune -a -f --volumes'" 
>> ~/.zshrc && source ~/.zshrc

现在在终端中尝试别名命令

[root@linuxea.com ~]$  docker ps
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                                                                                        NAMES
7087fe30f52d        rabbitmq:3.7.3-management   "docker-entrypoint..."   4 minutes ago       Up 4 minutes        4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp   docker_rabbit_1
[root@linuxea.com ~]$  docker-clean-all
7087fe30f52d
Deleted Containers:
7087fe30f52dbf84568f3429c52c8b24e335ff5f024a4d3f394f2eef7f0976c6
Deleted Networks:
docker_default
Deleted Volumes:
8c295273aca8a97bfe993fddbb9c0d4f66f7e81c8d8c625adbd0893d4b4a2847
Deleted Images:
untagged: rabbitmq:3.7.3-management
untagged: rabbitmq@sha256:0f681f18d80b2979596e8b262d06cacf7948e924d7f3a67e89be5fdea82cd116
deleted: sha256:2f415b0e9a6e74486edbc01ed99713225f6e65d31256819120319137c280c840
deleted: sha256:bcbbeee6343a0f57576e7c3f67dfa992c11d0e24d916e998dec5eb17c3e180f6
...
Total reclaimed space: 155.1MB

更多

使用这些命令可以快速轻松地管理docker系统。现在你知道如何列出和删除docker中的内容,为什么不创建其他别名,例如仅用于清理容器:

alias docker-clean-containers='docker container stop $(docker container ls -a -q) && docker container rm $(docker container ls -a -q)'

学习更多

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

  • docker目录
  • 白话容器

相关文章

LeaferJS 1.0 重磅发布:强悍的前端 Canvas 渲染引擎
10分钟搞定支持通配符的永久有效免费HTTPS证书
300 多个 Microsoft Excel 快捷方式
一步步配置基于kubeadmin的kubevip高可用
istio全链路传递cookie和header灰度
REST Web 服务版本控制

发布评论