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

虽然Docker具有停止和删除image,容器,网络和卷的命令,但它们并不全面。使用这组指令清理并刷新整个Docker环境,并将它们设置为shell别名。

5c1967c5325842cec010c6abd3e07965.gif

本篇文章解释了如何:

找出系统中存在的Docker数据和进程

删除未使用的Docker镜像,容器,卷和网络

全部删除以获得完全新鲜的Docker环境

如何使用shell别名轻松地重用这些命令

I. Docker glossary

image:一个只读模板,包含创建Docker容器的说明

容器:image的可运行实例。你可以使用Docker API或CLI创建,启动,停止,移动或删除容器

volume:保留Docker容器生成和使用的数据

(:)悬空:未使用的镜像或卷

network:连接Docker容器和服务

II. 列出Docker进程和数据

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

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

清理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卷

因此,要删除卷(--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

IV. 销毁所有完整的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对象中使用一致的命令名和语法更难忘。

V. 如何使用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

VI. 更多

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

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

VII. 学习更多

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

除非另有说明,否则本站上的内容根据以下许可进行许可: CC署名-非商业性使用-相同方式共享4.0国际许可协议4.0进行许可

本文作者:www.linuxea.com for Mark

文章链接:http://www.linuxea.com/2246.html (转载请注明本文出处和本章链接)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值