一键删除docker-compose镜像和容器

本文介绍了两种方法来删除docker-compose管理的容器和镜像。方式1涉及使用docker命令行删除所有容器和镜像。方式2针对有多个docker-compose.yml文件的情况,提供了一键删除指定模块容器和镜像的shell脚本,方便发布和升级时的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方式1:删除docker下的所有容器和镜像

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)

方式2:当发布的时候分成多个 docker-compose.yml文件时,比如有系统支撑的mysql、redis、rabbitmq等的基础脚本docker-base目录,还有springboot分布式架构的docker-eureka、docker-feign、docker-hystrix,如下:

[root@localhost docker]# find . -name docker-compose.yml
./docker-base/docker-compose.yml
./docker-eureka/docker-compose.yml
./docker-feign/docker-compose.yml
./docker-hystrix/docker-compose.yml

这样分开的目的是方便发布与升级,我只需要重新删除指定的模块即可,其他的不用动。这时就可以用到如下脚本一键删掉指定模块的容器和镜像,创建clean.sh文件,然后录入以下内容:

#! /bin/bash

#找出docker-compose.yml 文件中的 镜像名称
grep -ai 'image' docker-compose.yml| awk '{ gsub (" ", "", $0);sub(/:/,"|");sub(/\r$/,""); print}' > tmp.1.txt
#查询所有容器的镜像名称和ID
docker ps -a --format "table {{.Image}}|{{.ID}}"|grep -v ID > tmp.2.txt
#通过上面两个临时文件,找出docker-compose.yml 文件中的镜像名称对应的容器ID
awk -F'|' 'NR==FNR{Z[$2]=$2}NR>FNR{if(Z[$1]!=""){print Z[$1]","$2}}' tmp.1.txt tmp.2.txt|awk -F',' '{print $2}' > result.1.txt
#根据ID停止容器
docker stop $(cat result.1.txt)
#根据ID删除容器
docker rm $(cat result.1.txt)

#找出所有镜像名称
docker images|grep -v IMAGE|awk '{print $1"|"$3}' > tmp.3.txt
#通过两个临时文件找出docker-compose.yml 文件中的镜像名称对应的镜像ID
awk -F'|' 'NR==FNR{a[$2]=$0}NR>FNR&&a[b=$1]{print $0, a[b]}' tmp.1.txt tmp.3.txt|awk -F'|' '{print $2}'|awk '{print $1}' > result.2.txt
#根据ID删除镜像
docker rmi $(cat result.2.txt)

#删除所有使用的临时文件
rm -rf result.2.txt result.1.txt tmp.3.txt tmp.2.txt tmp.1.txt
 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值