docker脚本

docker在使用过程中,一些常用的脚本。如镜像拉取等等命令。

资源

清理脚本

总则

prune是清理,停止的,未使用的意思。-q参数,一般就是资源的id。配合删除。

docker 子命令   prune  # 清理对应的
docker system prune   # 一键清理

资源占用

  • /var/lib/docker/containers/ID目录,如果容器使用了默认的日志模式,他的所有日志都会以JSON形式保存到此目录下。

  • /var/lib/docker/overlay2下载的镜像、运行的容器、卷等。

占用资源查看

docker system df

# 输出如下
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          0         0         0B        0B
Containers      0         0         0B        0B
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B

容器清理

#一键删除所有已经停止的容器
docker container prune
# 删除所有容器(包括停止的、正在运行的)
docker rm -f $(docker ps -aq)
docker container rm -f $(docker container ls -aq)

镜像清理

有一些镜像是隐形的:

  • 子镜像,就是被其他镜像引用的中间镜像,不能被删除。
  • 悬挂状态的镜像,就是不会再被使用的镜像,可以被删除。

列出所有悬挂状态的镜像

对应清理none脚本

docker image ls -f dangling=true
# 清理
docker image rm $(docker image ls -f dangling=true -q)
# 或者
docker image prune

删除所有的镜像

docker image rm $(docker image ls -q)

正在被容器使用的镜像是不能被删除的 。另外,对于一个镜像打了两个标签,则会有如下提示,使用-f参数来强制删除,但是,会不会删掉,正在运行的呢?

卷清理

# 删除不再使用的卷
docker volume rm $(docker volume ls -q)
# 或者
docker volume prune

构建缓存

docker builder prune	

一键清理

容器、镜像、数据卷都提供了 prune这个子命令,帮助我们回收空间 。 docker 系统层面也有 prune 这个子命令,可以一键清理没用的空间

docker system prune

自定义脚本

清理none镜像

在构建镜像的时候,如果构建的标签已经使用过了,则会发现,新构建的镜像的标签代替了旧的镜像,导致存在none这样的游离镜像。故使用下面方式一键删除无用的镜像。

docker image ls | awk '$1=="<none>" && $2=="<none>"{printf "docker rmi %s\n",$3}'|sh

备注:前面有现成的命令。