清理docker镜像
要清理Docker镜像,可以使用以下命令:
- 删除未使用的Docker镜像:
docker image prune
docker image prune -a
- 删除所有停止的容器:
docker container prune
- 删除未使用的网络:
docker network prune
- 删除未使用的卷:
docker volume prune
- 删除未使用的构建缓存:
docker builder prune
如果你想删除特定的镜像,可以使用:
docker rmi [IMAGE_ID_OR_NAME]
请注意,替换掉[IMAGE_ID_OR_NAME]
为你想删除的镜像ID或名称。
如果你想删除所有停止的容器、未使用的网络和卷,可以一次性执行:
docker system prune
如果你想删除所有未使用的镜像(包括那些被停止的容器所使用的镜像),可以使用:
docker image prune -a
这些命令应该帮助你清理Docker环境中不再需要的对象。在运行这些命令之前,请确保你不再需要这些对象,因为这将是不可逆的操作。
清理docker镜像
清理Docker镜像可以通过多种方法进行,包括删除特定时间前的镜像、按照大小排序、使用脚本自动化、定时自动清理以及删除特定模式的镜像。以下是一些具体的方法:12
-
删除特定时间前的镜像:使用
docker image prune --filter "until=168h"
命令可以删除所有创建时间超过168小时(7天)的镜像。
-
按照大小排序:通过
docker images --format '{{.Size}}\t{{.Repository}}:{{.Tag}}' | sort -hr
命令,可以直观地看到哪些镜像占用空间较大,然后手动删除。
-
使用脚本自动化:编写一个简单的脚本来自动化清理过程,例如清理所有未使用的镜像和容器,或者删除所有以特定版本开头的镜像。
#!/bin/bash # 清理所有未使用的镜像和容器 docker system prune -af # 删除所有1.0版本开头的镜像 docker images | grep '1.0' | awk '{print $3}' | xargs docker rmi
-
定时自动清理:利用cron定时任务,可以设定周期性清理工作,例如每天凌晨两点执行清理脚本。
# 每天凌晨两点执行清理 0 2 * * * /path/to/your/script.sh
记得替换 ‘仓库名’ 为你的实际仓库名。
-
删除特定模式的镜像:使用grep命令和awk命令组合,可以删除特定仓库名或模式的镜像。
docker images | grep '仓库名.*1.0' | awk '{print $3}' | xargs docker rmi
此外,还可以通过以下方法清理Docker中的未使用资源:
-
清除所有未使用或悬空镜像、容器、卷和网络:使用
docker system prune
命令可以清理任何悬空(dangling)的资源。添加
-a
标志可以同时删除所有已停止的容器和所有未使用的镜像。 -
删除悬空的Docker镜像:通过
docker images --filter "dangling=true"
命令可以定位并删除那些与任何标记过的镜像无关的层,即悬空镜像。
-
自动清理:结合Crontab实现每天定时自动清理,例如设置每天凌晨一点执行清理7天以上未使用的镜像的命令。
再次提醒,执行删除操作前,务必确认不会丢失重要数据。定期备份和清理是保持 Docker 环境健康的关键。同时,也要确保没有正在运行的服务会受到影响。
通过上面的分享,相信大家已经对如何清理 Docker 镜像有了更加全面和深入的认识。希望这些方法能帮到你,也欢迎在技术交流群分享你的经验或提出问题。
那么,今天的内容就到这里。
查看docker镜像用了多少空间
-
docker system df
这是最直接的方法之一。运行
docker system df
命令可以列出Docker镜像、容器、数据卷等占用的磁盘空间。如果想要更详细的信息,可以加上
-v
参数,即docker system df -v
,这会显示每个镜像、容器和数据卷的详细信息。
-
docker images
使用
docker images
命令可以查看所有已下载的Docker镜像及其大小。这个命令会列出镜像的仓库名、标签、镜像ID、创建时间和大小等信息。docker images
输出示例:
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest abc123def456 7 days ago 146MB
这里的SIZE
列显示了每个镜像的大小。
四、清理Docker空间
如果你发现Docker占用了大量空间,并且想要清理不再使用的镜像、容器和数据卷,可以使用以下命令:
-
清理未使用的镜像:
docker image prune
-
清理未使用的容器:
docker container prune
-
清理未使用的网络和卷(谨慎使用,因为这会删除所有未附加到容器的卷):
docker system prune
这些命令可以帮助你释放Docker占用的磁盘空间。
综上所述,查看Docker镜像占用的空间主要通过docker system df
、docker images
等命令来实现。同时,了解Docker镜像在文件系统中的存储方式也有助于更深入地理解其空间占用情况。
在Docker中,overlay2 是默认的存储驱动之一,用于在宿主机上管理容器的镜像和文件系统。随着容器的运行和镜像的拉取,overlay2 可能会占用大量的磁盘空间。回收 overlay2 下可回收的空间主要涉及到删除不再使用的镜像、容器以及清理悬挂(dangling)的镜像层。以下是一些步骤和命令,可以帮助你回收 overlay2 下的空间:
1. 删除不再使用的容器
首先,你可以删除所有已停止的容器。这些容器不再运行,但它们的文件系统仍然占用磁盘空间。
docker container prune
或者,你可以使用更具体的命令来删除特定的容器:
docker rm $(docker ps -aq -f status=exited)
2. 删除不再使用的镜像
接着,删除那些不再被任何容器使用的镜像。这些镜像可能是旧版本或不再需要的。
docker image prune
或者,你可以使用 -a
选项来删除所有未被任何容器引用的镜像(包括悬空镜像):
docker image prune -a
3. 清理悬挂的镜像层
在Docker中,镜像是由多个层组成的。有时候,由于镜像的删除操作不彻底,一些层可能仍然保留在磁盘上,成为悬挂的层。虽然 Docker 通常会自动处理这些悬挂层,但有时候你可能需要手动触发清理。
Docker 的 docker image prune
命令通常已经足够处理悬挂的镜像层,但如果你发现空间没有被充分回收,可能需要考虑重启 Docker 服务或使用其他高级工具(如 docker system prune
)来清理。
4. 使用 Docker System Prune
docker system prune
命令会删除所有未使用的容器、网络、镜像(可选)和卷(可选),是清理 Docker 占用空间的一个非常有效的工具。
# 删除所有未使用的容器、网络、镜像和卷
docker system prune -a --volumes
# 如果你只想删除容器和网络,而不删除镜像和卷
docker system prune
请注意,-a
选项会删除所有未使用的镜像,包括那些未被标记的镜像。--volumes
选项会删除所有未挂载的卷。
5. 检查磁盘空间
在进行了上述清理操作后,你可以使用 df -h
命令来检查磁盘空间的使用情况,确认是否已经释放了足够的空间。
结论
通过删除不再使用的容器、镜像和清理悬挂的镜像层,你可以有效地回收 overlay2 存储驱动下的磁盘空间。如果仍然需要更多空间,考虑调整 Docker 的存储设置或升级你的磁盘硬件。
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://docker.m.daocloud.io",
"https://hub.roker.org",
"https://si7y70hh.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com",
"https://dockerhub.azk8s.cn",
"https://hub.uuuadc.top",
"https://docker.anyhub.us.kg",
"https://dockerhub.jobcher.com",
"https://dockerhub.icu",
"https://docker.ckyl.me",
"https://docker.awsl9527.cn",
"https://docker.chenby.cn",
"https://docker.hpcloud.cloud",
"https://atomhub.openatom.cn"],
"exec-opts": ["native.cgroupdriver=systemd"],
"insecure-registries": ["http://192.168.200.250"],
"log-driver": "json-file",
"log-opts": {
"max-size": "1000m","max-file": "6"
},
"storage-driver": "overlay2"
}
EOF